1. 程式人生 > >嵌入式linux驅動-I2C筆記

嵌入式linux驅動-I2C筆記

一、開發環境

1、核心:Linux 2.6.22.6;

2、JZ2440v3

3、ubuntu 9.10

二、過程

參考drivers/i2c/chips/eeprom.c,drivers/i2c/chips/ds1374.c。

1.分配一個i2c_driver結構體

2.設定i2c_driver結構體

  設定兩個重要的成員

    .attach_adapter=xxx_adapter   //在函式xxx_adapter會呼叫  i2c_probe(adap,裝置地址addr,發現這個裝置後要呼叫的函式function)

    .detach_client=xxx_client

  //解除安裝驅動後,如果之前發現能夠支援的裝置,則呼叫它來清理

3.註冊上面分配的i2c_driver結構體變數。使用函式i2c_add_driver,在入口函式裡註冊。註冊後,裝載驅動時程式會呼叫xxx_adapter函式,xxx_adapter函式中會呼叫i2c_probe(adap,addr,function)函式,確認裝置地址為addr是否有裝置(通過是否會回發ACK訊號確認),如果裝置存在則執行function函式解除安裝驅動時會呼叫xxx_client函式,在xxx_adapter中註冊分配的東西要在這解除安裝釋放。

4.構造i2c_client結構體,收發資料會用到。例子中這個i2c_client結構體的變數

會在function函式中被設定。function函式還會進行字元裝置驅動的操作,包括分配file_operations結構體變數,並設定.read=xxx_read,.write=xxx_write,分配裝置號等。

i2c_client結構體重要成員

   .address   //裝置地址

   .adapter   //指向介面卡

   .driver   //指向i2c_driver結構體

使用:i2c-attach_client(i2c_client結構體變數)

5.編寫xxx_read,xxx_write函式。

其中要用到i2c_msg結構體。這個結構體中可以用設定資料傳輸三要素:源地址、目的地址、長度,操作型別(讀、寫)等。設定好三要素還有讀寫,再呼叫

i2c_transfer()函式,就可以完成對資料的讀寫了。