一心想踏入linux device driver的世界,想著i2c匯流排相對於usb等其他匯流排較為簡單,就以i2c作為切入點,希望可以逐步理解ldd的設計思想,並能理解其裝置模型的概念。
在此對近期於i2c匯流排及驅動原始碼的理解做備忘,以免徒勞。
平台友善之臂s70 tiny6410
cpusamsung s3c6410a 533mhz
kernel
2.6.38
i2c chip
at24c02 ( 256 pages * 1 byte )
所謂匯流排,就應該能掛載多個裝置,不侷限於單主單從的模式,但同一時刻只有乙個主機,主端在sda線上傳送裝置位址資訊以建立讀寫通道,需要注意的是i2c裝置有的位址是固定的,有的卻是可程式設計的,這個需要根據具體晶元來定。
開始條件:scl持續為高電平,sda從高電平下跳至低電平(下降沿)
結束條件:scl持續為高電平,sda從低電平上公升至高電平(上公升沿)
從裝置收到主機端傳送的位址資訊、從裝置接收資料成功、主機端接收乙個位元組資料時都需要傳送ack告知對方成功
裝置在scl在第9個時鐘(高電平)傳送低電平表示ack
高四位固定為1010,a2~a0對於不同裝置,用法不同。
最低位是讀寫標識,為0時指寫,為1時指讀。
i2c支援兩種寫方式,分別為byte write和page write,前者在主機寫完乙個位元組後,傳送stop訊號停止操作;後者可以以8位元組為單位(at24c02)進行頁寫,見圖。
注:對於頁寫操作,如果寫入位元組超過頁大小,則會從該頁頭部重新開始,對於at24c02,頁大小是8位元組
接下來需要記錄關於linux核心的i2c驅動結構。
I2C時序剖析
入門微控制器的同學,往往對時序有一種惶恐。其實,時序就是一張窗戶紙,捅破了,就懂了。今天,跟大家分享一下關於i2c的時序解讀,希望大家能夠舉一反三。基礎知識 i2c有兩根很重要的線 scl 時鐘匯流排 和sda 資料匯流排 scl負責的是節拍,給乙個節奏讓傳送和接收雙方能夠一起左手右手乙個慢動作的同...
I2C匯流排死鎖
原文 現象 最近發現訪問i2c裝置時,主裝置復位可能會引起i2c死鎖,表現為scl為高,sda一直為低,後發現是從裝置拉死i2c匯流排,從裝置斷電之後,sda變高,上電後通訊正常。後來通過拉低scl訊號線,sda就會自動變成高電平,i2c匯流排恢復。原因 在正常情況下,i2c匯流排協議能夠保證匯流排...
I 2C匯流排簡介
總共有五種工作狀態 a 匯流排非忙狀態 該狀態時資料線 sda 和時鐘線 scl 都保持高電平。b 啟動狀態 當時鐘線 scl 為高電平狀態時,資料線 sda 由高電平變為低電平的下降沿被認為是 啟動 訊號。c 停止狀態 當時鐘線 scl 為高電平狀態時,資料線 sda 由低電平變為高電平的下降沿被...