linux驅動開發:IIC協議的瞭解

IIC協議介紹:
作爲一種應用很廣的串行總線協議,這個是需要我們很認真去了解的。絕大多數的驅動開發中均少不了IIC驅動.
我手上的板子有一個eeprom和touch screen都是IIC接口。現在我們先來研究IIC協議以及ac24cxx的spec研讀.
爲下一章的驅動編寫做準備.

這裏我們拿24cxx的datasheet來說明.

IIC協議:由一個SDA信號和一個SCL信號組成.主控mcu作爲主設備,其他外圍器件作爲從設備.所有操作的開始均是由主設備發起。
IIC有start,stop,ACK信號.

這裏寫圖片描述
數據傳輸時:在每一個scl爲高 level時,要求對應的sda 數據穩定不變,當scl的level爲低時,允許sda的電平進行變化.

這裏寫圖片描述
正因爲這種特性,通常我們這樣講:IIC的數據傳輸,波形上直觀的表現爲:data數據一定要包住clk.

start:SCL爲高電平時,SDA產生一個下降沿
stop:當SCL處於高電平時,SDA產生一個上升沿
ACK:SCL爲高電平時,SDA爲低電平


24c02/24c04/24c08 spec研讀:

首先:IIC設備均會有一個 dev 的addr.支持IIC的多個設備可以掛在同一條總線上,操作時以設備地址來區分.

這裏寫圖片描述

這裏寫圖片描述

這裏寫圖片描述

24cxx device addr 的確定
24c02: 與A2,A1,A0的硬件連接相關
24c04 : 與A2,A1的硬件連接相關,A0未連接
24c08 : 與A2的硬件連接相關,A1,A0未連接
size:
24c02: 256 個字節, 尋址需要 8bit
24c04: 512 個字節,尋址需要 9bit
24c08: 1024個字節,尋址需要 10bit

通常,向一個地址寫一個數據,需要先寫dev 的地址,8bit,再寫入數據存放位置的地址,此時24c02一個字節可以表示完全它本身的地址,但是24c04和24c08卻不行,需要兩個字節,再傳數據

24cxx 寫入方式:
1.字節寫入,一次傳送一個字節,寫完結束!
2.連續寫: 24c02一次可以連續寫8個字節,24c04/24c08一次可以連續寫16個字節
每寫入一個字節,地址會自動+1,24c02的地址第三位會自動+,24c04/24c08的低四位會自動+。溢出後自動變0,恢復到起始寫地址.

這裏寫圖片描述

24cxx的讀方式:
1.當前讀:ic裏面有一個conter會記錄上次操作的地址,當再次進行不指定地址的讀操作,直接返回記錄地址上的數據
2.隨機讀:指定任意的地址,再發送讀命令,返回對應地址的數據
3.順序讀:發生在當前讀或者隨機讀方式下,一次讀多個字節出來

發佈了37 篇原創文章 · 獲贊 5 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章