當(dāng)前位置:首頁 > 百科知識 > 電子工程 > 正文

I2C總線

I2C(Inter-Integrated Circuit)總線是由PHILIPS公司開發(fā)的兩線式串行總線,用于連接微控制器及其外圍設(shè)備。是微電子通信控制領(lǐng)域廣泛采用的一種總線標(biāo)準(zhǔn)。它是同步通信的一種特殊形式,具有接口線少,控制方式簡單,器件封裝形式小,通信速率較高等優(yōu)點(diǎn)。

  概念

  I2C 總線支持任何IC 生產(chǎn)過程(NMOS CMOS、雙極性)。通過串行數(shù)據(jù)(SDA)線和串行時鐘 SCL)線在連接到總線的器件間傳遞信息。每個器件都有一個唯一的地址識別(無論是微控制器——MCU、LCD 驅(qū)動器、存儲器或鍵盤接口),而且都可以作為一個發(fā)送器或接收器(由器件的功能決定)。很明顯,LCD 驅(qū)動器只能作為接收器,而存儲器則既可以接收又可以發(fā)送數(shù)據(jù)。除了發(fā)送器和接收器外,器件在執(zhí)行數(shù)據(jù)傳輸時也可以被看作是主機(jī)或從機(jī)(見表1)。主機(jī)是初始化總線的數(shù)據(jù)傳輸并產(chǎn)生允許傳輸?shù)臅r鐘信號 的器件。此時,任何被尋址的器件都被認(rèn)為是從機(jī)。  I2C 總線術(shù)語的定義

  特征

  1、只要求兩條總線線路:一條串行數(shù)據(jù)線SDA,一條串行時鐘線SCL;

  2、每個連接到總線的器件都可以通過唯一的地址和一直存在的簡單的主機(jī)/從機(jī)關(guān)系軟件設(shè)定地址,主機(jī)可以作為主機(jī)發(fā)送器或主機(jī)接收器;

  3、它是一個真正的多主機(jī)總線,如果兩個或更多主機(jī)同時初始化,數(shù)據(jù)傳輸可以通過沖突檢測和仲裁防止數(shù)據(jù)被破壞;

  4、串行的8 位雙向數(shù)據(jù)傳輸位速率在標(biāo)準(zhǔn)模式下可達(dá)100kbit/s,快速模式下可達(dá)400kbit/s,高速模式下可達(dá)3.4Mbit/s;

  5、連接到相同總線的IC 數(shù)量只受到總線的最大電容400pF 限制。

  術(shù)語

  發(fā)送器:發(fā)送數(shù)據(jù)到總線的器件;

  接收器:從總線接收數(shù)據(jù)的器件;

  主機(jī):啟動數(shù)據(jù)傳送并產(chǎn)生時鐘信號的設(shè)備;

  從機(jī):被主機(jī)尋址的器件;

  多主機(jī):同時有多于一個主機(jī)嘗試控制總線但不破壞傳輸;

  主模式:用I2CNDAT支持自動字節(jié)計數(shù)的模式;位I2CRM,I2CSTT,I2CSTP控制數(shù)據(jù)的接收和發(fā)送;

  從模式:發(fā)送和接收操作都是由I2C模塊自動控制的;

  仲裁:是一個在有多個主機(jī)同時嘗試控制總線但只允許其中一個控制總線并使傳輸不被破壞的過程;

  同步:兩個或多個器件同步時鐘信號的過程 。

  位傳輸

  由于連接到I2C 總線的器件有不同種類的工藝(CMOS、NMOS、PMOS、雙極性),邏輯0(低)和邏輯1(高)的電平不是固定的,它由電源VCC的相關(guān)電平?jīng)Q定,每傳輸一個數(shù)據(jù)位就產(chǎn)生一個時鐘脈沖。

  數(shù)據(jù)有效

  在傳輸數(shù)據(jù)的時候,SDA線必須在時鐘的高電平周期保持穩(wěn)定,SDA的高或低電平狀態(tài)只有在SCL 線的時鐘信號是低電平時才能改變 。

