I2C通信原理

I2C組成及工作原理

I2C總線是PHLIPS公司推出的一種串行總線,是具備多主機(jī)系統(tǒng)所需的包括總線裁決和高低速器件同步功能的高性能串行總線。
I2C總線只有兩根雙向信號(hào)線臣嚣。一根是數(shù)據(jù)線SDA颅停,另一根是時(shí)鐘線SCL。


image.png

I2C總線通過(guò)上拉電阻接正電源具温。當(dāng)總線空閑時(shí)蚕涤,兩根線均為高電平。連到總線上的任一器件輸出的低電平铣猩,都將使總線的信號(hào)變低揖铜,即各器件的SDA及SCL都是線“與”關(guān)系。


image.png

每個(gè)接到I2C總線上的器件都有唯一的地址达皿。主機(jī)與其它器件間的數(shù)據(jù)傳送可以是由主機(jī)發(fā)送數(shù)據(jù)到其它器件天吓,這時(shí)主機(jī)即為發(fā)送器。由總線上接收數(shù)據(jù)的器件則為接收器峦椰。 在多主機(jī)系統(tǒng)中龄寞,可能同時(shí)有幾個(gè)主機(jī)企圖啟動(dòng)總線傳送數(shù)據(jù)。為了避免混亂汤功, I2C總線要通過(guò)總線仲裁物邑,以決定由哪一臺(tái)主機(jī)控制總線。

I2C總線數(shù)據(jù)傳送

一冤竹、數(shù)據(jù)位的有效性規(guī)定
I2C總線進(jìn)行數(shù)據(jù)傳送時(shí)拂封,時(shí)鐘信號(hào)為高電平期間,數(shù)據(jù)線上的數(shù)據(jù)必須保持穩(wěn)定鹦蠕,只有在時(shí)鐘線上的信號(hào)為低電平期間冒签,數(shù)據(jù)線上的高電平或低電平狀態(tài)才允許變化。


image.png

二钟病、起始和終止信號(hào)
SCL線為高電平期間萧恕,SDA線由高電平向低電平的變化表示起始信號(hào)刚梭;SCL線為高電平期間,SDA線由低電平向高電平的變化表示終止信號(hào)票唆。


image.png

起始和終止信號(hào)都是由主機(jī)發(fā)出的朴读,在起始信號(hào)產(chǎn)生后,總線就處于被占用的狀態(tài)走趋;在終止信號(hào)產(chǎn)生后衅金,總線就處于空閑狀態(tài)。
連接到I2C總線上的器件簿煌,若具有I2C總線的硬件接口氮唯,則很容易檢測(cè)到起始和終止信號(hào)。
接收器件收到一個(gè)完整的數(shù)據(jù)字節(jié)后姨伟,有可能需要完成一些其它工作惩琉,如處理內(nèi)部中斷服務(wù)等,可能無(wú)法立刻接收下一個(gè)字節(jié)夺荒,這時(shí)接收器件可以將SCL線拉成低電平瞒渠,從而使主機(jī)處于等待狀態(tài)。直到接收器件準(zhǔn)備好接收下一個(gè)字節(jié)時(shí)技扼,再釋放SCL線使之為高電平伍玖,從而使數(shù)據(jù)傳送可以繼續(xù)進(jìn)行。

