ZHCSLX3C June 2017 – September 2020 FPC402
PRODUCTION DATA
The FPC402 has three general-purpose inputs per port which can be used to monitor the low-speed outputs from the module. The host controller can monitor the status of these signals for each port by reading the appropriate registers in the FPC402. In addition, the FPC402 can be configured to generate an interrupt to the host through the HOST_INT_N signal whenever one or more of the low-speed input signals change state. The interrupt can be configured to trigger on the falling edge, the rising edge, or both the falling and rising edges. A single register stores flags for which inputs and edges are responsible for the trigger.
The recommended signal connection is as follows. IN_A, IN_B, and IN_C are not restricted to this port pin assignment, and in fact they can be used to monitor the status of any low-speed 3.3-V signal required for the application.
PIN NAME | EXAMPLE CONNECTION | COMMENT | |
---|---|---|---|
SFP | QSFP | ||
IN_A | Tx_Fault | IntL | |
IN_B | Mod_ABS | ModPrsL | |
IN_C | Rx_LOS | — | This pin is unused in QSFP applications, or it can be utilized as a general-purpose input. |
The events which trigger an active-low interrupt on the HOST_INT_N pin are user-configurable. The HOST_INT_N pins from multiple FPC402 devices can be connected together in a wired-or fashion. Interrupt generation can be configured as follows:
INTERRUPT-TRIGGERING EVENT | PIN(S) MONITORED | EXAMPLE APPLICATION(1) |
---|---|---|
Rising edge | IN_A | Indicates deassertion of port-side interrupt (Tx_Fault or IntL). |
IN_B | Indicates that a module has been removed. | |
IN_C | Indicates loss of optical signal (Rx_LOS) for SFP applications. | |
IN_A, IN_B, or IN_C | Indicates deassertion of port-side interrupt, removal of module, or loss of optical signal (Rx_LOS). | |
Falling edge | IN_A | Indicates assertion of port-side interrupt (Tx_Fault or IntL). |
IN_B | Indicates that a module has been inserted. | |
IN_C | Indicates presence of optical signal (Rx_LOS) for SFP applications. | |
IN_A, IN_B, or IN_C | Indicates assertion of port-side interrupt, insertion of module, or presence of optical signal (Rx_LOS). | |
Rising or falling edge | IN_A | Indicates assertion or deassertion of port-side interrupt (Tx_Fault or IntL). |
IN_B | Indicates that a module has been inserted/removed. | |
IN_C | Indicates presence or absence of optical signal (Rx_LOS) for SFP applications. | |
IN_A, IN_B, or IN_C | Indicates assertion or deassertion of port-side interrupt, the insertion or removal of module, or the presence or absence of optical signal (Rx_LOS). |
The FPC402 is also able to generate an interrupt based on prefetched data. This is known as a data-driven interrupt. The FPC402 monitors up to four bytes within the prefetched range for each port. For each of the bytes, the register offset address is programmed to a local FPC402 register as well as the enable bit fields which will trigger the interrupt. When one of the enabled bits of the four monitored bytes changes state from a 0 to a 1 and stays a 1 for two consecutive periodic prefetch cycles (0→1→1), the interrupt is generated and the periodic prefetch operation is halted. The FPC402 has four port-specific registers which contain the sampled data from the bytes being monitored after the interrupt is triggered. To clear the interrupt, the sampled data register of the trigger source byte is read. The periodic prefetch must be restarted after the interrupt is cleared with an I2C command. Because it takes two periodic prefetch cycles to trigger this interrupt, it may take up to 10 ms for the host to see the trigger after the monitored bit field of the downstream module changes for the fastest periodic prefetch setting.
The FPC402 also has the ability to generate an interrupt if there is a mishap in the downstream I2C bus. The SDA bus and the SCL bus each have timers that will trigger an interrupt if they are held in a low state too long due to excessive clock stretching or a port error. Once the interrupt is triggered, it is cleared by issuing a port reset on the relevant port. These interrupts are known as SCL Stuck and SDA Stuck interrupts and can be configured individually for each port. By default, the SCL Stuck interrupt will trigger after the SCL bus is held low for 35 ms (typical). This value is configurable individually by port. The SDA Stuck interrupt will trigger after the SDA is held low for 1 s (typical). The user may issue a port reset sequence (9 consecutive SCL clock cycles with the last being an I2C stop condition) or module reset to restore the module to a known state.
When a host-side interrupt is triggered, the host must determine the source and cause of the interrupt. The recommended procedure for identifying the source and cause of an interrupt is as follows:
This procedure applies to every FPC402 device which is wire-or’ed to the host-side interrupt signal. The total time required for the host to identify the source and cause of the interrupt for an implementation consisting of N total FPC402s, where all N HOST_INT_N outputs are wire-or’ed together, is as follows:
Tinterrupt = Delay between the IN_* pin changing state and the corresponding FPC402 device triggering an interrupt (50 µs maximum).
Tread = Time required to read a single register from N FPC402 devices.
For I2C mode, Tread = (9 × 4 × N)/FI2C, where FI2C is the SCL clock frequency.
For SPI mode, Tread = (29 × 2 × N)/FSPI + TOFF-SSN, where FSPI is the SCK clock frequency, and TOFF-SSN is the SS_N off time.
Ttotal = Tinterrupt + 4 × Tread
Table 8-4 gives some examples of Ttotal for different I2C/SPI frequencies and different values of N.
MODE | FI2C | FSPI | N | Tread (ms) | Ttotal (ms) |
---|---|---|---|---|---|
I2C | 100 kHz | – | 1 | 0.36 | 1.5 |
I2C | 100 kHz | – | 4 | 1.44 | 5.8 |
I2C | 100 kHz | – | 8 | 2.88 | 11.6 |
I2C | 100 kHz | – | 12 | 4.32 | 17.3 |
I2C | 400 kHz | – | 1 | 0.09 | 0.4 |
I2C | 400 kHz | – | 4 | 0.36 | 1.5 |
I2C | 400 kHz | – | 8 | 0.72 | 2.9 |
I2C | 400 kHz | – | 12 | 1.08 | 4.4 |
I2C | 1000 kHz | – | 1 | 0.0036 | 0.1 |
I2C | 1000 kHz | – | 4 | 0.144 | 0.6 |
I2C | 1000 kHz | – | 8 | 0.288 | 1.2 |
I2C | 1000 kHz | – | 12 | 0.432 | 1.8 |
SPI | – | 1 MHz | 1 | 0.06 | 0.3 |
SPI | – | 1 MHz | 4 | 0.23 | 1.0 |
SPI | – | 1 MHz | 8 | 0.47 | 1.9 |
SPI | – | 1 MHz | 12 | 0.70 | 2.8 |
SPI | – | 10 MHz | 1 | 0.01 | 0.1 |
SPI | – | 10 MHz | 4 | 0.02 | 0.1 |
SPI | – | 10 MHz | 8 | 0.05 | 0.2 |
SPI | – | 10 MHz | 12 | 0.07 | 0.3 |
Click here to request access to the FPC401 Programmer's Guide (SNLU221) for more details on how to configure the interrupts.