LVDS Tunneling Protocol and Interface (LTPI) IP User Guide: Agilex™ 3 and Agilex™ 5 FPGAs and SoCs
6.2. I2C Channel
The main use case is shown in the following figure, where the BMC on SCM controls the I2C/SMBus links with the target devices on HPM.
I2C/SMBus SCL and SDA signals are bidirectional and can be driven by either the controller or target devices during transactions. Therefore, they cannot be tunneled directly through LTPI like GPIO or UART signals. Instead, LTPI uses an event-based model for I2C/SMBus channels. Events and states are captured on one side and recovered on the other. When the controller generates an event (like a START condition), the local SCL line is held until the remote event is received and processed. Once processed, the SCL line is released. The I2C/SMBus relays in the LTPI manage the states of the SCL and SDA signals.
To handle LTPI latency and turnaround time, the clock stretching method from the I2C/SMBus specification is used. Refer to the following figure for the state transition that follows the behavior and event exchange flows between the controller and the target.
The received events do not need to be confirmed with an echo message, except for the data received events. An echo is sent for these events to differentiate between subsequent incoming data events within a byte transmission. For example:
- New data event is started by one end and is sent continuously on LTPI.
- When a data bit is received by the other end, it starts sending data echo continuously to confirm the reception of the data event.
- When a data bit is regenerated on the physical bus, a data received event starts sending continuously to confirm regeneration. The other end is still sending data event, which should be ignored until the data received event echo is received as a differentiator between the subsequent data events.
- When the data received event is received by the other end, the data received echo is transmitted continuously until a new data event is generated.
The I2C/SMBus events are defined with binary encoding in the following table. By using 4-bit encoding, an 8-bit LTPI frame field can accommodate two I2C/SMBus interfaces.
Bus Event | Direction | Description | Encoding Event [4b] |
---|---|---|---|
Idle | Bidirectional | I2C/SMBus LTPI relay is in idle state. | 0b0000 |
Start | Controller to target | Start Event detected on Controller side. | 0b0001 |
Start Received | Target to controller | Start event recovered on the target side. | 0b0010 |
Stop | Controller to target | Stop Event detected on Controller side. | 0b0011 |
Stop Received | Target to controller | Stop event recovered on the target side. | 0b0100 |
Data Received | Bidirectional | SDA bit value recovered on remote side. | 0b0101 |
Data 0 | Bidirectional | Send SDA bit value 0. | 0b0110 |
Data 1 | Bidirectional | Send SDA bit value 1. | 0b0111 |
Start Echo | Target to controller | Event used to indicate that the start event is correctly received by the target side. If the echo is not received within expected time, i.e., frame turnaround time (typically 1–2 LTPI frames), the event can be repeated immediately without waiting for the start event timeout. | 0b1000 |
Stop Echo | Controller to target | Optional stop event correctly received by target side. If the echo is not received within expected time, i.e., frame turnaround time (typically 1–2 LTPI frames), the event can be repeated immediately without waiting for the start event timeout. | 0b1001 |
Data 0 Echo | Bidirectional | Send SDA bit value 0 received correctly. If the echo is not received within expected time, i.e., frame turnaround time (typically 1–2 LTPI frames), the event can be repeated immediately without waiting for the start event timeout. | 0b1010 |
Data 1 Echo | Bidirectional | Send SDA bit value 1 received correctly. If the echo is not received within expected time, i.e., frame turnaround time (typically 1–2 LTPI frames), the event can be repeated immediately without waiting for the start event timeout. | 0b1011 |
Data Received Echo | Bidirectional | Event used to indicate that the data received event was correctly received. It is used to differentiate between consecutive data 0/1 events during byte transmission. | 0b1100 |
Reserved | Reserved | Reserved for future use. | 0b1101–0b1111 |