Linux I2C匯流排框架 學習筆記

2021-07-16 03:29:17 字數 1558 閱讀 3992

【i2c框架結構】

linux 核心中的 i2c 框架分為 3 部分,分別是 core、bus driver、devicedriver 。其中 core 部分是框架中的框架,會呼叫 bus driver 和 device driver 中的函式和結構體進行 i2c 註冊、資料讀寫。我將其整理成為下面這張框圖(按下 ctrl+滑鼠滾軸 可放大):

【驅動編寫的主要工作】

i2c 框架裡需要我們完善的內容存在於 bus driver 和 device driver 中,我將其分為 2 部分——介面結構體、介面函式。

先來看結構體。根據裝置的不同我們需要定義包含不同內容的 adapter 結構體、client結構體、driver 結構體、algorithm 結構體。乙個

adapter

結構體可以用於註冊多個

client

結構體,這些

client

結構體都儲存在

adapter

結構體的

clients

鍊錶中。adapter結構體的定義如下:

struct i2c_adapter ;
client結構體定義如下:

struct i2c_client ;
i2c_msg結構體定義如下:

struct i2c_msg ;
再來看在上述的介面結構體中存在的眾多介面函式,她們也需要我們根據具體情況實現。這些待實現的介面函式有 (*master_xfer)、(*probe)、(*remove) 等。如下:

struct i2c_algorithm ;

struct i2c_driver ;

以上就是需要我們在自己的驅動裡主要編寫的內容。按照 linux i2c 的框架,我們將這些內容分別寫到 2 個驅動模組中,即 bus driver 模組和 device driver 模組。

【i2c驅動呼叫流程】

驅動載入時,從模組入口函式開始執行。2 個模組的載入/解除安裝函式與其餘各部分的關係如上文框圖所示,其形式類似下方**:

static int __init i2c_adapter_***_init()

static void __exit i2c_adapter_***_exit()

static struct i2c_driver device_***_driver=

.probe =device_***_probe,

.remove =device_***_remove,

.id_table =device_***_id,};

static int __init device_***_init()

static void __exit device_***_exit()

之後的 i2c 操作,如裝置註冊、資料讀寫等,將按照以上各結構體中關聯的函式相應進行。

linux i2c匯流排驅動

技術就是這樣,看一百遍不如做十遍。在對i2c做了乙個簡單的記錄之後發現比單看要理解更深刻,當然在記錄完i2c驅動之後,最希望自己能夠堅持自己實現at24c02的讀寫驅動與測試應用程式。由於是做記錄,少不了借用網路各種優秀資源,下圖是某部落格中找到的i2c框架。1 hardware層,cpu的i2c ...

Linux I2C匯流排(一)I2C驅動框架

copy from 文章目錄 linux i2c匯流排 一 i2c驅動框架 一 linux i2c驅動的主要物件 1.1 i2c匯流排 1.2 i2c裝置 1.3 i2c驅動 1.4 i2c介面卡 二 linux i2c驅動框架 三 i2c驅動框架原始碼剖析 3.1 註冊i2c裝置 3.2 註冊i2...

Linux I2C裝置驅動學習

一 i2c 簡介 1 i2c簡介 a 優點 i2c匯流排僅用兩根訊號線 scl sda 就實現了裝置之間的資料互動,極大簡化了對硬體資源和pcb板佈線空間的占用 b 用途 eeprom 實時鐘 小型lcd等裝置與cpu的介面中 2 i2c驅動體系 i2c框架 通用 適應性強 i2c核心 i2c匯流排...