I2C是inter-integrated circuit的縮寫(xiě),又名為T(mén)WI,只需要用兩條物理線(xiàn)進(jìn)行傳輸,分別命名為SDA和SCL,用于傳輸serial data和serial clock。I2C工作時(shí)分為主從工作模式,而在同總線(xiàn)上可以存在多個(gè)主機(jī)。每一個(gè)連接到總線(xiàn)的器件都可以通過(guò)唯一的地址與總線(xiàn)連接,主機(jī)控制主機(jī)為發(fā)送器模式或是接收器模式。多個(gè)主機(jī)控制時(shí)可以通過(guò)沖突檢測(cè)和仲裁防止數(shù)據(jù)被破壞。I2C總線(xiàn)有幾種不同速率的工作模式,標(biāo)準(zhǔn)模式的速率為100kbps,快速模式下速率為400kbps,在高速模式下速率可達(dá)到3.4Mbps。整理下I2C基本的傳輸方式。
數(shù)據(jù)發(fā)送過(guò)程
發(fā)送從起始到結(jié)束為一次完整發(fā)送過(guò)程,如圖所示一次完整的發(fā)送過(guò)程,起始后先發(fā)送地址信息,R/W表示寫(xiě)入或是讀取數(shù)據(jù),如果一次過(guò)程中,需要切換讀寫(xiě)操作時(shí),需要重新發(fā)送start。SDA線(xiàn)上的每個(gè)字節(jié)必須為8位,每次傳輸可以發(fā)送的字節(jié)數(shù)量不受限制,而每個(gè)字節(jié)后必須跟一個(gè)響應(yīng)位。從機(jī)在處理其他事件而不能接收數(shù)據(jù)時(shí),可以通過(guò)控制SCL保持低電平來(lái)等待數(shù)據(jù)接收,等到準(zhǔn)備好繼續(xù)傳輸時(shí),釋放SCL。在總線(xiàn)上每個(gè)模塊具有唯一的地址,當(dāng)然亦可以設(shè)計(jì)廣播地址,通知所有其他模塊。
啟動(dòng)和停止
當(dāng)I2C不工作時(shí),SDA和SCL一樣都處于高位HIGH,SCL保持為HIGH,SDA由HIGH變LOW時(shí)表示開(kāi)始傳輸,而SCL保持HIGH,SDA由LOW變?yōu)镠IGH時(shí)表示停止傳輸。Sr和S完全相同,差別只是第一次Start之后沒(méi)有進(jìn)行stop,再次啟動(dòng)Start。
數(shù)據(jù)產(chǎn)生
SDA上傳送的數(shù)據(jù)必須在時(shí)鐘高電平時(shí)保持穩(wěn)定,而數(shù)據(jù)的改變只有在SCL為低時(shí)進(jìn)行,而SCL由主機(jī)控制產(chǎn)生。
沖突仲裁
主機(jī)在總線(xiàn)空閑時(shí)候啟動(dòng)傳輸。而當(dāng)總線(xiàn)上有多個(gè)主機(jī)時(shí),可能產(chǎn)生同時(shí)啟動(dòng)的沖突,因此需要仲裁。仲裁方式是,當(dāng)SCL線(xiàn)是高電平時(shí),仲裁在SDA線(xiàn)發(fā)生 這樣在其他主機(jī)發(fā)送低電平時(shí)發(fā)送高電平的主機(jī)將斷開(kāi)它的數(shù)據(jù)輸出級(jí),因?yàn)榭偩€(xiàn)上的電平與它自己的電平不相同,總線(xiàn)上的電平總是在一個(gè)輸出為低時(shí)就為低。仲裁可以持續(xù)多位,當(dāng)丟失仲裁的主機(jī)同時(shí)具有從機(jī)功能時(shí),需要立即切換從機(jī)狀態(tài)。
從機(jī)掛起數(shù)據(jù)發(fā)送示例
-
接收器
+關(guān)注
關(guān)注
14文章
2441瀏覽量
71525 -
總線(xiàn)
+關(guān)注
關(guān)注
10文章
2817瀏覽量
87697 -
I2C
+關(guān)注
關(guān)注
28文章
1452瀏覽量
122236
原文標(biāo)題:帶你理解I2C總線(xiàn)數(shù)據(jù)傳輸方式
文章出處:【微信號(hào):gh_c472c2199c88,微信公眾號(hào):嵌入式微處理器】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論