linux i2c匯流排驅動

2021-06-16 22:30:06 字數 1661 閱讀 1316

技術就是這樣,看一百遍不如做十遍。

在對i2c做了乙個簡單的記錄之後發現比單看要理解更深刻,當然在記錄完i2c驅動之後,最希望自己能夠堅持自己實現at24c02的讀寫驅動與測試應用程式。

由於是做記錄,少不了借用網路各種優秀資源,下圖是某部落格中找到的i2c框架。

1)hardware層,cpu的i2c adapter作為主控裝置可以掛載多個i2c裝置,這是裝置與cpu的物理理解,在我的平台上就是s3c6410與at24c02

2)kernel層,不好理解,暫時寫下目前的理解

* adapter specific code :特定的adapter驅動,在我這對應於i2c-s3c2410.c檔案,實現了具體的資料傳輸介面以及向核心申請中斷資源

* algorithm :adapter提供給i2c core的通訊介面,static const struct i2c_algorithm s3c24xx_i2c_algorithm

* adapter :對應特定的adapter資源,對應我核心**中的dev-i2c0.c,定義了struct platform_device s3c_device_i2c0

* i2c-core :承上啟下的一層,與具體的平台或硬體無關,給adapter驅動提供介面卡註冊機制,給device提供驅動註冊介面

* i2c-dev :實現了介面卡的裝置檔案功能,為應用程式提供open/write/read/ioctl/close檔案操作介面,操作的是掛接在該介面卡上的裝置

* driver :具體的i2c裝置驅動,如我這裡的at24.c,是at24c02的驅動,提供了對裝置的讀寫操作介面

3)usr space,應用層程式,通過裝置檔名以及底層驅動提供的讀寫驅動實現對裝置的讀寫或其他控制

一直喊匯流排,卻不知匯流排為何物。粗糙的理解就是這根通訊連線上可以掛接很多裝置,形成乙個有序的系統。

i2c匯流排驅動應該總體可以分為兩部分,即匯流排驅動與裝置驅動,也可以理解為i2c匯流排驅動的開發分為匯流排驅動開發與裝置驅動開發兩塊。

我把匯流排驅動與介面卡驅動理解為一種,不知是否正確。介面卡驅動要初始化i2c介面卡(申請io位址、中斷號等),並產生控制訊號實現對匯流排裝置的控制與訪問;同時還要提供介面卡對應的algorithm介面,實現底層的資料傳輸介面。

裝置驅動主要實現裝置掛接、離開介面卡,裝置讀/寫/控制等操作。

LinuxI2C核心 匯流排驅動與裝置驅動

i2c體系結構分為三個部分 i2c核心 匯流排驅動 裝置驅動 i2c核心 i2c核心提供了一組不依賴硬體的介面函式,i2c匯流排驅動和裝置驅動之間依賴於i2c核心作為紐帶 1 增加 刪除i2c adapter int i2c add adapter struct i2c adapter adap i...

linux i2c 驅動分析

static struct platform driver s3c2410 i2c driver static struct platform driver s3c2440 i2c driver static int init i2c adap s3c init void return ret st...

linux i2c驅動總結

最近幾天一直在看i2c的驅動架構,看到目前的感覺是說明白吧又不是很透徹,說不明白吧又知道點,總之有點不明白。明白的 1 adapter驅動,i2c控制器驅動,如果要開發i2c控制器的,這部分是要實現的。這部分要填充struct i2c adapter 結構圖和struct alogrithm結構體....