I2C總線 

I2C位傳輸數(shù)據(jù)有效性

    起始停止

  SCL 線是高電平時,SDA 線從高電平向低電平切換,這個情況表示起始條件;

  SCL 線是高電平時,SDA 線由低電平向高電平切換,這個情況表示停止條件。

  起始和停止條件一般由主機(jī)產(chǎn)生,總線在起始條件后被認(rèn)為處于忙的狀態(tài),在停止條件的某段時間后總線被認(rèn)為再次處于空閑狀態(tài)。

 I2C總線

起始和停止條件

  如果產(chǎn)生重復(fù)起始條件而不產(chǎn)生停止條件,總線會一直處于忙的狀態(tài),此時的起始條件(S)和重復(fù)起始條件(Sr) 在功能上是一樣的。

  數(shù)據(jù)傳輸

  字節(jié)格式

  發(fā)送到SDA 線上的每個字節(jié)必須為8 位,每次傳輸可以發(fā)送的字節(jié)數(shù)量不受限制。每個字節(jié)后必須跟一個響應(yīng)位。首先傳輸?shù)氖菙?shù)據(jù)的最高位(MSB),如果從機(jī)要完成一些其他功能后(例如一個內(nèi)部中斷服務(wù)程序)才能接收或發(fā)送下一個完整的數(shù)據(jù)字節(jié),可以使時鐘線SCL 保持低電平,迫使主機(jī)進(jìn)入等待狀態(tài),當(dāng)從機(jī)準(zhǔn)備好接收下一個數(shù)據(jù)字節(jié)并釋放時鐘線SCL 后數(shù)據(jù)傳輸繼續(xù)。

  應(yīng)答響應(yīng)

  數(shù)據(jù)傳輸必須帶響應(yīng),相關(guān)的響應(yīng)時鐘脈沖由主機(jī)產(chǎn)生。在響應(yīng)的時鐘脈沖期間發(fā)送器釋放SDA 線(高)。

  在響應(yīng)的時鐘脈沖期間,接收器必須將SDA 線拉低,使它在這個時鐘脈沖的高電平期間保持穩(wěn)定的低電平。

  通常被尋址的接收器在接收到的每個字節(jié)后,除了用CBUS 地址開頭的數(shù) 據(jù),必須產(chǎn)生一個響應(yīng)。當(dāng)從機(jī)不能響應(yīng)從機(jī)地址時(例如它正在執(zhí)行一些實時函數(shù)不能接收或發(fā)送),從機(jī)必須使數(shù)據(jù)線保持高電平,主機(jī)然后產(chǎn)生一個停止條件終止傳輸或者產(chǎn)生重復(fù)起始條件開始新的傳輸。

I2C總線 

