概念
I2C 總線支持任何IC 生產(chǎn)過(guò)程(NMOS CMOS、雙極性)。通過(guò)串行數(shù)據(jù)(SDA)線和串行時(shí)鐘 SCL)線在連接到總線的器件間傳遞信息。每個(gè)器件都有一個(gè)唯一的地址識(shí)別(無(wú)論是微控制器——MCU、LCD 驅(qū)動(dòng)器、存儲(chǔ)器或鍵盤(pán)接口),而且都可以作為一個(gè)發(fā)送器或接收器(由器件的功能決定)。很明顯,LCD 驅(qū)動(dòng)器只能作為接收器,而存儲(chǔ)器則既可以接收又可以發(fā)送數(shù)據(jù)。除了發(fā)送器和接收器外,器件在執(zhí)行數(shù)據(jù)傳輸時(shí)也可以被看作是主機(jī)或從機(jī)(見(jiàn)表1)。主機(jī)是初始化總線的數(shù)據(jù)傳輸并產(chǎn)生允許傳輸?shù)臅r(shí)鐘信號(hào) 的器件。此時(shí),任何被尋址的器件都被認(rèn)為是從機(jī)。 I2C 總線術(shù)語(yǔ)的定義
特征
1、只要求兩條總線線路:一條串行數(shù)據(jù)線SDA,一條串行時(shí)鐘線SCL;
2、每個(gè)連接到總線的器件都可以通過(guò)唯一的地址和一直存在的簡(jiǎn)單的主機(jī)/從機(jī)關(guān)系軟件設(shè)定地址,主機(jī)可以作為主機(jī)發(fā)送器或主機(jī)接收器;
3、它是一個(gè)真正的多主機(jī)總線,如果兩個(gè)或更多主機(jī)同時(shí)初始化,數(shù)據(jù)傳輸可以通過(guò)沖突檢測(cè)和仲裁防止數(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ù)語(yǔ)
發(fā)送器:發(fā)送數(shù)據(jù)到總線的器件;
接收器:從總線接收數(shù)據(jù)的器件;
主機(jī):?jiǎn)?dòng)數(shù)據(jù)傳送并產(chǎn)生時(shí)鐘信號(hào)的設(shè)備;
從機(jī):被主機(jī)尋址的器件;
多主機(jī):同時(shí)有多于一個(gè)主機(jī)嘗試控制總線但不破壞傳輸;
主模式:用I2CNDAT支持自動(dòng)字節(jié)計(jì)數(shù)的模式;位I2CRM,I2CSTT,I2CSTP控制數(shù)據(jù)的接收和發(fā)送;
從模式:發(fā)送和接收操作都是由I2C模塊自動(dòng)控制的;
仲裁:是一個(gè)在有多個(gè)主機(jī)同時(shí)嘗試控制總線但只允許其中一個(gè)控制總線并使傳輸不被破壞的過(guò)程;
同步:兩個(gè)或多個(gè)器件同步時(shí)鐘信號(hào)的過(guò)程 。
位傳輸
由于連接到I2C 總線的器件有不同種類的工藝(CMOS、NMOS、PMOS、雙極性),邏輯0(低)和邏輯1(高)的電平不是固定的,它由電源VCC的相關(guān)電平?jīng)Q定,每傳輸一個(gè)數(shù)據(jù)位就產(chǎn)生一個(gè)時(shí)鐘脈沖。
數(shù)據(jù)有效
在傳輸數(shù)據(jù)的時(shí)候,SDA線必須在時(shí)鐘的高電平周期保持穩(wěn)定,SDA的高或低電平狀態(tài)只有在SCL 線的時(shí)鐘信號(hào)是低電平時(shí)才能改變 。
I2C位傳輸數(shù)據(jù)有效性
起始停止
SCL 線是高電平時(shí),SDA 線從高電平向低電平切換,這個(gè)情況表示起始條件;
SCL 線是高電平時(shí),SDA 線由低電平向高電平切換,這個(gè)情況表示停止條件。
起始和停止條件一般由主機(jī)產(chǎn)生,總線在起始條件后被認(rèn)為處于忙的狀態(tài),在停止條件的某段時(shí)間后總線被認(rèn)為再次處于空閑狀態(tài)。
起始和停止條件
如果產(chǎn)生重復(fù)起始條件而不產(chǎn)生停止條件,總線會(huì)一直處于忙的狀態(tài),此時(shí)的起始條件(S)和重復(fù)起始條件(Sr) 在功能上是一樣的。
數(shù)據(jù)傳輸
字節(jié)格式
發(fā)送到SDA 線上的每個(gè)字節(jié)必須為8 位,每次傳輸可以發(fā)送的字節(jié)數(shù)量不受限制。每個(gè)字節(jié)后必須跟一個(gè)響應(yīng)位。首先傳輸?shù)氖菙?shù)據(jù)的最高位(MSB),如果從機(jī)要完成一些其他功能后(例如一個(gè)內(nèi)部中斷服務(wù)程序)才能接收或發(fā)送下一個(gè)完整的數(shù)據(jù)字節(jié),可以使時(shí)鐘線SCL 保持低電平,迫使主機(jī)進(jìn)入等待狀態(tài),當(dāng)從機(jī)準(zhǔn)備好接收下一個(gè)數(shù)據(jù)字節(jié)并釋放時(shí)鐘線SCL 后數(shù)據(jù)傳輸繼續(xù)。
應(yīng)答響應(yīng)
數(shù)據(jù)傳輸必須帶響應(yīng),相關(guān)的響應(yīng)時(shí)鐘脈沖由主機(jī)產(chǎn)生。在響應(yīng)的時(shí)鐘脈沖期間發(fā)送器釋放SDA 線(高)。
在響應(yīng)的時(shí)鐘脈沖期間,接收器必須將SDA 線拉低,使它在這個(gè)時(shí)鐘脈沖的高電平期間保持穩(wěn)定的低電平。
通常被尋址的接收器在接收到的每個(gè)字節(jié)后,除了用CBUS 地址開(kāi)頭的數(shù) 據(jù),必須產(chǎn)生一個(gè)響應(yīng)。當(dāng)從機(jī)不能響應(yīng)從機(jī)地址時(shí)(例如它正在執(zhí)行一些實(shí)時(shí)函數(shù)不能接收或發(fā)送),從機(jī)必須使數(shù)據(jù)線保持高電平,主機(jī)然后產(chǎn)生一個(gè)停止條件終止傳輸或者產(chǎn)生重復(fù)起始條件開(kāi)始新的傳輸。
I2C總線數(shù)據(jù)傳輸和應(yīng)答
如果從機(jī)接收器響應(yīng)了從機(jī)地址,但是在傳輸了一段時(shí)間后不能接收更多數(shù)據(jù)字節(jié),主機(jī)必須再一次終止傳輸。這個(gè)情況用從機(jī)在第一個(gè)字節(jié)后沒(méi)有產(chǎn)生響應(yīng)來(lái)表示。從機(jī)使數(shù)據(jù)線保持高電平,主機(jī)產(chǎn)生一個(gè)停止或重復(fù)起始條件。
如果傳輸中有主機(jī)接收器,它必須通過(guò)在從機(jī)不產(chǎn)生時(shí)鐘的最后一個(gè)字節(jié)不產(chǎn)生一個(gè)響應(yīng),向從機(jī)發(fā)送器通知數(shù)據(jù)結(jié)束。從機(jī)發(fā)送器必須釋放數(shù)據(jù)線,允許主機(jī)產(chǎn)生一個(gè)停止或重復(fù)起始條件。
時(shí)鐘同步
所有主機(jī)在SCL線上產(chǎn)生它們自己的時(shí)鐘來(lái)傳輸I2C總線上的報(bào)文。數(shù)據(jù)只在時(shí)鐘的高電平周期有效,因此需要一個(gè)確定的時(shí)鐘進(jìn)行逐位仲裁。
時(shí)鐘同步通過(guò)線與連接I2C 接口到SCL 線來(lái)執(zhí)行。這就是說(shuō)SCL 線的高到低切換會(huì)使器件開(kāi)始數(shù)它們的低電平周期,而且一旦器件的時(shí)鐘變低電平,它會(huì)使SCL 線保持這種狀態(tài)直到到達(dá)時(shí)鐘的高電平。但是如果另一個(gè)時(shí)鐘仍處于低電平周期,這個(gè)時(shí)鐘的低到高切換不會(huì)改變SCL 線的狀態(tài)。因此SCL 線被有最長(zhǎng)低電平周期的器件保持低電平。此時(shí)低電平周期短的器件會(huì)進(jìn)入高電平的等待狀態(tài)。
當(dāng)所有有關(guān)的器件數(shù)完了它們的低電平周期后,時(shí)鐘線被釋放并變成高電平。之后,器件時(shí)鐘和SCL線的狀態(tài)沒(méi)有差別,而且所有器件會(huì)開(kāi)始數(shù)它們的高電平周期。首先完成高電平周期的器件會(huì)再次將SCL線拉低。
這樣產(chǎn)生的同步SCL 時(shí)鐘的低電平周期由低電平時(shí)鐘周期最長(zhǎng)的器件決定,而高電平周期由高電平時(shí)鐘周期最短的器件決定。
尋址方式
7位
第一個(gè)字節(jié)的頭7 位組成了從機(jī)地址,最低位(LSB)是第8 位,它決定了傳輸?shù)?nbsp;方向。第一個(gè)字節(jié)的最低位是“0”,表示主機(jī)會(huì)寫(xiě)信息到被選中的從機(jī);“1”表示主機(jī)會(huì)向從機(jī)讀信息,當(dāng)發(fā)送了一個(gè)地址后,系統(tǒng)中的每個(gè)器件都在起始條件后將頭7 位與它自己的地址比較,如果一樣,器件會(huì)判定它被主機(jī)尋址,至于是從機(jī)接收器還是從機(jī)發(fā)送器,都由R/W 位決定的哦。
普通的和帶重復(fù)開(kāi)始條件的7位地址格式
10位
10位尋址和7 位尋址兼容,而且可以結(jié)合使用。
10位尋址采用了保留的1111XXX 作為起始條件(S),或重復(fù)起始條件(Sr )的后第一個(gè)字節(jié)的頭7 位。
10 位尋址不會(huì)影響已有的7 位尋址,有7 位和10 位地址的器件可以連接到相同的I2C 總線。它們都能用于標(biāo)準(zhǔn)模式(F/S)和高速模式(Hs)系統(tǒng)。
I2C總線10位地址格式
保留地址位1111XXX 有8 個(gè)組合,但是只有4 個(gè)組合11110XX 用于10 位尋址,剩下的4個(gè)組合11111XX 保留給后續(xù)增強(qiáng)的I2C 總線。
10 位從機(jī)地址是由在起始條件(S) 或重復(fù)起始條件(Sr )后的頭兩個(gè)字節(jié)組成。
第一個(gè)字節(jié)的頭7 位是11110XX 的組合,其中最后兩位(XX) 是10 位地址的兩個(gè)最高位(MSB)。
第一個(gè)字節(jié)的第8 位是R/W 位,決定了傳輸?shù)姆较?,第一個(gè)字節(jié)的最低位是“0”表示主機(jī)將寫(xiě)信息到選中的從機(jī),“1 ”表示主機(jī)將向從機(jī)讀信息。
如果R/W 位是“0 ”,則第二個(gè)字節(jié)是10 位從機(jī)地址剩下的8 位;如果R/W 位是“1” 則下一個(gè)字節(jié)是從機(jī)發(fā)送給主機(jī)的數(shù)據(jù)。
快速模式
快速模式器件可以在400kbit/s 下接收和發(fā)送。最小要求是:它們可以和400kbit/s 傳輸同步,可以延長(zhǎng)SCL 信號(hào)的低電平周期來(lái)減慢傳輸??焖倌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) 和串行時(shí)鐘(SCL )信號(hào)的時(shí)序;
3、快速模式器件的輸入有抑制毛刺的功能,SDA 和SCL輸入有施密特觸發(fā)器;
4、快速模式器件的輸出緩沖器對(duì)SDA 和SCL 信號(hào)的下降沿有斜率控制功能;
5、如果快速模式器件的電源電壓被關(guān)斷,SDA 和SCL 的I/O 管腳必須懸空,不能阻塞總線;
6、連接到總線的外部上拉器件必須調(diào)整以適應(yīng)快速模式I2C 總線更短的最大允許上升時(shí)間。對(duì)于負(fù)載最大是200pF 的總線,每條總線的上拉器件可以是一個(gè)電阻,對(duì)于負(fù)載在200pF~400pF 之間的總線,上拉器件可以是一個(gè)電流源(最大值3mA )或者是一個(gè)開(kāi)關(guān)電阻電路。
高速模式
高速模式(Hs 模式)器件對(duì)I2C 總線的傳輸速度有具大的突破。Hs 模式器件可以在高達(dá)3.4Mbit/s 的位速率下傳輸信息,而且保持完全向下兼容快速模式或標(biāo)準(zhǔn)模式(F/S 模式)器件,它們可以在一個(gè)速度混合的總線系統(tǒng)中雙向通訊。
Hs 模式傳輸除了不執(zhí)行仲裁和時(shí)鐘同步外,與F/S 模式系統(tǒng)有相同的串行總線協(xié)議和數(shù)據(jù)格式。
高速模式下I2C 總線規(guī)范如下:
1、Hs 模式主機(jī)器件有一個(gè)SDAH 信號(hào)的開(kāi)漏輸出緩沖器和一個(gè)在SCLH 輸出的開(kāi)漏極下拉和電流源上拉電路。這個(gè)電流源電路縮短了SCLH 信號(hào)的上升時(shí)間,任何時(shí)候在Hs 模式,只有一個(gè)主機(jī)的電流源有效;
2、在多主機(jī)系統(tǒng)的Hs 模式中,不執(zhí)行仲裁和時(shí)鐘同步,以加速位處理能力。仲裁過(guò)程一般在前面用F/S 模式傳輸主機(jī)碼后結(jié)束;
3、Hs 模式主機(jī)器件以高電平和低電平是1:2 的比率產(chǎn)生一個(gè)串行時(shí)鐘信號(hào)。解除了建立和保持時(shí)間的時(shí)序要求;
4、可以選擇Hs 模式器件有內(nèi)建的電橋。在Hs 模式傳輸中,Hs 模式器件的高速數(shù)據(jù)(SDAH)和高速串行時(shí)鐘(SCLH )線通過(guò)這個(gè)電橋與F/S 模式器件的SDA 和SCL 線分隔開(kāi)來(lái)。減輕了SDAH 和SCLH 線的電容負(fù)載,使上升和下降時(shí)間更快;
5、Hs 模式從機(jī)器件與F/S 從機(jī)器件的唯一差別是它們工作的速度。Hs 模式從機(jī)在SCLH 和SDAH輸出有開(kāi)漏輸出的緩沖器。SCLH 管腳可選的下拉晶體管可以用于拉長(zhǎng)SCLH 信號(hào)的低電平,但只允許在Hs 模式傳輸?shù)捻憫?yīng)位后進(jìn)行;
6、Hs 模式器件的輸出可以抑制毛刺,而且SDAH 和SCLH 輸出有一個(gè)施密特觸發(fā)器;
7、Hs 模式器件的輸出緩沖器對(duì)SDAH 和SCLH 信號(hào)的下降沿有斜率控制功能。
常用念法
I2C(Inter-Integrated Circuit)是內(nèi)部整合電路的稱呼,是一種串行通訊總線,使用多主從架構(gòu),由飛利浦公司在1980年代為了讓主板、嵌入式系統(tǒng)或手機(jī)用以連接低速周邊裝置而發(fā)展。I2C的正確讀法為"I-squared-C" ,而"I-two-C"則是另一種錯(cuò)誤但被廣泛使用的讀法,在中國(guó)則多以"I方C"稱之。
在Wikipedia中的解釋也有“I-two-C”的說(shuō)法:I2C (Inter-Integrated Circuit, referred to as I-squared-C, I-two-C, or IIC)
內(nèi)容來(lái)自百科網(wǎng)