嵌入式linux驅動 I2C筆記

2021-07-31 21:41:58 字數 1210 閱讀 9309

一、開發環境

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=***_adapter   //在函式***_

adapter會呼叫  i2c_probe(adap,裝置位址addr,發現這個裝置後要呼叫的函式function)

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

3.註冊上面分配的i2c_driver結構體變數。使用函式i2c_add_driver,在入口函式裡註冊。

註冊後,裝載驅動時程式會呼叫***_

adapter函式,***_

adapter函式中會呼叫

i2c_probe(adap,addr,function)函式,確認

裝置位址為addr

是否有裝置(通過是否會回發ack訊號確認),如果裝置存在則執行function函式

。解除安裝驅動時會呼叫***_

client函式,在***_

adapter中註冊分配的東西要在這解除安裝釋放。

4.構造i2c_client結構體,收發資料會用到。例子中這個i2c_client結構體的變數會在function函式中被設定。function函式還會進行字元裝置驅動的操作,包括分配file_operations結構體變數,並設定.read=***_read,.write=***_write,分配裝置號等。

i2c_client結構體

重要成員

.address   //裝置位址

.adapter   //指向介面卡

.driver   //指向i2c_driver結構體

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

5.編寫***_read,***_

write函式。

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

i2c_transfer()函式,就可以完成對

資料的讀寫了。

i2c驅動筆記

基於bcm5300x晶元 註冊平台匯流排裝置,裝置名bcm5300x i2c,通過名稱與驅動進行匹配。註冊平台匯流排驅動。驅動名稱 bcm5300x i2c 與裝置進行匹配。drivers i2c busses i2c bcm5300x.c是針對不同晶元寫的驅動。i2c驅動公共介面。drivers ...

Linux驅動 I2C匯流排

這裡以rk3288為例子,使用的是linux4.14,根據裝置樹節點i2c 與rk3x i2c driver,match之後,就會呼叫對應的probe rk3x i2c probe 這裡主要就是註冊乙個adapt i2c add adapter 也就是i2c控制器,或者說是i2c主裝置,既然是主裝置...

Linux驅動之I2C裝置驅動

核心 4.20 晶元 hym8563 rtc 下面的 分析主要都在注釋中,會按照驅動中函式的執行順序分析。static const struct i2c device id hym8563 id module device table i2c,hym8563 id static const stru...