I2C總線數(shù)據(jù)傳輸和應(yīng)答

  如果從機(jī)接收器響應(yīng)了從機(jī)地址,但是在傳輸了一段時間后不能接收更多數(shù)據(jù)字節(jié),主機(jī)必須再一次終止傳輸。這個情況用從機(jī)在第一個字節(jié)后沒有產(chǎn)生響應(yīng)來表示。從機(jī)使數(shù)據(jù)線保持高電平,主機(jī)產(chǎn)生一個停止或重復(fù)起始條件。

  如果傳輸中有主機(jī)接收器,它必須通過在從機(jī)不產(chǎn)生時鐘的最后一個字節(jié)不產(chǎn)生一個響應(yīng),向從機(jī)發(fā)送器通知數(shù)據(jù)結(jié)束。從機(jī)發(fā)送器必須釋放數(shù)據(jù)線,允許主機(jī)產(chǎn)生一個停止或重復(fù)起始條件。

  時鐘同步

  所有主機(jī)在SCL線上產(chǎn)生它們自己的時鐘來傳輸I2C總線上的報文。數(shù)據(jù)只在時鐘的高電平周期有效,因此需要一個確定的時鐘進(jìn)行逐位仲裁。

  時鐘同步通過線與連接I2C 接口到SCL 線來執(zhí)行。這就是說SCL 線的高到低切換會使器件開始數(shù)它們的低電平周期,而且一旦器件的時鐘變低電平,它會使SCL 線保持這種狀態(tài)直到到達(dá)時鐘的高電平。但是如果另一個時鐘仍處于低電平周期,這個時鐘的低到高切換不會改變SCL 線的狀態(tài)。因此SCL 線被有最長低電平周期的器件保持低電平。此時低電平周期短的器件會進(jìn)入高電平的等待狀態(tài)。

  當(dāng)所有有關(guān)的器件數(shù)完了它們的低電平周期后,時鐘線被釋放并變成高電平。之后,器件時鐘和SCL線的狀態(tài)沒有差別,而且所有器件會開始數(shù)它們的高電平周期。首先完成高電平周期的器件會再次將SCL線拉低。

  這樣產(chǎn)生的同步SCL 時鐘的低電平周期由低電平時鐘周期最長的器件決定,而高電平周期由高電平時鐘周期最短的器件決定。

  尋址方式

  7位

  第一個字節(jié)的頭7 位組成了從機(jī)地址,最低位(LSB)是第8 位,它決定了傳輸?shù)?nbsp;方向。第一個字節(jié)的最低位是“0”,表示主機(jī)會寫信息到被選中的從機(jī);“1”表示主機(jī)會向從機(jī)讀信息,當(dāng)發(fā)送了一個地址后,系統(tǒng)中的每個器件都在起始條件后將頭7 位與它自己的地址比較,如果一樣,器件會判定它被主機(jī)尋址,至于是從機(jī)接收器還是從機(jī)發(fā)送器,都由R/W 位決定的哦。

I2C總線

 普通的和帶重復(fù)開始條件的7位地址格式

  10位

  10位尋址和7 位尋址兼容,而且可以結(jié)合使用。

  10位尋址采用了保留的1111XXX 作為起始條件(S),或重復(fù)起始條件(Sr )的后第一個字節(jié)的頭7 位。

  10 位尋址不會影響已有的7 位尋址,有7 位和10 位地址的器件可以連接到相同的I2C 總線。它們都能用于標(biāo)準(zhǔn)模式(F/S)和高速模式(Hs)系統(tǒng)。

I2C總線

