So, using i2c io expanders to scan switches is sorta slow'ish, similar to one half of the ergodox.
You won't get the scanning latency you would from scanning directly with a uc.
It can be made to work, but I wouldn't advertise it as a gaming keyboard.
Let's use some numbers. Normal i2c is around 400 kbit/s, but you can do around 3.4 Mbit/s on some chips if the wire length is short (
http://en.wikipedia.org/wiki/I%C2%B2C).
So, you have to scan each switch, this will require at least 3 8 bit words per scan. 1 chip address, 1 register address, 1 reply. Now you mention two io expanders, so divide by two.
3.4 Mbit/s / (8 * 3 * 2) = 70.833 k scans per io expander.
Now you have 16 bits, so lets say you can do an 8 x 8 matrix which is 64 keys.
70.833 k / 64 = 1106.8 scans per switch per second.
I'm being a bit loose with my math, but even though 1000 scans per second doesn't seem that bad, this also assumes that the uc is optimized for dealing with the i2c.
1000 scans per second per switch doesn't seem to bad (1000 Hz for usb
). But that assumes no i2c overhead and programming overhead on the uc (i2c gets processing priority).
There's also the increased complexity of having more chips on the board, increasing the possibility of failure.
Now your question talks about scanning each key individually rather than using a matrix. On the firmware side, this actually gets easier. You can have up to 16 * 2 keys (32 keys), which isn't that many keys. And, you now have to deal with routing all those wires... But yeah, firmware is easy. And you'd get a 4x speed increase from the calcs above (only 32 keys instead of 132).
Unless it's a 1 off thing, I really wouldn't recommend it personally due to the routing issues.
Hope this helps.