ZHCAEL1B October 2024 – October 2025 DS90UB971-Q1
为了在系统级别实现超过 6kV 至 8kV 的 A 类性能,可以在用于接收视频数据的 SoC/处理器内实施额外的选项。在更高 ESD 应力水平下实现 A 类性能的一种常见方法是实现帧缓冲方案,该方案可以丢弃有错误的帧或接收不完全的帧,从而防止视觉干扰。对于依赖人眼判断视频质量的系统而言,这种方法尤其有效,因为在 30Hz 或更高的帧率下,重复的单帧很难被察觉。此方法不需要用作强大系统设计实践的替代方法,因为低基线系统性能与此方法相结合时,可能会导致明显的视觉延迟。
步骤 1
配置解串器器件,使其在检测到其中一个 RX 端口发生错误时输出中断。以下示例假设使用的是四通道解串器,并且所有 4 个 RX 端口均处于活动状态。
board.WriteI2C(desAddr,0x23,0x8F) # Enable interrupts for all RX ports
步骤 2
通过 SoC 监测中断引脚。当中断触发时,检查中断源以确定原因,并针对可能导致视频路径损坏的情况生成特定于端口的错误标志。请注意,一些错误不会直接影响视频质量,例如奇偶校验或 ECC1,因此它们不受监控。
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
步骤 3
根据特定于端口的错误标志,触发 SoC 来丢弃发生错误的端口的当前视频帧,并将前一帧显示两次。