diff --git a/README.md b/README.md index 36f1510..6018633 100644 --- a/README.md +++ b/README.md @@ -13,4 +13,5 @@ This repository specifies the control protocol implemented by [gex-core](https:/ - [UNIT_DO.md](UNIT_DO.md) - Digital Output - [UNIT_DI.md](UNIT_DI.md) - Digital Input - [UNIT_NEOPIXEL.md](UNIT_NEOPIXEL.md) - NeoPixel driver +- [UNIT_SIPO.md](UNIT_SIPO.md) - Multi-cast Shift Register Driver diff --git a/UNIT_SIPO.md b/UNIT_SIPO.md new file mode 100644 index 0000000..fa8e835 --- /dev/null +++ b/UNIT_SIPO.md @@ -0,0 +1,52 @@ +# SIPO - Multi-cast Shift Register Driver + +*SIPO stands for Serial Input Parallel Output* + +- Used for building user interfaces (LED displays etc.) +- Designed for driving 74xx595 or 74xx4094 +- Can drive multiple data lines in parallel +- Offers direct pin access without sending data (no clock pulse) +- Supports data latch on Store pulse (see the WRITE command for details) +- Pin polarities are configurable in the unit settings. + +The `DIRECT_*` commands are mostly meant for debugging purposes when trying to communicate with an unfamiliar SIPO-based board. + +## Commands + +### WRITE (0x00) + +Sends data to the shift registers. + +After each byte, the *Shift* pin is pulsed. After the last byte and the *Shift* pulse, the *Latch* data is output followed by the *Store* pin pulse. + +The *Latch* data is normally 0 and doesn't matter; however, it's possible to design +external circuitry that latches the data pins on the *Store* pulse, e.g. for brightness +control or extra LEDs. + +*Request:* +- u16 - latch data to output before the Store pulse - all outputs, packed +- (u8 array) x num_outputs + - must be a multiple of the outputs count (if 1, simply the output data) + +### DIRECT_DATA (0x01) + +Direct write to the data pins, without any pulse. + +*Request:* +- u16 - data to output, packed + +### DIRECT_CLEAR (0x02) + +Pulse the *Clear* output. + +### DIRECT_SHIFT (0x03) + +Pulse the *Shift* output. + +### DIRECT_STORE (0x04) + +Pulse the *Store* output. + +## Events + +*No events defined for this unit type.*