mini2440 i2c驅動分析

2021-10-04 01:52:27 字數 2003 閱讀 7776

在s3c2440的i2c驅動框架中, 分2個部分的內容, 一部分是i2c-adapter初始化, 一部分是i2c-driver的初始化. 針對s3c2440自帶的eeprom, 走讀一下**, 看看哪些東西值的我們學習和借鑑.

s3c2440上有若干個i2c-adapter, 每乙個對應一條i2c匯流排, 每個匯流排上可以掛多個i2c 裝置, 讀寫這些裝置的方式是操作i2c-adapter的暫存器.掛在同乙個i2c-adapter下的i2c裝置通過同乙個 adapter的傳送演算法對資料進行操作.

換言之: 乙個adapter對應一條匯流排, 對應一組演算法, 操作這條匯流排下的裝置.

那麼很容易理解, 要操作i2c裝置, adapter的初始化至關重要. 而adapter是用平台裝置註冊到系統

對於熟悉平台裝置的人說, 這段**非常簡單, 定義乙個平台裝置, 定義了i2c-adapter物理記憶體位址和中斷線, 需要注意是,並把它註冊到平台裝置鍊錶上.

這些是資源, 但是i2c還需要有乙個屬性資訊需要定義, 

下面這個結構體, 定義了i2c-adapter使用的匯流排號, 從位址(如果做從需要使用), 工作頻率, 延時資訊,

這些資訊註冊為平台裝置的平台資料, 以便驅動程式使用.

通過平台匯流排的match過程, 呼叫probe函式

s3c24xx_i2c_probe中, 主要完成以下幾個工作:

從整個過程看, 就是註冊adapter, 並初始化的過程. 比較特殊的是, 當adapter初始化完成後, 還需要掃瞄所屬這個匯流排的i2c裝置, 並註冊成為自己的子裝置. i2c裝置註冊, 同樣是通用的裝置模型, 那麼在同樣存在match和probe的過程.

通過上述這樣的操作, 系統就使能了某個adapter, 以及使能了內建在__i2c_board_list下, 並且屬於這條匯流排的i2c裝置

資料傳輸過程(傳送和接收):

核心定義了乙個函式:

只要i2c client和i2c driver可以匹配成功, 那麼adapter預設就在i2c-client中, i2c驅動中,只需要構造msgs指定msgs的num就可以完成資料傳送

最後奉獻一張自己畫的圖, 一張圖抵過千言萬語:

理解了這些, 那麼就可以從頭開始暴力寫乙個自己的驅動框架了:

1)定義乙個struct i2c_adapter, 初始化,呼叫i2c_register_adapter加入到i2c bus

2) 定義i2c_devinfo用於描述乙個i2c cient, 呼叫i2c_new_device建立i2c client

3) 寫乙個i2c driver, 註冊到i2c 匯流排

mini2440之ADC驅動分析

一,adc原理 adc,模數轉換器,將模擬量轉換成數字量,取樣,保持電路與ad轉換器整合在一起。ad轉換器模擬輸入訊號是直流電壓訊號,0 3.3v之間。s3c2440有8路模擬輸入訊號,ad轉換器內部有乙個模擬多路選擇器,某一時刻只能將一路模擬輸入訊號,通過模擬多路選擇器接通進行ad轉換,而其他路模...

I2C驅動情景分析 怎樣控制I2C時序

部落格 核心版本 linux 3.4.2 源程式 linux 3.4.2 drivers i2c busses i2c s3c2410.c 這次要解決的問題是 如何配置soc的i2c模組,輸出想要的時序波形?匯流排驅動層 驅動soc內部的i2c模組,也稱之為介面卡 adapter 驅動。覆蓋圖中硬體...

i2c裝置驅動

1,i2c 裝置註冊 static struct i2c board info i2c2 devices i2c裝置一般在板級 中註冊 static void msm8916 add i2c deivces void 2,i2c驅動註冊 include static const struct i2c...