1. 程式人生 > 其它 >I2C通訊原理概述

I2C通訊原理概述

通訊協議篇——I2C

1.簡介

I2C(Inter-Integrated Circuit)是一種序列通訊匯流排,總線上可以掛多個裝置,可實現同步半雙工通訊

2.原理

通訊方式

I2C通訊屬於序列通訊,使用序列資料線SDA和序列時鐘線SCL兩線實現同步半雙工通訊。

同步通訊和非同步通訊的區別:

1、非同步通訊中的接收方並不知道資料什麼時候會到達,收發雙方可以有各自自己的時鐘。傳送方傳送的時間間隔可以不均,接收方是在資料的起始位和停止位的幫助下實現資訊同步的。這種傳輸通常是很小的分組,比如一個字元為一組,為這個組配備起始位和結束位。所以這種傳輸方式的效率是比較低的,畢竟額外加入了很多的輔助位作為負載,常用在低速的傳輸中。
2、同步通訊中雙方使用頻率一致的時鐘 ,它的分組相比非同步通訊則大得多,稱為一個數據幀,通過獨特的bit串作為啟停標識。傳送方要以固定的節奏去傳送資料,而接收方要時刻做好接收資料的準備,識別到前導碼後馬上要開始接收資料了。同步這種方式中因為分組很大,很長一段資料才會有額外的輔助位負載,所以效率更高,更加適合對速度要求高的傳輸,當然這種通訊對時序的要求也更高。

I2C通訊中,主機通過時鐘線SCL傳送時鐘訊號,通過資料線SDA傳送資料(包括從機地址、指令、資料包等),在傳送完一幀資料後,需要等待從機的響應,才能繼續傳送下一幀資料,因此I2C屬於同步通訊。

I2C通訊中,資料在一根資料線SDA上傳輸,同一時刻資料傳輸的方向只能是單向的,從A到B或者從B到A;通過切換傳輸方向從而實現雙向通訊,因此I2C屬於半雙工通訊。

資料格式

I2C通訊的資料包大小為8bit,主要有三類——指令、位元組地址、資料。資料傳輸時,按照高位在前,低位在後的順序(即MSB First,LSB Last)。

I2C通訊通過時鐘線SCL和資料線SDA確定幾種通訊狀態——空閒狀態、啟動訊號、停止訊號、資料位傳輸、應答訊號。

空閒狀態
當I2C匯流排的SDA和SCL兩條訊號線同時處於高電平時,規定為匯流排的空閒狀態。此時各個器件的輸出級場效電晶體均處在截止狀態,即釋放匯流排,由兩條訊號線各自的上拉電阻把電平拉高。

啟動訊號
在時鐘線SCL保持高電平期間,資料線SDA上的下降沿,定義為I2C匯流排的啟動訊號,它標誌著一次資料傳輸的開始。啟動訊號是由主機建立的,在建立該訊號之前,I2C匯流排必須處於空閒狀態。

停止訊號
在時鐘線SCL保持高電平期間,資料線SDA上的上升沿,定義為I2C匯流排的停止訊號,它標誌著一次資料傳輸的終止。停止訊號是由主機建立的,建立該訊號之後,I2C匯流排將返回空閒狀態。

資料位傳輸
在I2C通訊中,時鐘線SCL上的每一個時鐘,同步對應著資料線SDA上的一位資料。即在SCL序列時鐘的配合下,在SDA上逐位地序列傳送每一位資料。進行資料傳送時,在SCL是高電平期間,SDA上的電平必須保持穩定,低電平為資料0,高電平為資料1。只有在SCL為低電平期間,才允許SDA上的電平改變狀態。

應答訊號
I2C總線上的所有資料都是以8bit位元組傳輸的,傳送器每傳送一個位元組,就在第9個時鐘開始時釋放資料線,由接收器反饋一個應答訊號。應答訊號為低電平時,規定為有效應答位(ACK),表示接收器已經成功地接收了該位元組;應答訊號為高電平時,規定為非應答位(NACK),一般表示接收器接收該位元組沒有成功。對於反饋有效應答位ACK的要求是,接收器在第9個時鐘脈衝之前的低電平期間將SDA線拉低,並且確保在該時鐘的高電平期間為穩定的低電平。
如果接收器是主控器,則在它收到最後一個位元組後,傳送一個NACK訊號,以通知被控傳送器結束資料傳送,並釋放SDA線,以便主控接收器傳送一個停止訊號。

操作時序

I2C裝置的操作時序有四種,分別為寫單個儲存位元組,寫多個儲存位元組,讀單個儲存位元組和讀多個儲存位元組。操作時序如下圖:

具體通訊過程
以寫單個儲存位元組這一操作為例,介紹I2C通訊的具體流程:

​ 初始狀態:SCL、SDA都為高電平,匯流排處於空閒狀態;

→啟動訊號:在SCL為高電平時,SDA由高變低,產生下降沿,此時I2C通訊開始啟動;

→傳送7位從機地址和1位讀寫指令:按位傳輸,按照高位在前、低位在後的順序,且遵循SCL高電平時SDA上的資料保持不變,SCL低電平時SDA上的資料發生改變的原則,每個時鐘脈衝傳送一位地址資料;

→接收響應:I2C通訊中,每傳送完8bit資料,會接收1bit響應;此時,主機先把資料線SDA釋放,然後在第9個時鐘脈衝的高電平期間讀取SDA上的應答訊號,0代表ACK訊號,1代表NACK訊號;只有接收到ACK訊號,才繼續之後的操作,否則重新開始通訊過程;

→傳送8位位元組地址:同上;

→接收響應:同上;

→寫入8位資料:同上;

→接收響應:同上;

→停止訊號:在SCL為高電平時,SDA由低變高,產生上升沿,此時I2C通訊結束。

其他三種操作的具體流程是類似的。

標準介面
————————————————
版權宣告:本文為CSDN博主「YongxiangG」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處連結及本宣告。
原文連結:https://blog.csdn.net/weixin_43664511/article/details/103401749