Group assignment¶
Here’s the link to the group assignment
While many network protocols exist, we narrowed down to the most supported in most modern chips like the Xiao format. These chips have dedicated pins for such protocols and existing libraries are well supported for all. The most common wired are these:
| Feature | UART | **I2C ** | SPI |
|---|---|---|---|
| Full Name | Universal Asynchronous Receiver/Transmitter | Inter-Integrated Circuit | Serial Peripheral Interface |
| Type | Asynchronous | Synchronous | Synchronous |
| Max Speed | Slow (typically <1 Mbps) | Medium (100 kbps - 3.4 Mbps) | Fast (10 Mbps+) |
| Wiring | 2 wires (TX, RX) | 2 wires (SDA, SCL) | 4 wires (MOSI, MISO, SCK, SS) |
| Topology | Point-to-Point (1-to-1) | Multi-node (Addressable) | Multi-node (via Select lines) |
| Complexity | Very Low | Moderate | Moderate/High |
| Distance | Short (can be extended) | Very Short (Bus capacitance) | Short |
Initially we thought about using I2C as it is very popular, but this kind of bus requires pull up resistors which we didn’t have at hand, so we went for UART which doesn’t require them.
Whatever you send on the serial is up for the receiver to interpret.
Interestingly enough, I found out that there’s a technique to create a Asynchronous Serial Bus: basically you have one master controller and all other are slaves.
The master’s TX connects to all RX in the the slaves, and the RX connects to all TX in the slaves.
So, basically all slaves receive all messages, and the content the message should include some form of addressing so they don’t all execute the command (unless it’s intended).
Care must be had because this does not prevent multiple slaves trying to talk at the same time to the master.
