This is mainly just a reminder to me of what the bus protocol looks like, in the event I need to do maintenance again. However, others might find it useful for building compatible devices.
The bus is serial, 9600 baud, 8 data bits, 1 stop bit, no parity. Data travels in packets of ten bytes. Typically, I have the master send out one packet every scale second, as the reception of a successful packet is what causes the colon on the slaves to blink. Also note that the four character positions are transmitted not as ASCII or literal segments, but as an index into the font table that each clock carries. This font table is listed at the bottom of the document.
Packet Description
| Byte | Description |
| Byte 0 | Start byte, always 0xFF. 0xFF is not allowed as a value in any other byte |
| Byte 1 | Tens of hours character, index into font table (see below) |
| Byte 2 | Ones of hours character, index into font table (see below) |
| Byte 3 | Tens of minutes character, index into font table (see below) |
| Byte 4 | Ones of minutes character, index into font table (see below) |
| Byte 5 | Reserved for future use - value undefined |
| Byte 6 | Reserved for future use - value undefined |
| Byte 7 | Flags bits 0x80 = 24-hour time mode 0x40 = PM indicator on |
| Byte 8 | Reserved for future use - value undefined |
| Byte 9 | Simple checksum - sum of bytes 1-8 |
Font Table
| Index | Character | Segments |
| 0 | 0 | 11111100b |
| 1 | 1 | 00001100b |
| 2 | 2 | 10110110b |
| 3 | 3 | 10011110b |
| 4 | 4 | 01001110b |
| 5 | 5 | 11011010b |
| 6 | 6 | 11111010b |
| 7 | 7 | 10001100b |
| 8 | 8 | 11111110b |
| 9 | 9 | 11001110b |
| 10 | (blank) | 00000000b |
| 11 | c | 00110010b |
| 12 | h | 01101010b |
| 13 | n | 00101010b |
| 14 | F | 11100010b |
| 15 | A | 11101110b |
| 16 | V | 01111100b |
| 17 | E | 11110010b |
| 18 | t | 01110010b |
| 19 | r | 00100010b |
| 20 | - | 00000010b |
| 21 | o | 00111010b |
| 22 | d | 00111110b |