A lot has changed
In the time since my last devlog, I have redesigned every single PCB and upended the entire project topology. So nothing that out of the ordinary
CAN Bus
Previously I was planning on using SPI as the primary data transfer method between the controller and the modules. However, after doing some math, that wouldn’t work at like above 100khz because reasons. So, now i’m switching over to a protocol that’s actually designed for being a Bus. There is a PIO library that supports CAN with an external transceiver for everything but bootloading, so I still need to keep the SWD lines around.
Infinite expandability
Because CAN doesn’t need interrupt or CS pins, this allows for you to add as many modules as you want. All you’ll need to do is plug in more backplanes!
Removed features
The only feature I removed is POE. The power module connector has all the pins required to make it available, but I decided that it isn’t worth the space or time for this first prototype
Well, I do actually still need CS pins
I lied earlier. While it is true that CAN Bus does not need CS pins, the design still needs them. This is because SWD is not a bus protocol, and so needs multiplexing for true control. While SWD does have a multi-device mode, the RP2040 and 2350 uses it to control each core, meaning it won’t work with more than 1 device connected at once. However, this is still a good thing, because the SWD CS lines can be much slower than SPI CS (for my application). This means that I can use GPIO expanders for these lines, and even use them for other module insert detection and module identification.
Funding update
I got rejected because I didn’t include a BOM, now I’ve resubmitted with a full BOM. Hopefuly I’ll get approved soon!
Oops, I went to get a rendering of a PCB and I realized a part was backwards. Here is the fixed PCB