由于某種原因從機(jī)不對(duì)主機(jī)尋址信號(hào)應(yīng)答時(shí)(如從機(jī)正在進(jìn)行實(shí)時(shí)性的處理工作而無(wú)法接收總線上的數(shù)據(jù))淮摔,它必須將數(shù)據(jù)線置于高電平私沮,而由主機(jī)產(chǎn)生一個(gè)終止信號(hào)以結(jié)束總線的數(shù)據(jù)傳送始赎。
如果從機(jī)對(duì)主機(jī)進(jìn)行了應(yīng)答和橙,但在數(shù)據(jù)傳送一段時(shí)間后無(wú)法繼續(xù)接收更多的數(shù)據(jù)時(shí),從機(jī)可以通過(guò)對(duì)無(wú)法接收的第一個(gè)數(shù)據(jù)字節(jié)的“非應(yīng)答”通知主機(jī)造垛,主機(jī)則應(yīng)發(fā)出終止信號(hào)以結(jié)束數(shù)據(jù)的繼續(xù)傳送魔招。
當(dāng)主機(jī)接收數(shù)據(jù)時(shí),它收到最后一個(gè)數(shù)據(jù)字節(jié)后五辽,必須向從機(jī)發(fā)出一個(gè)結(jié)束傳送的信號(hào)办斑。這個(gè)信號(hào)是由對(duì)從機(jī)的“非應(yīng)答”來(lái)實(shí)現(xiàn)的。然后杆逗,從機(jī)釋放SDA線乡翅,以允許主機(jī)產(chǎn)生終止信號(hào)。

I2C 數(shù)據(jù)幀格式
I2C總線上傳送的數(shù)據(jù)信號(hào)是廣義的罪郊,既包括地址信號(hào)蠕蚜,又包括真正的數(shù)據(jù)信號(hào)。
在起始信號(hào)后必須傳送一個(gè)從機(jī)的地址(7位)悔橄,第8位是數(shù)據(jù)的傳送方向位(R/T)靶累,用“0”表示主機(jī)發(fā)送數(shù)據(jù)(T)腺毫,“1”表示主機(jī)接收數(shù)據(jù)(R)。每次數(shù)據(jù)傳送總是由主機(jī)產(chǎn)生的終止信號(hào)結(jié)束挣柬。但是潮酒,若主機(jī)希望繼續(xù)占用總線進(jìn)行新的數(shù)據(jù)傳送,則可以不產(chǎn)生終止信號(hào)邪蛔,馬上再次發(fā)出起始信號(hào)對(duì)另一從機(jī)進(jìn)行尋址急黎。
在總線的一次數(shù)據(jù)傳送過(guò)程中,可以有以下幾種組合方式:
a侧到、主機(jī)向從機(jī)發(fā)送數(shù)據(jù)叁熔,數(shù)據(jù)傳送方向在整個(gè)傳送過(guò)程中不變


image.png

注:有陰影部分表示數(shù)據(jù)由主機(jī)向從機(jī)傳送,無(wú)陰影部分則表示數(shù)據(jù)由從機(jī)向主機(jī)傳送床牧。
A表示應(yīng)答荣回, A非表示非應(yīng)答(高電平)。S表示起始信號(hào)戈咳,P表示終止信號(hào)心软。
b、主機(jī)在第一個(gè)字節(jié)后著蛙,立即從從機(jī)讀數(shù)據(jù)


image.png

c删铃、在傳送過(guò)程中,當(dāng)需要改變傳送方向時(shí)踏堡,起始信號(hào)和從機(jī)地址都被重復(fù)產(chǎn)生一次猎唁,但兩次讀/寫方向位正好反相。
image.png

I2C總線尋址

I2C總線協(xié)議有明確的規(guī)定:采用7位的尋址字節(jié)(尋址字節(jié)是起始信號(hào)后的第一個(gè)字節(jié))顷蟆。
(1)尋址字節(jié)的位定義


image.png

D7~D1位組成從機(jī)的地址诫隅。D0位是數(shù)據(jù)傳送方向位,為“0”時(shí)表示主機(jī)向從機(jī)寫數(shù)據(jù)帐偎,為“1”時(shí)表示主機(jī)由從機(jī)讀數(shù)據(jù)逐纬。

