ZHCAE64 July 2024 TCA4307
當需要讀取信息或需要通過總線傳輸數據時,SDA 一直處于低電平會導致問題。有幾種可能的方法可以釋放總線。如果總線的系統設計人員能夠修改或構建總線上處理器或主機的軟件,他們可以為處理器或主機編寫代碼,以便尋找潛在的總線阻塞問題,并做出反應以嘗試解決該問題。對于 I2C 總線,為了實現此目的,可以將串行時鐘線路 (SCL) 切換八到十六次,然后發出停止條件。這樣可以推進在整個處理流程中使串行數據線路 (SDA) 保持低電平的 I2C 器件狀態機,將狀態機復位為空閑狀態以釋放總線。對于 SMBus,SCL 線路保持低電平的時間可能超過 t_timeout,這可能強制所有 SMBus 器件全部復位并解決總線阻塞問題。如果 I2C 目標器件有一個專用的復位引腳,則總線上的處理器可以啟動復位以釋放總線。但是,如果存在大量 I2C 目標器件,這種設計的效率很低。可以強制處理器對連接到該復位引腳的所有目標器件進行復位,從而使總線上的所有 I2C 目標器件重新初始化(盡管最初只有一個器件導致總線阻塞問題)。
從硬件角度來看,使用具有熱插入保護功能的 I2C 緩沖器器件可以解決因熱插入事件導致的總線阻塞問題。TCA9511A 和 TCA4307 具有專用邏輯可用于將未通電的 I2C 總線(子卡)與通電的 I2C 總線(背板)分離,直到兩側都準備好連接,從而防止總線上出現干擾。面向熱插拔應用的 I2C 解決方案 應用手冊中詳細介紹了這種安全連接機制。
為了解決由串擾、EMI 或不良的上電復位引起的總線阻塞問題,可將 TCA4307 設計用于 I2C 總線,因為其具有一種稱為總線阻塞恢復的附加功能。總線阻塞恢復功能可以檢測 SDA 線路是否一直處于低電平。如果器件一直處于低電平的時間超過 40ms (t_stuckbus),則會將下游 I2C 總線與上游 I2C 總線斷開,并將 RDY 引腳驅動為低電平。這樣會讓處理器知道下游通道已從總線斷開。因此,可以防止 I2C 控制器/處理器通常所在的上游總線發生阻塞,并允許繼續與上游總線段上的其他 I2C 器件通信。TCA4307 隨后可生成多達 16 個時鐘脈沖,直至 SDA 線路釋放。然后,TCA4307 可發出一個停止條件來嘗試將 I2C 器件的狀態機復位為空閑狀態。如果總線阻塞問題得到解決,TCA4307 可以自動重新連接下游總線和上游總線。
從下圖可以看到這一點。通道 1(藍色)是 SCL 線路,通道 4(綠色)是 SDA 線路,通道 3(紫色)是 RDY 引腳,這表示下游總線和上游總線再次連接在一起。在圖 6-1 所示的示例中,在 6 個時鐘脈沖過后,TCA4307 會控制 SDA 線路以發出停止條件,總線即由 TCA4307 解除阻塞。
圖 6-1 總線阻塞恢復功能的波形示例