user4478: I'm trying to interface with version RM08S of this rotary encoder using an Arduino Mega. The sensor supports a "Synchro serial interface (SSI), single ended" interface. I'm unfamiliar with this protocol.
Despite the name, it doesn't appear to match the description of the formal SSI or RS-422 specification, since that requires two wires for differential clock and data lines, whereas this sensor only has a single wire for each. This makes it sound more like IIC, but without the bus-like functionality.
Googling finds very few results on interfacing the Arduino to SSI devices, much less any standard libraries. This forum thread asks a similar question, but doesn't seem to resolve the issue.
Since there's just a clock and data line, would reading from this be as simple as toggling clock, and then reading the 10-bits of data from the data line, sequentially with each clock tick, accounting for whatever bits are used to pad the packet?

user4143: It's just SPI.
SPI.begin();
SPI.setDataMode(SPI_MODE2);

// ...

uint8_t h = SPI.transfer(0x00);
uint8_t l = SPI.transfer(0x00);
delayMicroseconds(20); // Indicate EOT
uint16_t v = (h << 8) | l;
v >>= 4; // for 12 bit resolution, 5 for 11 bit, 6 for 10 bit etc.

For 8 bit resolution or less you only need one SPI.transfer, and subtract 8 from the right-shift amount.
Wiring is simple: clock to SCK (52 or ICSP 3) and data to MISO (50 or ICSP 1).
The timing diagrams in the datasheet (page 5) describe it all in detail.

4478: <p>I'm trying to interface with version RM08S of <a href="https://www.rls.si/eng/rm08-super-small-non-contact-rotary-encoder" rel="nofollow noreferrer">this rotary encoder</a> using an Arduino Mega. The sensor supports a "Synchro serial interface (SSI), single ended" interface. I'm unfamiliar with this protocol.</p>

<p>Despite the name, it doesn't appear to match the description of the formal <a href="https://en.wikipedia.org/wiki/Synchronous_Serial_Interface" rel="nofollow noreferrer">SSI or RS-422 specification</a>, since that requires two wires for differential clock and data lines, whereas this sensor only has a single wire for each. This makes it sound more like IIC, but without the bus-like functionality.</p>

<p>Googling finds very few results on interfacing the Arduino to SSI devices, much less any standard libraries. <a href="https://forum.arduino.cc/index.php?topic=232369.0" rel="nofollow noreferrer">This forum thread</a> asks a similar question, but doesn't seem to resolve the issue.</p>

<p>Since there's just a clock and data line, would reading from this be as simple as toggling clock, and then reading the 10-bits of data from the data line, sequentially with each clock tick, accounting for whatever bits are used to pad the packet?</p>
 4143: <p>It's just SPI.</p>

<pre><code>SPI.begin();
SPI.setDataMode(SPI_MODE2);

// ...

uint8_t h = SPI.transfer(0x00);
uint8_t l = SPI.transfer(0x00);
delayMicroseconds(20); // Indicate EOT
uint16_t v = (h &lt;&lt; 8) | l;
v &gt;&gt;= 4; // for 12 bit resolution, 5 for 11 bit, 6 for 10 bit etc.
</code></pre>

<p>For 8 bit resolution or less you only need one SPI.transfer, and subtract 8 from the right-shift amount.</p>

<p>Wiring is simple: clock to SCK (52 or ICSP 3) and data to MISO (50 or ICSP 1).</p>

<p>The timing diagrams in <a href="https://www.rls.si/en/fileuploader/download/download/?d=0&amp;file=custom%2Fupload%2FRM08D01_11.pdf" rel="nofollow noreferrer">the datasheet</a> (page 5) describe it all in detail.</p>
