本應用筆記描述了在I2C總線上執(zhí)行非阻塞通信的一種可能方法,并提供了I2C主機的示例C代碼。阻塞通信意味著MCU會一直等待,直到字節(jié)從數據寄存器傳輸完成。在代碼中,通常通過在“while”循環(huán)中檢查狀態(tài)位來實現(xiàn)。然而,對于某些時間關鍵的應用程序,這種方法可能不適用。假設I2C速度為100kHz,傳輸1個字節(jié)將使CPU停頓9微秒。CPU等待數據傳輸或接收的總時間要更長,因為I2C消息至少由三個字節(jié)組成。
本應用筆記中描述的算法能夠在不需要循環(huán)等待CPU的情況下發(fā)送完整的I2C數據包。通過引入更穩(wěn)健的解決方案,故障檢測和評估可以增加該示例代碼的價值。該算法假設總線上只有一個主機存在,因此不會檢查和評估仲裁條件喪失的情況。