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ù)拈_始。當(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位地址更為常見。
- 設(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è)備無法接收更多數(shù)據(jù)或數(shù)據(jù)傳輸出現(xiàn)錯(cuò)誤。
二、I2C總線數(shù)據(jù)包的傳輸過程
- 寫操作 :
- 主設(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ù)合格式,即在一次通信過程中包含多次起始信號(hào)和停止信號(hào)。這種格式允許主設(shè)備在一次通信中訪問多個(gè)從設(shè)備或進(jìn)行復(fù)雜的讀寫操作。
例如,主設(shè)備可以先向一個(gè)從設(shè)備發(fā)送一個(gè)寄存器地址,然后讀取該寄存器的值。在這個(gè)過程中,主設(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文章
8375瀏覽量
164559 -
通信協(xié)議
+關(guān)注
關(guān)注
28文章
1092瀏覽量
42151 -
I2C總線
+關(guān)注
關(guān)注
8文章
417瀏覽量
63353 -
數(shù)據(jù)包
+關(guān)注
關(guān)注
0文章
270瀏覽量
25594
發(fā)布評(píng)論請(qǐng)先 登錄
I2C總線-通信線纜長(zhǎng)度的影響及改進(jìn)措施
探索PCF8584:I2C總線控制器的卓越之選
P82B715:I2C總線擴(kuò)展的得力助手
基于FPGA的I2C控制模塊設(shè)計(jì)
AS32X601的I2C模塊操作EEPROM詳解
TCA9517-Q1電平轉(zhuǎn)換I2C總線中繼器:設(shè)計(jì)與應(yīng)用詳解
I2C的總線協(xié)議
I2C死鎖的問題
深入剖析I2C協(xié)議
I2C總線通信,為什么要進(jìn)行電氣隔離?
嵌入式學(xué)習(xí)-飛凌嵌入式ElfBoard ELF 1板卡-I2C設(shè)備驅(qū)動(dòng)之Linux下的I2C驅(qū)動(dòng)簡(jiǎn)介
飛凌嵌入式ElfBoard ELF 1板卡-I2C設(shè)備驅(qū)動(dòng)之Linux下的I2C驅(qū)動(dòng)簡(jiǎn)介
是德DSOX4034A示波器I2C總線信號(hào)分析
I2C總線數(shù)據(jù)包結(jié)構(gòu)詳解
評(píng)論