i2c总线协议简介
文章目錄
- 1.簡介
- 2.I2C總線時序圖
- 2.1 起始位
- 2.2 停止位
- 2.3 數據傳輸
- 2.4 地址幀/讀寫位/ACK位
- 2.5 空閑狀態
- 2.6 應答信號
- 3.I2C寫時序
- 4.I2C讀時序
- 5.I2C的優缺點
1.簡介
I2C 是很常見的一種總線協議, I2C 是 NXP 公司設計的, I2C 使用兩條線在主控制器和從機之間進行數據通信。一條是 SCL(串行時鐘線),另外一條是 SDA(串行數據線),由于不接上拉電阻,這兩個引腳為懸空狀態,由于懸空狀態引腳的電平是無法確定的,所以這兩條數據線需要接上拉電阻,一般是4.7K,總線空閑的時候SCL 和 SDA都處于高電平。 I2C 總線標準模式下速度可以達到 100Kb/S,快速模式下可以達到 400Kb/S。 I2C 總線工作是按照一定的協議來運行的,I2C 是支持多從機的,也就是一個 I2C 控制器下可以掛多個 I2C 從設備,這些不同的 I2C從設備有不同的器件地址,這樣 I2C 主控制器就可以通過 I2C 設備的器件地址訪問指定的 I2C設備 了,一個 I2C 總線連接多個 I2C 設備,如圖
2.I2C總線時序圖
2.1 起始位
I2C開始通信的標志,主機通過這個標志告訴從機要開始進行通信了,當SCL為高電平,SDA出現下將沿時表示起始位
2.2 停止位
I2C通信結束的標志,當SCL為高電平,SDA出現上升沿時表示停止位
2.3 數據傳輸
I2C數據總線傳輸要保證在SCL為高電平時,SDA數據穩定,所以SDA上數據變化只能在SCL為低電平時
2.4 地址幀/讀寫位/ACK位
地址幀:這是一個 8 位的數據,其中高 7 位是設備地址,最后 1 位是讀寫位,為1 的話表示這是一個讀操作,為 0 的話表示這是一個寫操作
讀/寫位:0:低電平,主設備向從設備寫數據,1:高電平從機讀數據
ACK:消息的每一個幀都有一個確認位,如果設備接收到了地址幀或者數據幀,都會給發送設備返回一個ACK
2.5 空閑狀態
當IIC總線的數據線SDA和時鐘線SCL兩條信號線同時處于高電平時,規定為總線的空閑狀態。此時各個器件的輸出級場效應管均處在截止狀態,即釋放總線,由兩條信號線各自的上拉電阻把電平拉高
2.6 應答信號
發送器每發送一個字節(8個bit),就在時鐘脈沖9期間釋放數據線,由接收器反饋一個應答信號。
應答信號為低電平時,規定為有效應答位(ACK,簡稱應答位),表示接收器已經成功地接收了該字節;
應答信號為高電平時,規定為非應答位(NACK),一般表示接收器接收該字節沒有成功
接收器在第9個時鐘脈沖之前的低電平期間將數據線SDA拉低,并且確保在該時鐘的高電平期間為穩定的低電平,發送一個ACK信號, 如果接收器是主機端,則在它收到最后一個字節后,發送一個NACK信號,以通知被控發送器結束數據發送,并釋放數據線SDA,以便主機端發送一個停止信號P
3.I2C寫時序
主機向從機寫,紅色部分表示主機發送,藍色部分表示從機發送。A表示應答,NA表示非應答(高電平)。S表示起始信號,P表示終止信號
1.開始信號:在SCL從高電平切換為低電平之前,主設備通過將SDA從高電平切換到低電平,啟動信號與停止信號始終是由主設備控制產生的
2.主設備向每個從設備發送要與之通信的從設備的7位或10位地址,通過發送具體的設備地址來決定要訪問哪個I2C設備,這是一個8位的數據,其中高8位是設備地址,最后1位是讀寫位,1表示讀操作,0表示寫操作
3.每一個從設備會根據主設備發過來的地址與自身的地址做比較,如果地址匹配,那么從設備會將SDA拉低來返回ACK應答信號,地址不匹配時,從設備會將SDA拉高,在從設備沒有將SDA拉低會將Master視為超時,將放棄數據傳送,發送“Stop”
4.重新發送開始信號
5.主機發送要寫入的叢機的寄存器地址
6.從機發送ACK信號
7.發送要寫入寄存器的數據幀,傳輸完每個數據幀后,即8位數據,主機將SDA拉高,等待從機將SDA拉低,即返回ACK,以確認已成功接收到該幀
9.結束信號:主設備將SCL切換為高電平,再將SDA切換為高電平,從而向從設備發送停止信號
4.I2C讀時序
讀時序主要分為四個大步驟:1.發送設備地址。2.發送要讀取的寄存器值,3.重新發送設備地址,4.I2C 從設備輸出要
讀取的寄存器值
1.主機發送起始信號
2.主機發送要讀寫的從設備地址
3.讀寫控制位,因為是向 I2C 從設備發送數據,因此是寫信號
4.從機發送 ACK 應答信號
5.重新發送start信號
6.主機發送要讀取的寄存器地址
7.從機發送的 ACK 應答信號
8.重新發送 START 信號
9.重新發送要讀取的 I2C 從設備地址
10.讀寫控制位,這里是讀信號,表示接下來是從 I2C 從設備里面讀取數據
11.從機發送的 ACK 應答信號
12.從 I2C 器件里面讀取數據
13.在讀到最后8位數據時,主機要將SDA置1,主機發出 NO ACK 信號,表示讀取完成,不需要從機再發送 ACK 信號了
14.主機發出 STOP 信號,停止 I2C 通信
注意:SCL一直由主機端控制,SDA依照數據傳送的方向,讀數據時由從機控制SDA,寫數據時由主機控制SDA。當8位數據傳送完畢之后,應答位或者否應答位的SDA控制權與數據位傳送時相反
5.I2C的優缺點
優點:僅使用兩根信號線,支持多個主設備和多個從設備,ACK / NACK位用于確認每個幀都已成功傳輸,硬件沒有UART復雜
缺點:數據傳輸速率比SPI慢,數據幀的大小限制為8位,硬件設計比SPI復雜
總結
- 上一篇: layout_gravity 和 gra
- 下一篇: [转载]《STL源码剖析》阅读笔记之 迭