主機(jī)發(fā)送地址時(shí),總線上的每個(gè)從機(jī)都將這7位地址碼與自己的地址進(jìn)行比較削樊,如果相同豁生,則認(rèn)為自己正被主機(jī)尋址,根據(jù)R/T位將自己確定為發(fā)送器或接收器漫贞。
從機(jī)的地址由固定部分和可編程部分組成甸箱。在一個(gè)系統(tǒng)中可能希望接入多個(gè)相同的從機(jī),從機(jī)地址中可編程部分決定了可接入總線該類器件的最大數(shù)目迅脐。如一個(gè)從機(jī)的7位尋址位有4位是固定位芍殖,3位是可編程位,這時(shí)僅能尋址8個(gè)同樣的器件仪际,即可以有8個(gè)同樣的器件接入到該I2C總線系統(tǒng)中围小。

典型信號(hào)模擬

為了保證數(shù)據(jù)傳送的可靠性昵骤,標(biāo)準(zhǔn)的I2C總線的數(shù)據(jù)傳送有嚴(yán)格的時(shí)序要求。I2C總線的起始信號(hào)肯适、終止信號(hào)变秦、發(fā)送“0”及發(fā)送“1”的模擬時(shí)序 :


image.png
(1)起始信號(hào)
Void I2CStart(void)
{       SDA = 1;
    SomeNop(  );
    SCL = 1;
    SomeNop(  );
    SDA = 0;
    SomeNop(  );
}

(2)終止信號(hào)
void I2cStop(void)
{
    SDA = 0;
    SomeNop(  );
    SCL = 1;
    SomeNop(  );
    SDA = 1;
    SomeNop(  );
}

與EEPROM通信過(guò)程

寫入過(guò)程:
AT24C系列E2PROM芯片地址的固定部分為1010,A2框舔、A1蹦玫、A0引腳接高、低電平后得到確定的3位編碼刘绣。形成的7位編碼即為該器件的地址碼樱溉。
單片機(jī)進(jìn)行寫操作時(shí),首先發(fā)送該器件的7位地址碼和寫方向位“0”(共8位纬凤,即一個(gè)字節(jié))福贞,發(fā)送完后釋放SDA線并在SCL線上產(chǎn)生第9個(gè)時(shí)鐘信號(hào)。被選中的存儲(chǔ)器器件在確認(rèn)是自己的地址后停士,在SDA線上產(chǎn)生一個(gè)應(yīng)答信號(hào)作為相應(yīng)挖帘,單片機(jī)收到應(yīng)答后就可以傳送數(shù)據(jù)了。
傳送數(shù)據(jù)時(shí)恋技,單片機(jī)首先發(fā)送一個(gè)字節(jié)的地址作為寫入器件的存儲(chǔ)區(qū)的首地址拇舀,收到存儲(chǔ)器器件的應(yīng)答后,單片機(jī)就逐個(gè)發(fā)送各數(shù)據(jù)字節(jié)蜻底,但每發(fā)送一個(gè)字節(jié)后都要等待應(yīng)答骄崩。
AT24C系列器件片內(nèi)地址在接收到每一個(gè)數(shù)據(jù)字節(jié)地址后自動(dòng)加1,在芯片的“一次裝載字節(jié)數(shù)”(不同芯片字節(jié)數(shù)不同)限度內(nèi)薄辅,只需輸入首地址要拂。裝載字節(jié)數(shù)超過(guò)芯片的“一次裝載字節(jié)數(shù)”時(shí),數(shù)據(jù)地址將“上卷”长搀,前面的數(shù)據(jù)將被覆蓋宇弛。
當(dāng)要寫入的數(shù)據(jù)傳送完后鸡典,單片機(jī)應(yīng)發(fā)出終止信號(hào)以結(jié)束寫入操作源请。寫入n個(gè)字節(jié)的數(shù)據(jù)格式 :


image.png

