1 物理層
1.1 兩線
一個IIC總線只使用兩條總線線路,一條雙向串行數據線(SDA)用於雙向傳輸數據,一條串行時鍾線(SCL)用於保證時鍾同步;
1.2 多主機多從機
支持多個通訊主機和多個通訊從機;
1.3 上拉和線與
當IIC設備空閑時,會輸出高阻態,而當所有設備都空閑時,都輸出高阻態,由上拉電阻把總線拉成高電平。而IIC具有線與特性,所以當設備不輸出高阻態(也就是0)時,別的設備就能馬上感知到IIC總線的變化。
1.4 設備地址
每一個連接到總線的設備都有一個獨立的地址,當主機廣播的地址與某個設備地址相同時,這個設備就被選中。從機地址一般為7位(高四位為器件類型地址,低三位為器件引腳地址,由硬件電路A0、A1、A2電平決定)。
1.5 仲裁
多個主機同時使用總線時,為防止沖突,會利用仲裁方式決定由那個設備占用總線
1.6 IIC總線傳輸模式
標准模式:100Kbits(總線負載最大容限400pf)
快速模式:400Kbits(總線負載最大容限200pf)
高速模式:3.4Mbits(大多數設備尚不支持)
2 協議層
2.1 IIC基本讀寫過程
(1)主機先產生一個起始信號(S),這時連接到IIC總線上的所有從機都會接收到這個信號。
(2)起始信號產生后,所有從機就開始等待主機廣播從機地址信號,當廣播地址與某個設備地址相同時,這個設備就被選中了。沒有被選中的設備會忽略之后的數據信號。
(3)在地址位(A7~A1)之后是傳輸方向選擇位(A0),0:代表主機向從機寫數據;1:代表主機由從機讀數據。
(4)從機地址匹配成功后,會發送一個應答信號(A),主機收到應答信號后,主機才繼續發送或接收下一數據。若是作為接收方的從機希望結束數據傳輸,就向主機發送“非應答信號”,主機收到這個信號后會產生一個停止信號,結束信號傳輸。
(5)若配置為“寫數據”,主機收到應答信號后,開始向從機傳輸數據(DATA),數據包大小8位,主機每發送完一個字節,都要等待從機應答信號,可以重復傳輸N個數據。直到主機向從機發送一個停止信號(P),表示數據傳輸完成(從機想結束接收數據可以回復一個“非應答信號”,主機收到后會發送一個停止信號(P)給從機)。
(6)若配置為“讀數據”,主機收到應答信號后,從機開始向主機傳輸數據(DATA),數據包大小8位,從機每發送完一個字節,都要等待主機應答信號,可以重復傳輸N個數據。直到從機向主機發送一個停止信號(P),表示數據傳輸完成(主機想結束接收數據可以回復一個“非應答信號”,主機收到后會發送
2.2 起始和停止信號
SCL高電平期間,SDA下降沿是起始信號;SDA上升沿是停止信號。
2.3 有效數據
SCL低電平期間,SDA數據交換
SCL高電平時,SDA數據有效
2.4 應答信號
2.5 設備地址
從機地址一般為7位(高四位為器件類型地址,低三位為器件引腳地址,由硬件電路A0、A1、A2電平決定)
2.6 仲裁
SDA線的仲裁也是建立在總線具有線“與”邏輯功能的原理上的。節點在發送1位數據后,比較總線上所呈現的數據與自己發送的是否一致。是,繼續發送;否則,退出競爭。SDA線的仲裁可以保證I2C總線系統在多個主節點同時企圖控制總線時通信正常進行並且數據不丟失。總線系統通過仲裁只允許一個主節點可以繼續占據總線