1、I2C總線概念
I2C總線支持任何IC生產過程(NMOS、CMOS、雙極性),兩線(串行數據SDA和串行時鍾SCL)在連接到總線的器件間傳遞信息,每個器件都有一個唯一的地址識別(微控制器、LCD驅動器、存儲器或鍵盤接口等),而且都可以作為一個發送器或者接收器(由器件的功能決定),很明顯,LCD驅動器只是一個接收器,而存儲器既可以接收又可以發送數據,除了發送器和接收器外,器件在執行數據傳輸時也可以被看作是主機或從機,主機是初始化總線的數據傳輸並產生允許傳輸的時鍾信號的器件,此時,任何被尋址的器件都被認為是從機,I2C總線的一些術語定義如下:
術語 | 描述 |
發送器 | 發送數據到總線的器件 |
接收器 | 從總線接收數據的器件 |
主機 | 初始化發送、產生時鍾信號和終止發送的器件 |
從機 | 被主機尋址的器件 |
多主機 | 同時有多於一個主機嘗試控制總線,但不破壞報文 |
仲裁 | 是一個在有多主機同時嘗試控制總線,但只允許其中一個控制總線並使報文不被破壞的過程 |
同步 | 兩個或多個器件同步時鍾信號的過程 |
I2C總線是一個多主機的總線,就是說可以連接多於一個能控制總線的器件到總線。
2、I2C特征
- 只要求兩條總線線路:一條串行數據線(SDA)和一條串行時鍾線(SCL);
- 每個連接到總線的器件都可以通過唯一的地址和一直存在的簡單的主機/從機關系軟件設定地址,主機可以作為主機發送器或者主機接收器;
- 真正的多主機總線,如果兩個或更多主機同時初始化數據傳輸可以通過沖突檢測和仲裁防止數據被破壞;
- 串行的8位雙向數據傳輸速率在標准模式下可達100Kbit/s,快速模式下可達400Kbit/s,高速模式下可達3.4Mbit/s;
- 片上的濾波器可以濾掉總線數據上的毛刺波,保證數據完整;
- 連接到相同總線的IC數量只受到總線的最大電容400pF限制。
3、位傳輸
由於連接到I2C總線上的器件有着不同種類的工藝(CMOS、NMOS、雙極性),邏輯0(低)和邏輯1(高)的電平不是固定的,它由VDD的相關電平去決定,每傳輸一個數據位就產生一個時鍾脈沖。
(3.1)數據的有效性
SDA線上的數據必須在時鍾的高電平周期保持穩定,數據線的高或低電平狀態只有在SCL線的時鍾信號是低電平才能改變,如下圖所示:
(3.2)起始和停止條件
在I2C總線中,唯一出現的是被定義為起始(S)和停止(P)條件的情況,如下圖所示:
其中的一種情況是,當SCL線為高電平時,SDA線從高電平向低電平切換,該情況表示I2C總線的起始條件,另外一種情況時,當SCL線為高電平時,SDA線從低電平向高電平切換,該情況表示I2C總線的停止條件,起始條件和停止條件一般由主機產生,總線在起始條件后被認為處於忙的狀態,在停止條件后的某段時間,總線會被認為處於空閑狀態,如果產生重復起始條件(Sr)而不產生停止條件,總線會一直處於忙的狀態,此時的起始條件(S)和重復起始條件(Sr)在功能上是一樣的。
如果連接到總線的器件合並了必要的硬件接口,那么用它們檢測起始條件和停止條件將十分簡便,但是,沒有這種接口的微控制器在每個時鍾周期至少要采樣SDA線兩次來判別是否發生電平切換。
4、傳輸數據
(4.1)字節格式
發送到SDA線上的每個字節必須為8位,每次傳輸可以發送的字節數量不受限制,每個字節后必須跟着一個響應位,首先傳輸的是數據的最高位(MSB),如果從機要完成一些其它功能(例如一個內部中斷服務程序)后才能接收或發送下一個完整的數據字節,可以使時鍾線SCL保持低電平迫使主機進入等待狀態,當從機准備好接收下一個數據字節並釋放時鍾線SCL后,數據繼續傳輸,I2C總線數據傳輸如下圖所示:
(4.2)響應
數據傳輸必須帶響應,相關的響應時鍾脈沖由主機產生,在響應的時鍾脈沖期間,發送器釋放SDA線(高),在響應的時鍾脈沖期間,接收器必須將SDA線拉低,使它在這個時鍾脈沖的高電平期間保持穩定的低電平,當然,必須考慮建立和保持時間,I2C總線的響應如下圖所示:
5、7位地址格式
I2C總線數據的傳輸遵循下圖所示的格式:
在起始條件(S)后,發送了一個從機地址,這個地址共有7位,緊接着的第8位是數據方向位(R/W),0表示發送(寫),1表示請求數據(讀),數據傳輸一般由主機產生的停止條件(P)終止,但是,如果主機仍希望在總線上通訊,它可以產生重復起始條件(Sr)和尋址另一個從機,而不是首先產生一個停止條件,在這種傳輸中,可能有不同的讀寫格式結合。
可能的數據傳輸格式有:
- 主機-發送器發送到從機-接收器,傳輸的方向不會改變,如下圖所示:
- 在第一個字節后,主機立即讀從機,如下圖所示,在第一次響應時,主機-發送器變成主機-接收器,從機接收器變成從機-發送器,第一次響應仍由從機產生,之前發送了一個不響應信號的主機產生停止條件;
復合格式如下圖所示,傳輸改變方向的時候,起始條件和從機地址都會被重復,但R/W位取反,如果主機-接收器發送一個重復起始條件,它之前應該發送了一個不響應信號;
需要注意的是:
- 復合格式可以用於例如控制一個串行存儲器,在第一個數據字節期間,要寫內部存儲器的位置,在重復起始條件和從機地址后,數據可以被傳輸;
- 自動增加或者減少之前訪問的存儲器位置等所有決定都由器件的設計者決定;
- 每個字節都跟着一個響應位;
- 兼容I2C總線的器件在接收到起始或者重復起始條件必須復位它們的總線邏輯,甚至在這些起始條件沒有根據正確的格式放置,它們也都期望發送從機地址;
- 起始條件后面立即跟着一個停止條件,此時報文為空,是一個不合法的格式。
6、7位尋址
I2C總線的尋址過程是通常在起始條件后的第一個字節決定了主機選擇哪個從機,第一個字節的頭7位組成了從機地址,如下圖所示:
最低位(LSB),它決定了報文的方向,第一個字節的最低位是0表示主機會寫信息到被選中的從機,1表示主機會向從機讀信息,當發送了一個地址后,系統中的每個器件都在起始條件后將頭7位與自己的地址進行比較,如果一樣的話,器件會任務它被主機尋址,至於是從機-接收器還是從機-發送器都由最低位進行決定。