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