So, the latency isn't a huge deal, though it can give an edge.
The big reason why the original ergodox has a bit of delay: Poll+debounce.
1) Poll, you need to query, then receive the data. The original ergodox is not asynchronous.
2) Debounce, you must poll multiple times in order to determine if the key was press/released
Just removing (2), would make it significantly better (sadly I don't have an original ergodox around to scope the latency).
For the Infinity Ergodox I was deciding between UART, I2C and CAN. And ended up going with UART:
- Not difficult to implement
- Totally asynchronous (without multi-master)
- Available on pretty much every MCU
By sheer luck I managed to get the UART running stupid fast without errors, so that was just a fun extra.
Advantages the Infinity Ergodox has that makes it faster:
- Asynchronous
- Debounce before transmission
- DMA UART receive buffers