讀出過(guò)程
單片機(jī)先發(fā)送該器件的7位地址碼和寫方向位“0”(“偽寫”),發(fā)送完后釋放SDA線并在SCL線上產(chǎn)生第9個(gè)時(shí)鐘信號(hào)彻况。被選中的存儲(chǔ)器器件在確認(rèn)是自己的地址后谁尸,在SDA線上產(chǎn)生一個(gè)應(yīng)答信號(hào)作為回應(yīng)。
然后纽甘,再發(fā)一個(gè)字節(jié)的要讀出器件的存儲(chǔ)區(qū)的首地址良蛮,收到應(yīng)答后,單片機(jī)要重復(fù)一次起始信號(hào)并發(fā)出器件地址和讀方向位(“1”)悍赢,收到器件應(yīng)答后就可以讀出數(shù)據(jù)字節(jié)决瞳,每讀出一個(gè)字節(jié)货徙,單片機(jī)都要回復(fù)應(yīng)答信號(hào)。當(dāng)最后一個(gè)字節(jié)數(shù)據(jù)讀完后皮胡,單片機(jī)應(yīng)返回以“非應(yīng)答”(高電平)痴颊,并發(fā)出終止信號(hào)以結(jié)束讀出操作。


image.png

數(shù)據(jù)的寫操作:圖中演示了I2C連續(xù)寫數(shù)據(jù),兩個(gè)字節(jié)的連續(xù)寫入,更多字節(jié)同樣
image.png

數(shù)據(jù)的讀操作:在上圖中屡贺,可以認(rèn)為寫入了設(shè)備地址及寄存器地址蠢棱,再次重啟總線后,發(fā)送讀命令甩栈,連續(xù)讀取兩個(gè)字節(jié)泻仙,發(fā)送NACK,發(fā)送停止信號(hào);
image.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末量没,一起剝皮案震驚了整個(gè)濱河市玉转,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌殴蹄,老刑警劉巖冤吨,帶你破解...
    沈念sama閱讀 216,324評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異饶套,居然都是意外死亡漩蟆,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,356評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門妓蛮,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)怠李,“玉大人,你說(shuō)我怎么就攤上這事蛤克∞囫” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 162,328評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵构挤,是天一觀的道長(zhǎng)髓介。 經(jīng)常有香客問(wèn)我,道長(zhǎng)筋现,這世上最難降的妖魔是什么唐础? 我笑而不...
    開(kāi)封第一講書人閱讀 58,147評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮矾飞,結(jié)果婚禮上一膨,老公的妹妹穿的比我還像新娘。我一直安慰自己洒沦,他們只是感情好豹绪,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,160評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著申眼,像睡著了一般瞒津。 火紅的嫁衣襯著肌膚如雪蝉衣。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 51,115評(píng)論 1 296
  • 那天巷蚪,我揣著相機(jī)與錄音买乃,去河邊找鬼。 笑死钓辆,一個(gè)胖子當(dāng)著我的面吹牛剪验,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播前联,決...
    沈念sama閱讀 40,025評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼功戚,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了似嗤?” 一聲冷哼從身側(cè)響起啸臀,我...
    開(kāi)封第一講書人閱讀 38,867評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎烁落,沒(méi)想到半個(gè)月后乘粒,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,307評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡伤塌,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,528評(píng)論 2 332
  • 正文 我和宋清朗相戀三年灯萍,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片每聪。...
    茶點(diǎn)故事閱讀 39,688評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡旦棉,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出药薯,到底是詐尸還是另有隱情绑洛,我是刑警寧澤,帶...
    沈念sama閱讀 35,409評(píng)論 5 343
  • 正文 年R本政府宣布童本,位于F島的核電站真屯,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏穷娱。R本人自食惡果不足惜绑蔫,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,001評(píng)論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望鄙煤。 院中可真熱鬧晾匠,春花似錦、人聲如沸梯刚。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,657評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)亡资。三九已至澜共,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間锥腻,已是汗流浹背嗦董。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,811評(píng)論 1 268
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留瘦黑,地道東北人京革。 一個(gè)月前我還...
    沈念sama閱讀 47,685評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像幸斥,于是被迫代替她去往敵國(guó)和親匹摇。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,573評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容