1. 程式人生 > >通過例項來分析I2C基本通訊協議

通過例項來分析I2C基本通訊協議

本文旨在用最通俗易懂的方式。讓大家明確I2C通訊的過程到底是怎麼回事。 I2C起源於飛利浦公司的電視設計,但之後朝通用路線發展,各種電子設計都有機會用到I2C


總的來說,I2C能夠簡單歸納為,兩根線,一個時鐘線,一個數據線;一個總線上 ,一個主控 。多個 從裝置 。I2C的作用當然是用來資料傳輸,它的最大特點就是僅僅用了2根線,能夠完畢對總線上多個從裝置的有序通訊,這就依賴於其通訊協議了。 主控相當於I2C的大腦,每一次讀寫操作都必須是主控發起的。這樣就保證了多個從屬裝置間是無法直接通訊的,這樣就防止了僅有的2根線上資料傳輸發生混亂。


我們還是簡單回想一下《I2C 簡單介紹》中的 I2C 
匯流排的幾種訊號狀態
1. 空暇狀態: SDA 和  SCL 都為高電平。


2. 開始條件(S)SCL 為高電平時,SDA 由高電平向低電平跳變。開始傳送資料。

3. 結束條件(P)SCL 為高電平時,SDA 由低電平向高電平跳變,結束傳送資料。

4. 資料有效:在 SCL 的高電平期間,SDA 保持穩定,資料有效。

SDA 

的改變僅僅能發生在 SCL 的低電平期間。

5. ACK 訊號:資料傳輸的過程中,接收器件每接收一個位元組資料要產生一個 ACK 訊號,向傳送器件發出特定的低電平脈衝。表示已經收到資料。


  • 空暇狀態

當沒有資料須要讀寫時,大家風平浪靜,時鐘和資料線都是出於高電平狀態,可是當資料傳輸時,就必須有一個規則產生,那就是


  • 開始條件(S)
Start: 在clk為高的情況下,data由高變低為start。


  • 結束條件(P)
Stop:在clk為高的情況下。data由低變高是stop。         
  • 資料有效
僅僅有在 clk 為高的時候。資料才有效。

Clk為低。資料無效。




  • ACK 訊號
每個位元組完畢。都會有一個 ack ,不管由 master 還是 slave 發出。ack位是低電平,表示有應答,假設是高電平,表示無應答。



  • 讀寫協議
讀資料須要有offset。所以offset須要先用寫協議告訴slave,然後再讀。 所以一個完整的寫協議就是: S 7_BIT_ADD W A OFFSET A RS 7_BIT_ADD R A DATA A P ST: 起始位 SAD: 裝置地址 SAK: 從裝置應答位 MAK: 主控應答位 SUB: offset DATA: 詳細資料 SP: 結束位 


  • 例項分析

二進位制串為 S 001111000 000010000 {RS} 001111010 110111101 P 翻譯就是 3C 08 3D DE 另外能夠看出, RS restart  start 波形非常類似,並且 P 之前 slave 沒有 ack ,就說明 slave 不準備再提供資料了,說明是 byte 讀。

假設要讀多 byte ,由於這個是 st sensor 。所以在 offset 位最高位寫 1 即可了。這是 st private 規定。




資料位是S 001100000 001000000 001001110 P 翻譯一下就是30 20 27。slave address 18 (30/2) offset 20, data 27.

從圖中能夠看出。第九位應答位為高。說明並沒有master並沒有收到應答 資料位是S 001111001 000000001(並非完整的波形) 翻譯一下slave address 1e(3c/2) offset 0 .....
本文簡單分析了I2C的讀寫的詳細過程。以及依據幾個波形圖的例項,分析了詳細傳送的資料,供大家參考。