1. 概述
IIC = Inter Integrated-Circuit 總線是PHLIPS公司推出的一種串行總線,是具備多主機系統所需的包括總線裁決和高低速器件同步功能的高性能串行總線,它支持多主控(multimastering),其中任何能夠進行發送和接收的設備都可以成為主總線。I2C總線只有兩根雙向信號線。一根是數據線SDA,另一根是時鐘線SCL,如下圖:
2. 硬件結構
I2C總線通過上拉電阻(大小由速度和容性負載決定一般在3.3K-10K之間)接正電源。當總線空閑時,兩根線均為高電平。連到總線上的任一器件輸出的低電平,都將使總線的信號變低,即各器件的SDA及SCL都是線“與”關系。如下圖:
? ? ? ? ? ? ??
每個連接到總線的設備都有唯一的地址,地址為7位,前四位鑒定器件類別,一般是固定的;后三位由器件本身管腳A0、A1、A2可以編程,故同類器件一般最多掛8個。
工作速率如下:
常見的有標準模式100Kbit/s和快速模式400Kbit/s兩種,增強快速模式1Mbit/s和高速模式3.4Mbit/s,極速模式單向數據傳輸速率可達5Mbit/s。
可以實現半雙工通信。基于I2C衍生出來的標準有SMBus、PMBus、IPMI、DDC和ATCA等。
?3. 總線尋址
總線明確規定,采用7位尋址字節,D7~D1位組成從機的地址。
D0位是數據傳送方向位,為“0”時表示寫數據,為“1”時表示讀數據。
主機發送地址時,總線上的每個從機都將這7位地址碼和自己的地址碼比較,如果相同則認為自己被主機尋址,根據讀寫位確認為發送器或者接收器。
部分規格書中說明地址是8位則分讀地址和寫地址,即增加了讀寫位在里面:
極少數情況下有10位尋址的情況;
IIC總線保留地址表如下:
? 0000 0000 為通用廣播地址。
?4. 數據傳輸
- 數據位有效性規定
I2C總線進行數據傳送時,時鐘信號為高電平期間,數據線上的數據必須保持穩定,只有時鐘信號為低電平時,數據線上的電平才允許變化。如下圖:
- 起始信號和終止信號
SCL線為高電平時,SDA線由高變低表示起始信號;
SCL線為高電平時,SDA線由低變高表示終止信號。
起始信號和終止信號均是主機發出;
起始信號產生后,總線處于被占用狀態;
終止信號產生后,總線處于空閑狀態;
- 數據傳送格式
- 字節傳送與應答
每一個字節必須保證是8位長度。數據傳送時,先傳送最高位(MSB),每一個被傳送的字節后面都必須跟隨一位應答位(即一幀共有9位)。如下圖:
由于某種原因從機不對主機尋址信號應答時(如從機正在進行實時性的處理工作而無法接收總線上的數據),它必須將數據線置于高電平,而由主機產生一個終止信號以結束總線的數據傳送;
如果從機對主機進行了應答,但在數據傳送一段時間后無法繼續接收更多的數據時,從機可以通過對無法接收的第一個數據字節的“非應答”通知主機,主機則應發出終止信號以結束數據的繼續傳送;
當主機接收數據時,它收到最后一個數據字節后,必須向從機發出一個結束傳送的信號。這個信號是由對從機的“非應答”來實現的。然后,從機釋放SDA線,以允許主機產生終止信號。
- 數據幀率格式
IIC總線上的數據包括地址信號和數據信號。在起始信號后必須傳送一個從機的地址(7位),第8位是數據的傳送方向即讀還是寫(R=1/W=0),每次數據傳送均是主機產生終止信號而結束。
????????????? 總線的一次數據傳輸,包括以下幾種組合:
- 主機向從機發送數據,數據的傳送方向在整個傳送過程中不變:
?????????????? ???????????
- 主機在第一個字節后,立即從從機讀數據:
?????????????? ???????
- 在傳送過程中,需要改變讀寫方向時,起始信號和從機地址都得重新一次:
?????????????? ??????
?5. 注意事項
- 所有器件的接口均是開漏結構,通過外接上拉電阻實現線與邏輯;
- 總線上所有設備通過軟件尋址(7位或者10位不常見);
- 每個字節傳送均是高位在前面MSB;
- 如果從機需要延遲下一個數據字節的開始傳送時間,可以把SCL電平拉低并保持來強制主機進入等待狀態;
- 總線最大電容值,一般為400pf,高速模式下為100pf;、
- SLC一般情況下不會擁堵在低電平,如果出現這種現象,有硬件復位管腳的話,推薦使用硬件復位;沒有的話,推薦使用重新上電方式觸發上電復位電路;
- SDA擁堵在低電平,主機應發送9個時鐘脈沖,那些將SDA拉低的設備在這9個時鐘周期內應釋放總線。如果沒有的話,則需要通過硬件復位或重新上電的方式清除擁堵。
歡迎加入硬件QQ群:101 808 3751,一起討論硬件問題,分享調試心得,共同成長。