I decided I won't let the Linux machine control the display directly, not yet. For a few reasons:
- To run code at 1000Hz, the kernel must be specially built with the relevant configuration enabled (
HZ=1000). This will make everything a bit harder to set up.
- It seems that running code at 1000Hz is a bit of a stretch for a non-realtime OS like Linux. I'm aware there are RT patches, but I don't want to over-complicate things especially since my Linux kernel development experience is still limited;
- Despite the RT patches, I'm still concerned that any jitter will have visible effects as lighter/dimmer rows.
- The i.MX7 processor I'll be using already has a Cortex M4 specifically made for real-time stuff. I might use that one.
Therefore, I'll let a separate MCU do the LED handling for now. I'll use an FRDM-KL25Z development board by Freescale:
I decided to use that instead of a traditional Arduino because I want to learn more about the ARM Cortex architecture, FreeRTOS, and other tools in "professional" embedded development.
The plan is to use this MCU as a "video card" that will directly control the row and column drivers. It will use one of its SPI peripherals as a master to control the column drivers, and the other as a SPI slave to get bitmap data from Linux. I'll then write a kernel driver that sends the right data to the MCU; maybe by also emulating a framebuffer device.