I2C總線10位地址格式  

  保留地址位1111XXX 有8 個組合,但是只有4 個組合11110XX 用于10 位尋址,剩下的4個組合11111XX 保留給后續(xù)增強(qiáng)的I2C 總線。

  10 位從機(jī)地址是由在起始條件(S) 或重復(fù)起始條件(Sr )后的頭兩個字節(jié)組成。

  第一個字節(jié)的頭7 位是11110XX 的組合,其中最后兩位(XX) 是10 位地址的兩個最高位(MSB)。

  第一個字節(jié)的第8 位是R/W 位,決定了傳輸?shù)姆较?,第一個字節(jié)的最低位是“0”表示主機(jī)將寫信息到選中的從機(jī),“1 ”表示主機(jī)將向從機(jī)讀信息。

  如果R/W 位是“0 ”,則第二個字節(jié)是10 位從機(jī)地址剩下的8 位;如果R/W 位是“1” 則下一個字節(jié)是從機(jī)發(fā)送給主機(jī)的數(shù)據(jù)。

  快速模式

  快速模式器件可以在400kbit/s 下接收和發(fā)送。最小要求是:它們可以和400kbit/s 傳輸同步,可以延長SCL 信號的低電平周期來減慢傳輸??焖倌J狡骷枷蛳录嫒?,可以和標(biāo)準(zhǔn)模式器件在0~100kbit/s 的I2C 總線系統(tǒng)通訊。但是,由于標(biāo)準(zhǔn)模式器件不向上兼容,所以不能在快速模式I2C 總線系統(tǒng)中工作??焖倌J絀2C 總線規(guī)范與標(biāo)準(zhǔn)模式相比有以下額外的特征:

  1、最大位速率增加到400kbit/s;

  2、調(diào)整了串行數(shù)據(jù)(SDA) 和串行時鐘(SCL )信號的時序;

  3、快速模式器件的輸入有抑制毛刺的功能,SDA 和SCL輸入有施密特觸發(fā)器

  4、快速模式器件的輸出緩沖器對SDA 和SCL 信號的下降沿有斜率控制功能;

  5、如果快速模式器件的電源電壓被關(guān)斷,SDA 和SCL 的I/O 管腳必須懸空,不能阻塞總線;

  6、連接到總線的外部上拉器件必須調(diào)整以適應(yīng)快速模式I2C 總線更短的最大允許上升時間。對于負(fù)載最大是200pF 的總線,每條總線的上拉器件可以是一個電阻,對于負(fù)載在200pF~400pF 之間的總線,上拉器件可以是一個電流源(最大值3mA )或者是一個開關(guān)電阻電路。

  高速模式

  高速模式(Hs 模式)器件對I2C 總線的傳輸速度有具大的突破。Hs 模式器件可以在高達(dá)3.4Mbit/s 的位速率下傳輸信息,而且保持完全向下兼容快速模式或標(biāo)準(zhǔn)模式(F/S 模式)器件,它們可以在一個速度混合的總線系統(tǒng)中雙向通訊。

  Hs 模式傳輸除了不執(zhí)行仲裁和時鐘同步外,與F/S 模式系統(tǒng)有相同的串行總線協(xié)議和數(shù)據(jù)格式。

  高速模式下I2C 總線規(guī)范如下:

  1、Hs 模式主機(jī)器件有一個SDAH 信號的開漏輸出緩沖器和一個在SCLH 輸出的開漏極下拉和電流源上拉電路。這個電流源電路縮短了SCLH 信號的上升時間,任何時候在Hs 模式,只有一個主機(jī)的電流源有效;

  2、在多主機(jī)系統(tǒng)的Hs 模式中,不執(zhí)行仲裁和時鐘同步,以加速位處理能力。仲裁過程一般在前面用F/S 模式傳輸主機(jī)碼后結(jié)束;

  3、Hs 模式主機(jī)器件以高電平和低電平是1:2 的比率產(chǎn)生一個串行時鐘信號。解除了建立和保持時間的時序要求;

  4、可以選擇Hs 模式器件有內(nèi)建的電橋。在Hs 模式傳輸中,Hs 模式器件的高速數(shù)據(jù)(SDAH)和高速串行時鐘(SCLH )線通過這個電橋與F/S 模式器件的SDA 和SCL 線分隔開來。減輕了SDAH 和SCLH 線的電容負(fù)載,使上升和下降時間更快;

  5、Hs 模式從機(jī)器件與F/S 從機(jī)器件的唯一差別是它們工作的速度。Hs 模式從機(jī)在SCLH 和SDAH輸出有開漏輸出的緩沖器。SCLH 管腳可選的下拉晶體管可以用于拉長SCLH 信號的低電平,但只允許在Hs 模式傳輸?shù)捻憫?yīng)位后進(jìn)行;

  6、Hs 模式器件的輸出可以抑制毛刺,而且SDAH 和SCLH 輸出有一個施密特觸發(fā)器;

  7、Hs 模式器件的輸出緩沖器對SDAH 和SCLH 信號的下降沿有斜率控制功能。

  常用念法

  I2C(Inter-Integrated Circuit)是內(nèi)部整合電路的稱呼,是一種串行通訊總線,使用多主從架構(gòu),由飛利浦公司在1980年代為了讓主板、嵌入式系統(tǒng)或手機(jī)用以連接低速周邊裝置而發(fā)展。I2C的正確讀法為"I-squared-C" ,而"I-two-C"則是另一種錯誤但被廣泛使用的讀法,在中國則多以"I方C"稱之。

  在Wikipedia中的解釋也有“I-two-C”的說法:I2C (Inter-Integrated Circuit, referred to as I-squared-C, I-two-C, or IIC)
 


內(nèi)容來自百科網(wǎng)