ZHCAEL1A October 2024 – October 2024 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 來丟棄發生錯誤的端口的當前視頻幀,并將前一幀顯示兩次。