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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM