RK28-Linux I2C使用說明
目 錄
一、 版本號碼和版本說明... 2
二、 模組功能描述... 2
三、 模組軟體設計思路... 2
四、 模組主體流程... 2
五、 系統資源佔用情況... 2
六、 目錄和檔案說明... 2
七、 介面函數說明和注意事項... 2
八、 遺留問題... 2
一、 版本號碼和版本說明
本文給出了linux下I2C驅動的調用使用方法
二、 模組功能描述
I2C匯流排的驅動在linux上分多層,程式和資料結構較為複雜,這裡不作介紹,只介紹在I2C匯流排上掛載裝置驅動的基本方法,便於使用。
1、 添加裝置描述符
將您的I2C裝置資訊描述統一添加在board-rk28.c檔案的board_i2c_devices結構中。必要的包括驅動名,所屬類等。驅動名的字串要和驅動中的名稱對應。
2、添加驅動
以I2C裝置asb100為例如,使用i2c_add_driver函數將一個裝置驅動搭載到I2C匯流排上,並定義改模組的初始化資訊等:
3、驅動描述
其中的asb100_driver即是註冊的I2C匯流排裝置上的一個裝置驅動描述,其初始化為如下,啟動的DR驅動名.name應和簽名前面註冊的裝置驅動名一致,其中attach函數和detach函數是探測和移除裝置的函數,使用者可註冊該函數並在其中進行裝置的探測,初始化和私人資料的初始化。
4、裝置探測
attach_adapter函數參考下列寫法,其中addr_data中是包含了normal_i2c的裝置地址,其地址通常是8位地址經過右移1位的7位地址,i2c_probe的第三個函數是模組的私人探測函數,可在該函數中初始化私人的client資料等。
5、裝置的client初始化
在設定client資料時,有三個成員需要注意,如
分別是位址區段,訪問模式和通道,其中地址位段有四種如下:
I2C_7BIT_ADDRESS_8BIT_REG —— 7位地址8位元據
I2C_10BIT_ADDRESS_16BIT_REG, —— 10位地址16位元據
I2C_10BIT_ADDRESS_8BIT_REG, —— 10位地址8位元據
I2C_7BIT_ADDRESS_16BIT_REG —— 7位地址16位元據
訪問模式有三種:nomal,direct,register
通道有兩種:0和1。
如果未設定這三個參數,則預設為Normal模式7位地址8位元據訪問0通道。
i2c_set_clientdata函數是將裝置驅動的私人資料連線到裝置client中。
6、讀寫訪問函數
完成以上初始化,即可對註冊的I2C裝置進行讀寫,一個一般的讀寫函數寫法如,其中client位裝置對應的I2C client,reg為寄存器地址,buf為讀寫到的資料指標,len為位元組數。
除了使用i2c_transfer函數進行讀寫封裝操作外,也可以使用i2c_master_recv,i2c_master_send等進行收發,需要注意的是,當資料為16bit時,不要使用smbus系列介面進行讀寫,也使用以上提供的方法進行讀寫,只是讀寫的資料分為高低位元組進行。
有了以上介面,基本上一般的裝置即可使用,限於作者水平有限,如有錯誤和紕漏望指正,後續進行升級最佳化。
三、 模組軟體設計思路
描述模組軟體的設計思路
四、 模組主體流程
用流程圖畫出模組內部主體流程
五、 系統資源佔用情況
描述模組使用的 堆/棧 使用方式和RO/RW/ZI 空間、硬體資源使用方式、調用系統函數和驅動軟體的介面情況。
六、 目錄和檔案說明
說明模組內部各個目錄和檔案的功能
七、 介面函數說明和注意事項
說明介面函數的調用方式和注意事項
八、 遺留問題
描述設計中的遺留問題