isoSPI
Introduction
isoSPI is a proprietary Linear Technology protocol that uses Isolated Transceivers to provide robust galvanic isolation for various digital serial communication interfaces and devices. A transceiver is just a device that includes both a transmission and receiver in a single module, whose purpose is to transmit and receive data. Isolation barriers are implemented using either inexpensive Ethernet transformers, coupling capacitors or embedded inductors. The main benefit is very low EMI susceptibility and emissions, as well as high noise immunity, to preserve signal integrity.
Precision window comparators in the receiver detect the differential signals. The drive currents and the comparator thresholds are set by a simple external resistor divider, allowing the system to be optimized for required cable lengths and desired signal-to-noise performance.
Architecture
There are transceivers that take 4-wire SPI and translate them into pulses
Maximum Clock Speed | 1 MHz (see p.12 in LTC6820 datasheet) |
---|---|
Synchronous/Asynchronous | Synchronous |
Lines | 2 (twisted pair) |
Number of Slaves | Limited by the number of transceivers |
Communication Direction | Bidirectional (Full-Duplex) |
Signalling | Differential between isoSPI positive and negative |
Maximum Cable Length | 100 m (according to LTC6820 datasheet) |
Note that as your cable length increases, your data rate is also going to decrease.
Scope Captures
Being able to decode scope captures are pretty useful when debugging. Linear Technology has an isoSPI Analyzer board (LTC DC1907A) which automatically converts the isoSPI signal into 4-wire SPI for use with the LTC6804, but we can do the same thing manually using an oscilloscope.
Scope Settings
Probe between | isoSPI positive and negative |
---|---|
Mode | Math |
Logical Signals
(Taken from Table 1 in the LTC6820 datasheet)
Pulse Type | First Level | Second Level | Ending Level |
---|---|---|---|
Long +1 | +Va (150ns) | -Va (150ns) | 0V |
Long -1 | -Va (150ns) | +Va (150ns) | 0V |
Short +1 | +Va (50ns) | -Va (50ns) | 0V |
Short -1 | -Va (50ns) | +Va (50ns) | 0V |
(Taken from Table 2 in the LTC6820 datasheet)
SPI Master Event | Transmitted Pulse |
---|---|
CS Rising | Long +1 |
CS Falling | Long –1 |
SCK Latching Edge, MOSI = 1 | Short +1 |
SCK Latching Edge, MOSI = 0 | Short –1 |
(Taken from Table 3 in the LTC6820 datasheet)
Received Pulse | SPI Port Action | Return Pulse |
---|---|---|
Long +1 | Drive CS high | None |
Long -1 | Drive CS low | Short -1 pulse if MISO = 0 No return pulse if MISO = 1 |
Short +1 |
| |
Short -1 |
|
Example 1: Logical High (0xFF)
Here's a scope capture with logical high being sent by the SPI master.
Example 2: Odd Alternating Bits (0xAA)
Here's a scope capture with odd alternating bits being sent by the SPI master.
Example 3: Even Alternating Bits (0x55)
Here's a scope capture with even alternating bits being sent by the SPI master.
Gotchas
When debugging the LTC6804 and the LTC2484 for MSXII, we ran into a few issues. Here are a couple things to watch out for:
- Check that the SPI mode your transciever is configured for matches the SPI mode of the IC
- Ensure that you are connecting the isoSPI positive on the master to positive on the slave, and isoSPI negative on the master goes to negative on the slave
- We had an issue where the bias resistor and the comparator pins were flipped
- The team spent a lot of time debugging this (Karl brought up the LTC6804-1 validating against 4-wire SPI in Spring 2017, Danyon spent a lot of Fall 2017 debugging issues with isoSPI, and then we found the issue in Winter 2018 around midterms)
- This was discovered by verifying that our driver worked over 4 wire SPI, and then moving everything over to isoSPI (and then noticing that things weren't working)
- Using the oscilloscope setup described above, we noticed that the signals were not what we expected