I sort of don’t get the 4x I2C busses. I’m probably missing something obvious but it isn’t immediately apparent how the units all have addressing worked out.
I sort of don’t get the 4x I2C busses. I’m probably missing something obvious but it isn’t immediately apparent how the units all have addressing worked out.
The 4x I2C busses were mainly there to reduce parasitic capacitance and also allows me to know where each key is physically relative to each other in software. I’m still working on the firmware for it, but currently the plan is for each of the keys to remember its “parent”, the neighbor that is closest to the main board, and forward events repeatedly to the main board.
Off the top of my head, I think I would have considered a masterless node system like CAN here, there everyone would just post their press status on change and on cyclic… because if you have to relay I2C messages even at 400kbps, that seems like a latency build up at n keys down the line.
But, I haven’t really thought about it at all. I’ve only used I2C like twice ever!
It’s a keyboard you don’t need masterless. You would be fine with one master, as you have USB to work out anyhow, and none of your keys need to talk to each other.
You could look into single wire LIN. You might still need a transceiver. And you might want to use it with 12V but that isn’t necessary.
There is an interesting way you could do othangonal position detection. And while it’s much slower than I2C, there would be no relaying at every step. I bet it would be lower latency overall.