The CMRI protocol is even simpler - it only has 4 message types (it's a polled system rather than multi-master). I'm actually simplifying it even more - one of the commands is a setup which allows the remote boards to tell the master how many bits of input and how many bits of output they have. But I'm writing the code so that the master always sends a certain number of bytes, and the slaves always report the same number of bytes, even if there aren't that many physical IO pins. Say a board only has a pair of 23S17s hooked up for output. so 32 bits of output. Only the first 4 bytes sent will count, the others will simply be ignored, and ever node gets sent 8 bytes for output One thing that does, besides simplifying the program on the master side, is make the transfer time for every board equal. Always receives 64 bits, always sends 32 bits, or some number yet to be determined.
The servo drivers though are not part of the network, they connect to the node boards. They have pushbuttons and LEDs for local control, plus the lines for connection to the node boards for remote control. Thus the same servo driver board can work for mainline dispatcher controlled turnouts as well as purely manual ones like in a yard.
My reasoning behind going with phone connections for all of this stuff is that the current is very low, they are easy to connect together even in the dark recesses under the layout, they aren't going to be constantly plugged and unplugged (a major weakness of RJ connectors), and I have the proper crimp tool for anything from 4p2c up to 8p8c already since my DCC system already uses 6 conductor flat cable for its control bus.
The node boards ARE linked via RS485, no daisy chaining. The commercial board I linked does the same thing, as to the boards designed by the guy who originated the protocol and system. The vendor I linked provides an Arduino library for CMRI that is open source, so that is the basis for my code. I'm prototyping with Arduinos, but my real boards hard wire in an ATMega328p, instead of making a larger board that plugs in to an Arduino, or allows an Arduino to plug in, like the commercial one I linked. I considered other Atmel micros because I could use a smaller chip and make each servo driver just run a single servo, but as is usual with these things, the larger chip with enough pins to do everything for 2 servos is less than twice the cost. Making boards the drive 4 or more servos defeats my distributed architecture desire, where I'd end up having one monster board that would drive say 8 servos, and servo cabled going everywhere. 2 seemed like a good number, because that means one board for a crossover, or a passing siding.