What is SpaceFN and why you should give it a try
The SpaceFN concept - setting up your space key as a layer switch when held - is probably one of the most useful tweaks in the keyboard hobby. Let me explain how it works. My SpaceFN article on kbd.news made some rounds recently - quite surprisingly given the age of this concept. This piece you're reading is a condensed version of the full post. If you're left with unanswered questions, you'll most likely find the info you're looking for in the original write-up. On my imaginary top list of the most useful keyboard features, tweaks and hacks, SpaceFN would deserve a podium finish for sure. But what makes it so special? In short: SpaceFN is easy to implement, easy to learn, costs nothing, can be used with any keyboard, and can improve your productivity instantly. I will list its benefits below, but can state right at this point that the SpaceFN concept, setting up your space key as a layer switch when held, is clearly one of the most useful tweaks in the keyboard hobby....
Apr 30, 2024
Jacob: Instead of just having 1 controller, there is now 1 controller in each Ergodox half.
Jacob: This way each Ergodox “node” can do it’s own key detection and debouncing.
Jacob: Then, when the Ergodox node knows a key has been pressed or released, it sends it to the USB connected node.
Jacob: No more polling (constantly asking for updates). The Infinity Ergodox only sends keypress data if it needs to.
Jacob: For those familiar with internet modems of ages past, the new interconnect is running at 4.5 megabaud.
Jacob: I’ve literally clocked it as fast as I can without overclocking the keyboard controllers. (Under the hood I have error checking and have yet to see any errors)
Jacob: The speed isn’t important for how much data is being sent. It’s important for reducing the latency to the point that the keypress will reach the USB buffer faster than the 1000 Hz that your computer polls the keyboard to see if there are any new keypresses.
Jacob: It’s also possible to send other types of signals through the interconnect, such as changing the LCD backlight.
Andy: So the new ergodox has no perceivable latency it sounds like Which is excellent
Jacob: I’ve tried to make it lag, haven’t been able to 😛
Andy: That’s what I want to hear"
https://www.keychatter.com/2015/09/30/interview-part-3-of-3-jacob-alexander-haata-talks-about-future-input-club-plans-ergodox-infinity-development-and-more/
The interconnect bus is a UART with dedicated Rx/Tx. This means it supports asynchronous interrupts for keypresses (with this, it's already faster than the I2C of the older ergodox even if it was clocked slower). But, I decided to see how far I could push this bus...
Turns out that I was able to set the bus to max speed (though I haven't tried overclocking this MCU, which has been reported to go all the way up to 168 MHz stable, currently running at the stock 72 MHz). I was able to reliably set (haven't seen any errors) to 4.5 megabaud! To put into perspective, a typical serial port runs at 115200 baud, which is effectively 11520 bytes/second. This means that the effective data rate is around 450 kB/sec. Now, that really doesn't sound that impressive in the age of 10G (~1.25 GB/s) USB 3.1. But, there's a fundamental difference here.
UARTs clock each bit, meaning theoretically you can have an interrupt at each pulse. But let's give some overhead and say we have a poll rate of 4 bytes (this is the smallest command size for a single keypress). And that it takes ~10 symbols to transmit a byte. Then with a little bit of math: 4 500 000 baud / (4 bytes * 10 symbols) = 112 500 Hz (112.5 kHz assuming an impossibly saturated bus) or 1 interrupt every 0.000 0088 seconds (88 us).
If we just want to compare the start point (just like how 1000 Hz USB does it). Then I guess a marketing comparison would be: USB 2.0 - 1000 Hz Infinity Ergodox Interconnect - 4 500 000 Hz
And this ladies and gentleman, is how split keyboards can be used for gaming :D