I2C通信

借鑒:https://blog.csdn.net/qq_29344757/article/details/76520378

1. 物理層

????????I2C通訊系統(tǒng)接線圖如下:

? ??

????????SCL總線:控制線

? ? ? ? SDA總線:數(shù)據(jù)線

????????(1) 在I2C通訊總線上,可連接多個(gè)I2C通訊設(shè)備,支持多個(gè)通訊主機(jī)和多個(gè)通訊從機(jī)

????????(2) I2C通訊只需要兩條雙向總線:串行數(shù)據(jù)線(SDA),串行時(shí)鐘線(SCL)。數(shù)據(jù)線用于傳輸數(shù)據(jù),時(shí)鐘線用于同步數(shù)據(jù)收發(fā)

????????(3) 每個(gè)連接到總線的設(shè)備都有一個(gè)獨(dú)立的地址,主機(jī)正是利用該地址對(duì)設(shè)備進(jìn)行訪問

????????(4) SDA和SCL總線都需要接上上拉電阻,當(dāng)總線空閑時(shí),兩根線均為高電平。連接到總線上的任意器件輸出低電平都會(huì)將總線信號(hào)拉低。即各器件的SDA和SCL都是線與的關(guān)系

????????(5) 多個(gè)主機(jī)同時(shí)使用總線時(shí),需要用仲裁方式?jīng)Q定哪個(gè)設(shè)備占用總線,不然數(shù)據(jù)將會(huì)產(chǎn)生沖突

????????(6) 串行的8位雙向數(shù)據(jù)傳輸位速率在標(biāo)準(zhǔn)模式下可達(dá)100kbps,快速模式下可達(dá)400kbps,高速模式下可達(dá)3.4Mbps(目前大多數(shù)I2C設(shè)備還不支持高速)

2. 協(xié)議層

????????協(xié)議層規(guī)約了通訊的起始、停止信號(hào),數(shù)據(jù)有效性、響應(yīng)、沖裁同步、地址廣播等。

????????在SCL線為高電平期間,SDA線由高電平向低電平轉(zhuǎn)換表是起始信號(hào)


2.1 通訊的起始信號(hào)/結(jié)束信號(hào)
????????在SCL線為高電平期間,SDA線由低電平向高電平轉(zhuǎn)換表是結(jié)束信號(hào)。


? ??起始/結(jié)束信號(hào)都是由主機(jī)發(fā)出的,在起始信號(hào)產(chǎn)生后,總線就處于被占用的狀態(tài);在結(jié)束信號(hào)產(chǎn)生后,總線就處于空閑狀態(tài)。

需要注意的兩點(diǎn):

????????(1) 接收器件接收到一個(gè)完整的數(shù)據(jù)字節(jié)后,可能需要完成一些其他工作,如處理內(nèi)部接收中斷服務(wù)函數(shù)等,這就無法立即接收下一字節(jié)的數(shù)據(jù),這時(shí)接收器件可將SCL線拉成低電平,從而使得主機(jī)處于等待狀態(tài)。直至接收器件準(zhǔn)備好接收下一字節(jié)數(shù)據(jù)時(shí)再釋放SCL線使之為高電平。

????????(2) 連接到I2C總線上的器件,若具有I2C總線控制器那么很硬件會(huì)自動(dòng)檢測(cè)到起始、結(jié)束信號(hào),而對(duì)于不具備I2C總線控制器的器件(單片機(jī))來說,需要在每個(gè)時(shí)鐘周期內(nèi)保證對(duì)數(shù)據(jù)線SDA采樣兩次,捕獲是否接收到起始/結(jié)束信號(hào)。

2.2 數(shù)據(jù)傳輸


? ? ? ? (1)通過每個(gè)設(shè)備上的地址,進(jìn)行數(shù)據(jù)信號(hào)的處理。

? ? ? ? ?(2)結(jié)束由主機(jī)發(fā)送信號(hào),若需要繼續(xù)新的數(shù)據(jù)傳輸,則不產(chǎn)生結(jié)束信號(hào),而是發(fā)送起始信號(hào)對(duì)另一從機(jī)地址尋址

? ? ? ? ?(3)寫數(shù)據(jù)方向,主機(jī)-->從機(jī),數(shù)據(jù)包為8位,等待從機(jī)應(yīng)答信號(hào)(ACK),多字節(jié),重復(fù)此操作,最后主機(jī)發(fā)送停止信號(hào)結(jié)束。

? ? ? ? ? (4)讀數(shù)據(jù)方向,從機(jī)-->主機(jī),數(shù)據(jù)包為8位,等待從機(jī)應(yīng)答信號(hào)(ACK),多字節(jié),重復(fù)此操作,若為NACK,則數(shù)據(jù)傳輸結(jié)束。

? ? ? ? ? (5)實(shí)際I2C通訊采用的是讀寫復(fù)合的格式。傳輸過程中主機(jī)需要發(fā)出2次起始信號(hào):第一次傳輸主機(jī)通過從機(jī)地址找到從機(jī)設(shè)備,發(fā)送一段數(shù)據(jù),這個(gè)數(shù)據(jù)是從設(shè)備內(nèi)部寄存器或者存儲(chǔ)器地址;第二次傳輸是對(duì)該地址進(jìn)行讀/寫。主機(jī)要讀取從機(jī)數(shù)據(jù)時(shí),主機(jī)會(huì)釋放對(duì)SDA總線的控制,由從機(jī)控制SDA總線,主機(jī)負(fù)責(zé)接收信號(hào);主機(jī)要向從機(jī)設(shè)備寫數(shù)據(jù)時(shí),SDA由主機(jī)控制,從機(jī)負(fù)責(zé)接收信號(hào)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • IIC通信實(shí)驗(yàn) IIC簡介 I2C(Inter-Integrated Circuit)字面上的意思是集成電路之間,...
    btskyrmb閱讀 2,076評(píng)論 0 2
  • 做單片機(jī)開發(fā)時(shí)UART,SPI和I2C都是我們最經(jīng)常使用到的硬件接口,我收集了相關(guān)的具體材料對(duì)這三種接口進(jìn)行了詳細(xì)...
    梁睿坤閱讀 68,760評(píng)論 7 31
  • 在使用單片機(jī)的過程中,I2C 通信可以說是最被廣泛使用和采納的協(xié)議之一,采用 I2C 協(xié)議可以占用更少的資源,鏈接...
    noparkinghere閱讀 2,439評(píng)論 0 8
  • I2C總線是由Philips公司開發(fā)的一種簡單、雙向二線制同步串行總線。它只需要兩根線即可在連接于總線上的器件之間...
    WB莫遙燚閱讀 5,466評(píng)論 0 1
  • 先知先覺吃肉,后知后覺挨打 有一部分人總不知道自己的交易是怎么回事,糊里糊涂的就虧錢了,市場(chǎng)是透明的,只是你差了點(diǎn)...
    谷主新閱讀 215評(píng)論 2 1

友情鏈接更多精彩內(nèi)容