ZHCAEL1B October 2024 – October 2025 DS90UB971-Q1
為了在系統(tǒng)級別實現(xiàn)超過 6kV 至 8kV 的 A 類性能,可以在用于接收視頻數(shù)據(jù)的 SoC/處理器內(nèi)實施額外的選項。在更高 ESD 應(yīng)力水平下實現(xiàn) A 類性能的一種常見方法是實現(xiàn)幀緩沖方案,該方案可以丟棄有錯誤的幀或接收不完全的幀,從而防止視覺干擾。對于依賴人眼判斷視頻質(zhì)量的系統(tǒng)而言,這種方法尤其有效,因為在 30Hz 或更高的幀率下,重復(fù)的單幀很難被察覺。此方法不需要用作強大系統(tǒng)設(shè)計實踐的替代方法,因為低基線系統(tǒng)性能與此方法相結(jié)合時,可能會導(dǎo)致明顯的視覺延遲。
步驟 1
配置解串器器件,使其在檢測到其中一個 RX 端口發(fā)生錯誤時輸出中斷。以下示例假設(shè)使用的是四通道解串器,并且所有 4 個 RX 端口均處于活動狀態(tài)。
board.WriteI2C(desAddr,0x23,0x8F) # Enable interrupts for all RX ports
步驟 2
通過 SoC 監(jiān)測中斷引腳。當(dāng)中斷觸發(fā)時,檢查中斷源以確定原因,并針對可能導(dǎo)致視頻路徑損壞的情況生成特定于端口的錯誤標志。請注意,一些錯誤不會直接影響視頻質(zhì)量,例如奇偶校驗或 ECC1,因此它們不受監(jiān)控。
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
根據(jù)特定于端口的錯誤標志,觸發(fā) SoC 來丟棄發(fā)生錯誤的端口的當(dāng)前視頻幀,并將前一幀顯示兩次。