本文主要介紹I2C總線的讀寫操作流程。
I2C總線的操作包括讀和寫,具體的操作流程如下:
1、主機發送數據(I2C寫)流程
I2C主機給從機寫數據的操作流程如下:
Master發起START;
Master發送I2C ADDR(7bit)和W操作0(1bit),等待ACK;
Slave發送ACK(ACK=0);
Master發送reg addr(8bit),等待ACK(該地址為雙方約定的需要寫入數據的首地址,實際使用中隨機寫入時可以沒有該地址數據);
Slave發送ACK;
Master收到Slave的ACK信號后開始發送第一個字節的數據(8bit),等待ACK;
Slave收到數據后發送ACK;
Master收到ACK后再發送下一個數據;
當Master發送完最后一個字節數據并收到Slave的ACK后,發起STOP。
★主機通過發送地址碼與對應的從機建立了通信關系,而掛接在總線上的其它從機雖然同時也收到了地址碼,但因為與其自身的地址不相符合,因此提前退出與主機的通信;
★主機的一次發送通信,其發送的數據數量不受限制。主機是通過STOP信號通知發送的結束,從機收到STOP信號后退出本次通信;
★主機的每一次發送后都是通過從機的ACK信號了解從機的接收狀況,如果應答錯誤則重發(一般重發次數可以設置,但次數太多會影響效率);
★實際測試時,ACK信號會有一個毛刺,是因為數據和ACK是不同的角色發出的(當主機發送數據時,從機返回ACK;當從機發送數據時,主機返回ACK),這樣ACK正好是方向切換的時候,毛刺的大小取決于主從之間的切換速度。
2、主機接收數據(I2C讀)流程
I2C主機讀取從機數據的操作流程如下:
Master發送START;
Master發送I2C ADDR(7bit)和R操作1(1bit),等待ACK;
Slave發送ACK;
Master發送reg addr(8bit),等待ACK;
Slave發送ACK;
Master發起START;
Master發送I2C addr(7bit)和r操作1(1bit),等待ACK;
Slave發送ACK;
Slave發送ACK后,緊接著向Master發送數據;
Master收到數據后發送ACK;
Slave接收到ACK后再向Master發送下一個數據;
當Master完成接收數據后,向Slave發送一個非應答信號(NAK=1),從機收到非應答信號后停止發送數據;
Master發送非應答信號后,再發送一個STOP信號。
★主機所接收數據的數量是由主機自身決定,當發送“非應答信號/A”時從機便結束傳送并釋放總線(非應答信號的兩個作用:前一個數據接收成功,從機不再發送數據)。當從機收到NAK信號后如果沒有停止信號,則從機會重發上一字節數據。
3、讀寫指定地址的方式
I2C讀寫指定地址有以下幾種方式:
在從器件地址后面直接跟需要讀寫的寄存器首地址,然后直接跟數據,最后通過停止信號結束此次讀寫。
主從器件約定讀寫指令,在從器件地址后面直接跟讀寫指令,然后再跟需要讀寫的寄存器首地址,然后直接跟數據。
在發送完從器件地址后直接跟需要讀寫的寄存器地址,然后再通過重復開始信號(后跟從機地址)進行讀寫操作(數據直接寫入或者讀取相應的寄存器)。
★所有讀寫操作,都不會限定數據的長度,讀寫數據的長度由主機決定。不需要讀寫數據了就發送STOP信號。
4、復合傳輸實現方式
在傳輸過程中改變方向,開始條件和從機地址都要重復,而讀寫bit要取反。如果主機發送一個重復的開始條件,那么它在這之前要發送一個NAK。
★復合模式可以在比如控制串行寄存器時用到。在第一個數據字節時一定要寫寄存器內部的地址。開始條件和從地址重復后,數據就開始傳輸了。
★自動增加或減少之前訪問的寄存器地址都由設備的設計者決定。
★兼容I2C總線的設備在接收到開始條件或重復開始條件時都一定要重啟它們的總線邏輯,即使開始條件都不是正確的格式,它們都期望發送從機地址。
★開始條件后馬上跟著一個終止條件是不合法的格式。
以上就是針對I2C總線的主機發送、主機接收、讀寫指定地址數據、符合傳輸方式的操作流程介紹。
-
I2C總線
+關注
關注
8文章
389瀏覽量
60844
發布評論請先 登錄
相關推薦
評論