ZHCSUH8B December 2017 – January 2024 FPC202
PRODUCTION DATA
The FPC202 has six 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 FPC202. In addition, the FPC202 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. S0_IN_A, S0_IN_B, S0_IN_C, S1_IN_A, S1_IN_B, and S1_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 | ||
S0_IN_A | Tx_Fault | IntL | |
S0_IN_B | Mod_ABS | ModPrsL | |
S0_IN_C | Rx_LOS | — | This pin is unused in QSFP applications, or it can be utilized as a general-purpose input. |
S1_IN_A | General-purpose input, available for any purpose | ||
S1_IN_B | General-purpose input, available for any purpose | ||
S1_IN_C | General-purpose input, available for any purpose |
The events which trigger an active-low interrupt on the HOST_INT_N pin are user-configurable. Multiple FPC202s’ HOST_INT_N pins 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 | S0_IN_A | Indicates de-assertion of port-side interrupt (Tx_Fault or IntL). |
S0_IN_B | Indicates that a module has been removed. | |
S0_IN_C | Indicates loss of optical signal (Rx_LOS) for SFP applications. | |
S0_IN_A, S0_IN_B, or S0_IN_C | Indicates de-assertion of port-side interrupt, removal of module, or loss of optical signal (Rx_LOS). | |
S1_IN_A | Indicates rising edge on S1_IN_A | |
S1_IN_B | Indicates rising edge on S1_IN_B | |
S1_IN_C | Indicates rising edge on S1_IN_C | |
S1_IN_A, S1_IN_B, or S1_IN_C | Indicates rising edge on S1_IN_A, S1_IN_B, or S1_IN_C | |
Falling edge | S0_IN_A | Indicates assertion of port-side interrupt (Tx_Fault or IntL). |
S0_IN_B | Indicates that a module has been inserted. | |
S0_IN_C | Indicates presence of optical signal (Rx_LOS) for SFP applications. | |
S0_IN_A, S0_IN_B, or S0_IN_C | Indicates assertion of port-side interrupt, insertion of module, or presence of optical signal (Rx_LOS). | |
S1_IN_A | Indicates falling edge on S1_IN_A | |
S1_IN_B | Indicates falling edge on S1_IN_B | |
S1_IN_C | Indicates falling edge on S1_IN_C | |
S1_IN_A, S1_IN_B, or S1_IN_C | Indicates falling edge on S1_IN_A, S1_IN_B, or S1_IN_C | |
Rising or falling edge | S0_IN_A | Indicates assertion/de-assertion of port-side interrupt (Tx_Fault or IntL). |
S0_IN_B | Indicates that a module has been inserted/removed. | |
S0_IN_C | Indicates presence/absence of optical signal (Rx_LOS) for SFP applications. | |
S0_IN_A, S0_IN_B, or S0_IN_C | Indicates assertion/de-assertion of port-side interrupt, insertion/removal of module, or presence/absence of optical signal (Rx_LOS). | |
S1_IN_A | Indicates rising/falling edge on S1_IN_A | |
S1_IN_B | Indicates rising/falling edge on S1_IN_B | |
S1_IN_C | Indicates rising/falling edge on S1_IN_C | |
S1_IN_A, S1_IN_B, or S1_IN_C | Indicates rising/falling edge on S1_IN_A, S1_IN_B, or S1_IN_C |
The FPC202 is also able to generate an interrupt based on pre-fetched data. This is known as a data-driven interrupt. The FPC202 monitors up to four bytes within the pre-fetched range for each port. For each of the bytes, the register offset address is programmed to a local FPC202 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 pre-fetch cycles (0→1→1), the interrupt is generated and the periodic pre-fetch operation is halted. The FPC202 has four registers per port, which contain the sampled data from the bytes being monitored after the interrupt is triggered. To clear the interrupt, the trigger source byte's sampled data register is read. The periodic pre-fetch must be restarted after the interrupt is cleared with an I2C command. Because it takes two periodic pre-fetch cycles to trigger this interrupt, it may take up to 10 ms for the host to see the trigger after the downstream module's monitored bit field changes for the fastest periodic pre-fetch setting.
The FPC202 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 FPC202 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 FPC202’s, 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 FPC202 device triggering an interrupt (50 µs max).
Tread = Time required to read a single register from N FPC202 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 7-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 |
Request access to the FPC202 Programmer's Guide (SNLU229) here for more details on how to configure the interrupts.