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