SNLA474A October   2024  – October 2024 DS90UB971-Q1

 

  1.   1
  2.   Abstract
  3.   Trademarks
  4. Introduction
  5. Typical Test Standards Overview
    1. 2.1 ISO 10605 Standard
    2. 2.2 Performance Status Categorization
  6. FPD-Link Hardware Optimizations
    1. 3.1 Connector Grounding
    2. 3.2 PCB to Enclosure Grounding
    3. 3.3 MODE Selection
  7. FPD-Link Software Optimizations
    1. 4.1 LOCK Detection Tuning
    2. 4.2 Parity Error Handling
    3. 4.3 Forward Error Correction
      1. 4.3.1 FEC Test Capabilities
  8. Optimization Test Data
    1. 5.1 Baseline Hardware - No Software Optimization
    2. 5.2 Optimized Hardware - No Software Optimization
    3. 5.3 Optimized Hardware and Software
  9. Example Scripts for Software Optimization
  10. Additional System Level Software Options
  11. Summary
  12. References
  13. 10Revision History

Additional System Level Software Options

For Class A performance at the system level above 6-8kV levels, additional options can be implemented within the SoC/Processor which receives the video data. A common method to achieve Class A performance across higher ESD stress levels is to implement a frame buffering scheme which can discard frames with errors or partially received frames to prevent visual disruption. This method is especially effective for systems where human vision is used to judge the video quality owing to the fact that repeats of single frames are difficult to detect at frame rates of 30Hz or higher. This method does not need be used as a substitute for strong system design practices because low baseline system performance coupled with this method can result in visually perceptible delay.

Step 1

Configure the deserializer device to output an interrupt once the device detects errors in one of the RX ports. The following example assumes a quad channel deserializer is used with all 4 RX ports active.

board.WriteI2C(desAddr,0x23,0x8F) # Enable interrupts for all RX ports 

Step 2

Monitor the interrupt pin through the SoC. When the interrupt is triggered, check the interrupt source to identify the cause and generate a port-specific error flag for conditions which can cause corruption of the video path. Note that some errors like parity or ECC1 are excluded from monitoring since the errors do not directly affect the video.

ERR = [0, 0, 0, 0] # RX Port-specific error flags
INT_STS = board.ReadI2C(desAddr,0x24) # Check which RX port triggered the interrupt
if INT_STS & 0x01 != 0: # RX0 interrupt 
    board.WriteI2C(desAddr,0x4C,0x01) # Select RX0
    RX_PORT_STS1 = board.ReadI2C(desAddr,0x4D)
    RX_PORT_STS2 = board.ReadI2C(desAddr,0x4E)
    CSI_RX_STS = board.ReadI2C(desAddr,0x7A)
    if RX_PORT_STS1 & 0x10 != 0: # LOCK_STS_CHG
        ERR[0] = 1
    if RX_PORT_STS2 & 0xC1 != 0: # LINE_LEN_CHG, LINE_CNT_CHG
        ERR[0] = 1
    IF CSI_RX_STS & 0X0E != 0: # LENGTH_ERR, CKSUM_ERR, ECC2_ERR
        ERR[0] = 1
if INT_STS & 0x02 != 0: # RX1 interrupt 
    board.WriteI2C(desAddr,0x4C,0x12) # Select RX1
    RX_PORT_STS1 = board.ReadI2C(desAddr,0x4D)
    RX_PORT_STS2 = board.ReadI2C(desAddr,0x4E)
    CSI_RX_STS = board.ReadI2C(desAddr,0x7A)
    if RX_PORT_STS1 & 0x10 != 0: # LOCK_STS_CHG
        ERR[1] = 1
    if RX_PORT_STS2 & 0xC1 != 0: # LINE_LEN_CHG, LINE_CNT_CHG
        ERR[1] = 1
    IF CSI_RX_STS & 0X0E != 0: # LENGTH_ERR, CKSUM_ERR, ECC2_ERR
        ERR[1] = 1
if INT_STS & 0x04 != 0: # RX2 interrupt 
    board.WriteI2C(desAddr,0x4C,0x24) # Select RX2
    RX_PORT_STS1 = board.ReadI2C(desAddr,0x4D)
    RX_PORT_STS2 = board.ReadI2C(desAddr,0x4E)
    CSI_RX_STS = board.ReadI2C(desAddr,0x7A)
    if RX_PORT_STS1 & 0x10 != 0: # LOCK_STS_CHG
        ERR[2] = 1
    if RX_PORT_STS2 & 0xC1 != 0: # LINE_LEN_CHG, LINE_CNT_CHG
        ERR[2] = 1
    IF CSI_RX_STS & 0X0E != 0: # LENGTH_ERR, CKSUM_ERR, ECC2_ERR
        ERR[2] = 1
if INT_STS & 0x08 != 0: # RX3 interrupt 
    board.WriteI2C(desAddr,0x4C,0x38) # Select RX3
    RX_PORT_STS1 = board.ReadI2C(desAddr,0x4D)
    RX_PORT_STS2 = board.ReadI2C(desAddr,0x4E)
    CSI_RX_STS = board.ReadI2C(desAddr,0x7A)
    if RX_PORT_STS1 & 0x10 != 0: # LOCK_STS_CHG
        ERR[3] = 1
    if RX_PORT_STS2 & 0xC1 != 0: # LINE_LEN_CHG, LINE_CNT_CHG
        ERR[3] = 1
    IF CSI_RX_STS & 0X0E != 0: # LENGTH_ERR, CKSUM_ERR, ECC2_ERR
        ERR[3] = 1

Step 3

Based on the port-specific error flag, trigger the SoC to discard the current video frame for ports with errors and display the previous frame twice.

 Frame Discard and Repeat
                    Example Figure 7-1 Frame Discard and Repeat Example