I2C(Inter-Integrated Circuit)總線是一種用于連接微控制器和各種外圍設(shè)備的通信協(xié)議。它使用兩條線:串行數(shù)據(jù)線(SDA)和串行時(shí)鐘線(SCL),實(shí)現(xiàn)了設(shè)備之間的簡(jiǎn)單、高效通信。以下是I2C總線數(shù)據(jù)包結(jié)構(gòu)的詳解:
一、I2C總線數(shù)據(jù)包的基本組成
I2C總線上的數(shù)據(jù)傳輸以數(shù)據(jù)包為單位進(jìn)行,每個(gè)數(shù)據(jù)包包含起始信號(hào)、設(shè)備地址、數(shù)據(jù)傳輸方向位、數(shù)據(jù)字節(jié)以及應(yīng)答信號(hào)(ACK/NACK)等部分。
- 起始信號(hào)(S) :
- 起始信號(hào)標(biāo)志著數(shù)據(jù)傳輸?shù)拈_(kāi)始。當(dāng)SCL為高電平時(shí),SDA由高電平向低電平跳變,即產(chǎn)生起始信號(hào)。
- 所有連接到I2C總線的設(shè)備都會(huì)檢測(cè)到起始信號(hào),并準(zhǔn)備接收后續(xù)的數(shù)據(jù)。
- 設(shè)備地址 :
- 緊接著起始信號(hào)的是設(shè)備地址。I2C總線上的每個(gè)設(shè)備都有一個(gè)唯一的地址,用于區(qū)分不同的設(shè)備。
- 設(shè)備地址可以是7位或10位,但在實(shí)際應(yīng)用中,7位地址更為常見(jiàn)。
- 設(shè)備地址后面緊跟著一個(gè)數(shù)據(jù)傳輸方向位,用于指示后續(xù)的數(shù)據(jù)傳輸方向。該位為0時(shí)表示寫操作,為1時(shí)表示讀操作。
- 數(shù)據(jù)字節(jié) :
- 數(shù)據(jù)以字節(jié)為單位進(jìn)行傳輸,每個(gè)字節(jié)包含8位數(shù)據(jù)。
- 在傳輸每個(gè)字節(jié)時(shí),主設(shè)備在SCL的每個(gè)時(shí)鐘周期內(nèi)將一位數(shù)據(jù)放置在SDA線上。數(shù)據(jù)從高位到低位依次傳輸。
- 應(yīng)答信號(hào)(ACK/NACK) :
- 每傳輸完一個(gè)字節(jié)后,接收設(shè)備會(huì)返回一個(gè)應(yīng)答信號(hào)。
- 應(yīng)答信號(hào)為低電平時(shí)表示應(yīng)答(ACK),表示接收設(shè)備已正確接收到數(shù)據(jù),并準(zhǔn)備接收下一個(gè)字節(jié)。
- 應(yīng)答信號(hào)為高電平時(shí)表示非應(yīng)答(NACK),表示接收設(shè)備無(wú)法接收更多數(shù)據(jù)或數(shù)據(jù)傳輸出現(xiàn)錯(cuò)誤。
二、I2C總線數(shù)據(jù)包的傳輸過(guò)程
- 寫操作 :
- 主設(shè)備發(fā)送起始信號(hào)。
- 主設(shè)備發(fā)送從設(shè)備地址和數(shù)據(jù)傳輸方向位(寫操作)。
- 從設(shè)備確認(rèn)地址匹配后返回應(yīng)答信號(hào)。
- 主設(shè)備發(fā)送數(shù)據(jù)字節(jié)。
- 從設(shè)備接收數(shù)據(jù)字節(jié)并返回應(yīng)答信號(hào)。
- 重復(fù)上述步驟,直到所有數(shù)據(jù)傳輸完畢。
- 主設(shè)備發(fā)送停止信號(hào),標(biāo)志著數(shù)據(jù)傳輸?shù)慕Y(jié)束。
- 讀操作 :
- 主設(shè)備發(fā)送起始信號(hào)。
- 主設(shè)備發(fā)送從設(shè)備地址和數(shù)據(jù)傳輸方向位(讀操作)。
- 從設(shè)備確認(rèn)地址匹配后返回應(yīng)答信號(hào)。
- 從設(shè)備發(fā)送數(shù)據(jù)字節(jié)。
- 主設(shè)備接收數(shù)據(jù)字節(jié)并返回應(yīng)答信號(hào)(如果需要繼續(xù)接收數(shù)據(jù))或非應(yīng)答信號(hào)(如果不需要繼續(xù)接收數(shù)據(jù))。
- 重復(fù)上述步驟,直到所有數(shù)據(jù)傳輸完畢。
- 主設(shè)備發(fā)送停止信號(hào),標(biāo)志著數(shù)據(jù)傳輸?shù)慕Y(jié)束。
三、I2C總線數(shù)據(jù)包的復(fù)合格式
在實(shí)際應(yīng)用中,I2C通信更常用的是復(fù)合格式,即在一次通信過(guò)程中包含多次起始信號(hào)和停止信號(hào)。這種格式允許主設(shè)備在一次通信中訪問(wèn)多個(gè)從設(shè)備或進(jìn)行復(fù)雜的讀寫操作。
例如,主設(shè)備可以先向一個(gè)從設(shè)備發(fā)送一個(gè)寄存器地址,然后讀取該寄存器的值。在這個(gè)過(guò)程中,主設(shè)備會(huì)先發(fā)送起始信號(hào)、從設(shè)備地址和寫操作方向位,然后發(fā)送寄存器地址。接著,主設(shè)備會(huì)再次發(fā)送起始信號(hào)、從設(shè)備地址和讀操作方向位,然后從設(shè)備會(huì)返回寄存器的值。最后,主設(shè)備發(fā)送停止信號(hào)結(jié)束通信。
-
微控制器
+關(guān)注
關(guān)注
48文章
7658瀏覽量
152157 -
通信協(xié)議
+關(guān)注
關(guān)注
28文章
916瀏覽量
40452 -
I2C總線
+關(guān)注
關(guān)注
8文章
406瀏覽量
61185 -
數(shù)據(jù)包
+關(guān)注
關(guān)注
0文章
267瀏覽量
24513
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
I2C總線通信原理 如何設(shè)計(jì)I2C總線電路
I2C總線的優(yōu)缺點(diǎn)分析
I2C總線與Arduino的接口示例
I2C總線的工作模式介紹
I2C總線協(xié)議詳細(xì)解析
I2C總線故障排除技巧
I2C總線與單片機(jī)的連接
I2C總線數(shù)據(jù)傳輸速度要求
I2C總線應(yīng)用實(shí)例分析
I2C總線與SPI總線的比較
I2C總線上拉電阻阻值如何確定?
![<b class='flag-5'>I2C</b><b class='flag-5'>總線</b>上拉電阻阻值如何確定?](https://file.elecfans.com/web2/M00/50/DA/pYYBAGLH6TyAB71EAAAPQ7KgtYA038.png)
I2C從站地址數(shù)據(jù)包似乎未被SlaveHandleAddress占用,為什么?
I2C總線物理拓?fù)?b class='flag-5'>結(jié)構(gòu)
![<b class='flag-5'>I2C</b><b class='flag-5'>總線</b>物理拓?fù)?b class='flag-5'>結(jié)構(gòu)</b>](https://file1.elecfans.com/web2/M00/C4/77/wKgZomXzuxOAa4PXAAAdbb9rJig525.png)
評(píng)論