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