IIC(Inter Integrated Circuit)兩根線,一條時鐘線SCL和一條數(shù)據(jù)線SDA,所以是半雙工通信,主從模式,支持一對多。
假設主機A給從機B發(fā)數(shù)據(jù)(A.SCL接B.SCL,A.SDA接B.SDA),根據(jù)應用,A可以同時接B,C,D??臻e時,SDA和SCL上的電平都為高電平。
起始和停止
起始條件S:當SCL高電平時,SDA由高電平向低電平轉(zhuǎn)換;停止條件P:當SCL高電平時,SDA由低電平向高電平轉(zhuǎn)換。起始和停止條件一般由主機產(chǎn)生,總線在起始條件后處于busy的狀態(tài),在停止條件的某段時間后,總線才再次處于空閑狀態(tài)。
空閑時SDA和SCL上的電平都為高電平。A先把SDA拉低,等SDA變?yōu)榈碗娖胶笤侔裇CL拉低(以上兩個動作構(gòu)成了I2C的起始位),此時SDA就可以發(fā)送數(shù)據(jù)了,與此同時,SCL發(fā)送一定周期的脈沖,SDA發(fā)送數(shù)據(jù)和SCL發(fā)送脈沖的要符合的關(guān)系是:SDA必須在SCL是高電平時保持有效,在SCL是低電平時發(fā)送下一位(SCL會在上升沿對SDA進行采樣)。
傳輸與響應
一次傳8位數(shù)據(jù),8位數(shù)據(jù)傳輸結(jié)束后A釋放SDA,SCL再發(fā)一個脈沖(這是第九個脈沖),觸發(fā)B將SDA置為低電平表示確認(該低電平稱為ACK)。最后SCL先變?yōu)楦唠娖?,SDA再變?yōu)楦唠娖剑ㄒ陨蟽蓚€動作稱為結(jié)束標志),如果B沒有將SDA置為0,則A停止發(fā)送下一幀數(shù)據(jù)。
整體時序
I2C總線上的每個設備都有唯一地址,數(shù)據(jù)包傳輸時先發(fā)送地址位,接著才是數(shù)據(jù)。一個地址字節(jié)由7個地址位(可以掛128個設備)和1個指示位組成(7位尋址模式),0表示寫,1表示讀。一般芯片手冊I2C地址都是7位地址,有些與某個引腳的電平相關(guān),主機控制最后讀寫位。實際項目一般都是采用I2C庫,有的庫要求傳入的是8位的寫的地址,有的是7位,由接口函數(shù)再區(qū)分讀寫補位。當然,最愚蠢的辦法是從0到255定時循環(huán)讀某個寄存器地址,讀到正確值時的地址就是正確的從機地址。
一般情況下使用I2C庫,除了配置從機地址,其他的起始、結(jié)束等時序等其實不太關(guān)注,只需要配置時鐘頻率,一般看從機最大支持多少,以及主機的系統(tǒng)時鐘,太高會偶爾出現(xiàn)錯誤,再沒有時間要求的情況下,時鐘越低越穩(wěn)定。
審核編輯:湯梓紅
-
IC
+關(guān)注
關(guān)注
36文章
5832瀏覽量
174902 -
通訊
+關(guān)注
關(guān)注
9文章
884瀏覽量
34779 -
IIC
+關(guān)注
關(guān)注
11文章
293瀏覽量
38206 -
SCL
+關(guān)注
關(guān)注
1文章
239瀏覽量
17010
發(fā)布評論請先 登錄
相關(guān)推薦
評論