ZHCAE64 July 2024 TCA4307
總線阻塞問題可能由多種不同原因?qū)е?,在大多?shù)情況下,主要都是產(chǎn)生了錯誤的時鐘邊沿。I2C 總線上出現(xiàn)錯誤的時鐘邊沿會帶來危險,因為錯誤的時鐘邊沿會使 I2C 目標器件的時鐘與負責產(chǎn)生時鐘邊沿的 I2C 控制器不同步。I2C 目標器件的納秒級抗尖峰脈沖濾波器和 I2C 控制器的抗尖峰脈沖濾波器之間的差異可能導致一個器件會發(fā)現(xiàn)錯誤邊沿,而另一個器件不會發(fā)現(xiàn)錯誤邊沿。例如,如果 I2C 目標器件具有 70ns 抗尖峰脈沖濾波器,而控制器具有 50ns 抗尖峰脈沖濾波器,則會在 60ns 時間窗口內(nèi)發(fā)生錯誤邊沿,導致控制器會發(fā)現(xiàn)錯誤邊沿,而目標器件會忽略錯誤邊沿。另一種可能的情況是,目標器件和控制器之間存在一個 I2C 轉(zhuǎn)接驅(qū)動器(也稱為緩沖器)。如果一側出現(xiàn)錯誤邊沿,該邊沿無法通過轉(zhuǎn)接驅(qū)動器傳播,因此控制器和目標器件兩者只有一側可以發(fā)現(xiàn)邊沿,另一側不會。
圖 2-1 顯示了一個示例。本示例中的第一個事務顯示了應該發(fā)生的情況。控制器使用 0x0Ah 數(shù)據(jù)包向目標器件發(fā)送數(shù)據(jù),在第 9 個時鐘脈沖上,目標器件通過確認告知控制器其接收到數(shù)據(jù),然后控制器生成停止條件。第二個事務與第一個事務相同,但在第 5 個時鐘脈沖期間生成了錯誤邊沿。此時,控制器會發(fā)現(xiàn)該錯誤邊沿,而 I2C 目標器件不會發(fā)現(xiàn)。這意味著控制器在 I2C 事務中超前一個時鐘,而 I2C 目標器件落后一個時鐘。目標器件發(fā)現(xiàn)的數(shù)據(jù)隨后向左移動 1,因此其接收到錯誤數(shù)據(jù) (0x05h),而不是發(fā)現(xiàn) 0x0Ah。當出現(xiàn)第 8 個 SCL 下降沿時(從目標器件的角度),I2C 目標器件會將 SDA 線路驅(qū)動為低電平,但始終不會發(fā)現(xiàn)第 9 個 SCL 下降沿。這會導致 SDA 線路無限期處于低電平??刂破鳠o法發(fā)出停止條件,但可以將 SCL 保持為低電平或釋放 SCL(具體取決于控制器的硬件和軟件)。
總線阻塞的根本原因可能是串擾、電磁干擾、熱插入事件或不良的上電復位情況。