ZHCAE64 July 2024 TCA4307
I2C 總線阻塞是指在 SCL 線路為高電平時(shí) SDA 線路無限期保持低電平。這種情況會(huì)帶來問題,因?yàn)橥ǔ?偩€上有多個(gè) I2C 器件,如果 SDA 線路一直處于低電平,則無法再進(jìn)行 I2C 通信。在這種情況下,I2C 控制器無法控制 SDA 線路,因此無法發(fā)出啟動(dòng)和停止條件。在最壞的情況下,甚至處理器也可能會(huì)一直處于等待 SDA 線路變?yōu)楦唠娖降臓顟B(tài)。由于處理器處于無限期等待狀態(tài),不再執(zhí)行任何其他代碼行,因此可能導(dǎo)致整個(gè)系統(tǒng)或終端設(shè)備卡住。本文重點(diǎn)介紹這種特定類型的 I2C 總線阻塞問題,并提供嘗試解決此類總線阻塞問題的一些方法。
還有另一種類型的 I2C 總線阻塞事件,即 SCL 線路可能一直處于低電平。通常,I2C 總線上唯一可以控制 SCL 線路的器件是會(huì)發(fā)出 SCL 脈沖的 I2C 控制器。不過,有一些 I2C 目標(biāo)器件可以執(zhí)行時(shí)鐘延展,在極少數(shù)情況下,可能會(huì)導(dǎo)致時(shí)鐘一直處于低電平。在這些情況下,唯一的恢復(fù)方法可能是對(duì)使總線一直處于低電平的器件進(jìn)行復(fù)位或下電上電。