解讀I2C協議和讀寫流程
I2C具體包括以下幾部分內容
1、I2C協議
包括2條雙向序列線,一條資料線SDA,一條時鐘線SCL。
SDA傳輸資料是大端傳輸,每次傳輸8bit,即一位元組。
支援多主控(multimastering),任何時間點只能有一個主控。
總線上每個裝置都有自己的一個addr,共7個bit,廣播地址全0.
系統中可能有多個同種晶片,為此addr分為固定部分和可程式設計部份,細節視晶片而定,看datasheet。
2、I2C位傳輸
資料傳輸:SCL為高電平時,SDA線若保持穩定,那麼SDA上是在傳輸資料bit;
若SDA發生跳變,則用來表示一個會話的開始或結束(後面講)
資料改變:SCL為低電平時,SDA線才能改變傳輸的bit
3、I2C開始和結束訊號
開始訊號:SCL=1時,SDA由1->0,開始傳送資料。
結束訊號:SCL=1時,SDA由0->1,結束傳送資料。
4、I2C應答訊號
Master每傳送完8bit資料後等待Slave的ACK。
即在第9個clock,若從IC發ACK,SDA=0。
若沒有ACK,SDA=1,這會引起Master發生RESTART或STOP流程
5、I2C寫流程
寫暫存器的標準流程為:
- Master發起START
- Master傳送I2C addr(7bit)和w操作0(1bit),等待ACK
- Slave傳送ACK
- Master傳送reg addr(8bit),等待ACK
- Slave傳送ACK
- Master傳送data(8bit),即要寫入暫存器中的資料,等待ACK
- Slave傳送ACK
- 第6步和第7步可以重複多次,即順序寫多個暫存器
- Master發起STOP
6、I2C讀流程
讀暫存器的標準流程為:
10. Master傳送I2C addr(7bit)和w操作1(1bit),等待ACK
11. Slave傳送ACK
12. Master傳送reg addr(8bit),等待ACK
13. Slave傳送ACK
14. Master發起START
15. Master傳送I2C addr(7bit)和r操作1(1bit),等待ACK
16. Slave傳送ACK
17. Slave傳送data(8bit),即暫存器裡的值
18. Master傳送ACK
19. 第8步和第9步可以重複多次,即順序讀多個暫存器
---------- 愛生活,愛安卓,愛Linux ----------