ZHCAEL1B October   2024  – October 2025 DS90UB971-Q1

 

  1.   1
  2.   摘要
  3.   商标
  4. 引言
  5. 典型测试标准概述
    1. 2.1 ISO 10605 标准
    2. 2.2 性能状态分类
  6. FPD-Link 硬件优化
    1. 3.1 连接器接地
    2. 3.2 PCB 至外壳接地
    3. 3.3 模式选择
  7. FPD-Link 软件优化
    1. 4.1 锁定检测调优
    2. 4.2 奇偶校验错误处理
    3. 4.3 正向纠错
      1. 4.3.1 FEC 测试功能
  8. 优化测试数据
    1. 5.1 基线硬件 - 无软件优化
    2. 5.2 优化的硬件 - 无软件优化
    3. 5.3 优化的硬件和软件
  9. 软件优化脚本示例
  10. 其他系统级软件选项
  11. 总结
  12. 参考资料
  13. 10修订历史记录

其他系统级软件选项

为了在系统级别实现超过 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 来丢弃发生错误的端口的当前视频帧,并将前一帧显示两次。

 帧丢弃和重复示例图 7-1 帧丢弃和重复示例