I've been thinking more about this. It is a pitty that using one UART per node makes more complex the flow control. By flow control I mean how a transmitter knows that the receiver to which it has sent some data has already processed it and is ready to accept more. I don't want to use extra wires in the cables to implement hardware flow control, because that means more connectors and less reliability. With two UARTs per node, I was thinking of using some kind of acknowledgement data to immediately signal the transmitter that the receiver is ready to accept more data. However, with one UART per node, the acknowledgement should travel around the entire ring, to reach the original transmitter, and that can be a hell of a protocol :-)
Some options that I see:
1) Not to implement flow control, and assume, from the point of view of each transmitter, that the corresponding receiver is infinitely fast. I'm a little bit worried, because the MCU needs to be cheap, and the amount of RAM will be very limited. 2) If 1) gives problems at peak times, I could insert forced wait times until problems disappear. 3) The system could start with zero wait times, and slowly and dynamically adjust them, in case problems are detected. For this, the UARTs need to signal that a new word has been received before having read the previous one, which I think is a standard feature. Sounds vague and complex, but might work, though maybe not efficiently enough.Any ideas?
Best,