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