16.【linux驅動】IIC驅動-硬件、協議

概述

IIC總線使用兩條串行線路傳輸數據
  SDA :串行數據線
  SCL :串行時鐘

  • 傳輸模式爲半雙工傳輸
  • 是一個多主機總線,如果兩個或多個主機同時初始化數據傳輸,可以通過沖突檢測和仲裁防止數據破壞
  • 每個連接到總線上的器件都有唯一的地址,數據傳輸和地址設定由軟件設定
  • 傳輸時鐘由主機產生

總線空閒狀態 :
  SDA :高電平
  SCL :高電平

時序

起始

開始信號:SCL高電平,SDA由高電平跳變爲低電平
開始終止:SCL高電平,SDA由低電平跳變爲高電平
在這裏插入圖片描述

數據傳輸

數據傳輸:數據位接在在開始信號後,在SCL低電平的時候設置SDA數據位,在SCL高電平的時候採樣數據爲,因此在SCL高電平的時候SDA必須保持不變
在這裏插入圖片描述
IIC時鐘頻率:不高於400K

ACK

數據響應:發送端將8位數據或命令傳出後,會檢測SDA電平,接收端將SDA由高電平拉爲低電平則正確應答,否則傳輸失敗。

器件地址

IIC器件地址:每一個IIC器件都有一個器件地址,例如EEPROM,前四個地址爲1010,後三個地址是由硬件鏈接確定。

引腳電路:IIC引腳爲帶上拉輸出
在這裏插入圖片描述

數據傳輸

IIC傳輸以8位位一個分隔段,傳輸完8位後接收端必須有一個ACK確認信號。如果外接IIC設備能收到信號的話接着在第9個週期把SDA拉低代表ACK確認。每次傳輸由開始信號+傳輸地址+數據+結束信號組成

傳輸地址組成:開始信號後接7爲地址+一位讀寫標誌(0代表寫,1代表讀)+確認信號(接收端發出)
在這裏插入圖片描述
所以IIC除了自己以外,可以尋址127個器件。

IIC器件單字節寫:器件地址後跟寫地址,然後跟數據位
在這裏插入圖片描述
寫過程:

  1. 向IIC總線發送一個起始位
  2. 芯片尋址,向IIC總線寫入地址,R/W位是0
  3. 等待應答
  4. 片內子地址尋址
  5. 等待應答
  6. 寫入數據
  7. 等待應答
  8. 發送停止位

IIC器件多字節寫:多一個字節代表寫地址在這裏插入圖片描述

IIC器件單字節讀:讀操作是先向器件寫入讀取地址,然後再發起讀取操作,讀取完畢不需要確認信號
在這裏插入圖片描述
讀過程:

  1. 向IIC總線發送一個起始位
  2. 芯片尋址,向IIC總線寫入地址,R/W位是0
  3. 等待應答
  4. 片內子地址尋址
  5. 等待應答
  6. 向IIC總線再發送一個起始位
  7. 芯片尋址,向IIC總線寫入地址,R/W位是1
  8. 等待應答
  9. 讀取數據
  10. 發送停止位

整體時序:
在這裏插入圖片描述

IIC 總線仲裁

IIC總線的仲裁非常簡單,基本原理是檢測SDA線上的電平是否與自己預期的相同。如果與自己預期的不相同,那麼自己就放棄總線。由於IIC數據線是上拉輸出,很明顯數據位只會在高電平的時候會與自己預期的不相同,因爲其他主機此時可能正處在低電平位置。當發現自己高電平數據爲設置失敗的時候就可以放棄總線了。
仲裁時序圖:
在這裏插入圖片描述

IIC 時鐘同步

跟總線仲裁類似,時鐘同步也比較簡單,通常由時鐘最慢的主機決定總線的時鐘,因爲只有所有主機都是高電平的時候,總線纔會是高電平。時鐘快的主機將等待時鐘慢的主機。
時鐘同步時序圖:
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章