I2C通信
I2C通信協(xié)議:串行,同步,半雙工
數(shù)據(jù)線:SDA?(需要上拉輸出)
時鐘線:SCL(由master提供時鐘)
待機(jī)狀態(tài):SCL和SDA都持續(xù)高電平。
開始標(biāo)志:SCL高電平,SDA由高變?yōu)榈?↓
結(jié)束標(biāo)志:SCL高電平,SDA由低變?yōu)楦?↑

數(shù)據(jù)有效性:
SCL高電平時,SDA不能修改,此時可以讀取SDA的有效數(shù)據(jù)。
SCL低電平時,SDA可以發(fā)生電平的變動。

應(yīng)答(ACK)和非應(yīng)答(NACK):
IIC write:master將SDA拉高來釋放SDA。如果slave將SDA拉低,則認(rèn)為回應(yīng)了master,傳輸成功(可以繼續(xù)傳輸下一個字節(jié),直到傳輸結(jié)束,再發(fā)送STOP信號)。如果slave沒有拉低SDA,則認(rèn)為通信失敗。
IIC?read:master在接收完slave發(fā)送的數(shù)據(jù)后,回復(fù)ACK(拉低SDA),則slave繼續(xù)向master發(fā)送數(shù)據(jù)。若master回復(fù)NACK(拉高SDA),則表示不需要slave繼續(xù)發(fā)送數(shù)據(jù)。

使用GPIO接口來模擬IIC:
GPIO需要設(shè)置為開漏輸出模式,因為推挽輸出不能進(jìn)行線與。(若是上拉輸出,則推挽/開漏都可以)
通信時應(yīng)該注意寄存器修改需要的時間,有的寄存器擦寫時間長,寫入操作后不能立刻進(jìn)行讀取操作,讀寫操作之間需要一個時間間隔。(比如說EEPROM的擦寫時間就比較長)
標(biāo)簽: