《IIC通信協議》


1.IIC概述

  IIC多用於主控制器和從器件間的主從通信,在小數據量場合使用,傳輸距離短,任意時刻只能有一個主機等特性。

 

2.IIC的物理層

  • 只要求兩條總線線路,一條是串行數據線SDA,一條是串行時鍾線SCL。(IIC是半雙工,而不是全雙工)
  • 每個連接到總線的器件都可以通過唯一的地址和其它器件通信,主機/從機角色和地址可配置,主機可以作為主機發送器和主機接收器
  • IIC是真正的多主機總線,(而這個SPI在每次通信前都需要把主機定死,而IIC可以在通訊過程中,改變主機),如果兩個或更多的主機同時請求總線,可以通過沖突檢測和仲裁防止總線數據被破壞。
  • 傳輸速率在標准模式下可以達到100kb/s,快速模式下可以達到400kb/s。
  • 連接到總線的IC數量只是受到總線的最大負載電容400pf限制。

為什么需要2個上拉電阻?

  根據I2C總線規范,總線空閑時兩根線都必須為高。由於I2C接口采用Open Drain機制,器件本身只能輸出低電平,無法主動輸出高電平,只能通過外部上拉電阻RP將信號線拉至高電平。因此I2C總線上的上拉電阻是必須的!

 

3.IIC的協議層

3.1 數據有效性

  在傳輸數據的時候,時鍾的高電平周期內,SDA線上的數據必須保持穩定,數據線僅可以在時鍾SCL為低電平時改變。

 

3.2 起始信號和結束信號

總線空閑狀態:SDA和SCL同時處於高電平時,為總線的空閑狀態。此時各個器件的輸出級場效應管均處在截止狀態,即釋放總線,由兩條信號線各自的上拉電阻把電平拉高。(

起始條件:當SCL為高電平的時候,SDA線上由高到低的跳變被定義為起始條件。

結束條件:當SCL為高電平的時候,SDA線上由低到高的跳變被定義為停止條件。

注意:起始和終止信號都是由主機發出的。

 

3.3 應答信號

  每當主機向從機發送完一個字節的數據,主機總是需要等待從機給出一個應答信號,以確認從機是否成功接收到了數據。

  從機應答主機所需要的時鍾仍是主機提供的,應答出現在每一次主機完成8個數據位傳輸后緊跟着的時鍾周期。

  低電平0表示應答,1表示非應答。

 

3.4 數據幀格式

   I2C總線上傳送的數據信號是廣義的,既包括地址信號,又包括真正的數據信號。

  在起始信號后必須傳送一個從機的地址(7位),第8位是數據的傳送方向位(R/T),用“0”表示主機發送數據(T),“1”表示主機接收數據(R)。

  每次數據傳送總是由主機產生的終止信號結束。但是,若主機希望繼續占用總線進行新的數據傳送,則可以不產生終止信號,馬上再次發出起始信號對另一從機進行尋址。

在總線的一次數據傳輸過程中,可以有以下幾種組合方式:

1)主機向從機發送數據,數據傳送方向在整個傳送過程中不變:

注:有陰影部分表示數據由主機向從機傳送,無陰影部分則表示 數據由從機向主機傳送。
    A 表示應答(低電平), A 非表示非應答(高電平)。 S 表示起始信號, P 表示終止信號。

2)主機在第一個字節后,立即從從機讀數據:

 

 3)在傳送過程中,當需要改變傳送方向時,起始信號和從機地址都被重復產生一次,但兩次讀/寫方向位正好反相:

 

從機地址:

  有的從機設備地址會在數據手冊上直接告訴你。例如MPU6050。從機地址是0x68。

  在實際傳輸的時候,從機地址應該是 0x68(1101000)+二進制位0=11010000)也就是0xD0,表示要向該IIC設備里寫東西。

注意千萬別直接用0x68。

  再比如用AT24系列的芯片,從機地址前四位是根據不同存儲容量固定的,接下來的三位是有三個IO口,根據實際電路確定,最后一位才是讀寫位。

 

4. 軟件模擬IIC

  主機可以采用不帶I2C總線接口的單片機,如80C51、AT89C2051等單片機,利用軟件實現I2C總線的數據傳送,即軟件與硬件結合的信號模擬。即使是含有IIC硬件的單片機(如stm32 103系列)也有一定的缺陷,所以一般也會模擬IIC的時序。現將具體時間截圖如下:

 

   具體的延時時間要看從機的芯片手冊得知它的時鍾脈沖寬度為低時的最小時間是多少;時鍾脈沖寬度為高時的最小時間又是多少,具體要看數據手冊才能知道到底要延時多長時間才准確。

 

 

  

 


免責聲明!

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



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