IIC驅動程式分析(一)

2021-06-09 14:49:46 字數 1893 閱讀 7525

根據上一節課的分析,我們來解讀這段**:

#include #include #include #include #include #include #include static unsigned short ignore      = ;

static unsigned short normal_addr = ; /* 位址值是7位 */

static struct i2c_client_address_data addr_data = ;

static int at24cxx_detect(struct i2c_adapter *adapter, int address, int kind)

/* i2c_add_driver之後會呼叫到這個函式 */

static int at24cxx_attach(struct i2c_adapter *adapter)

/* i2c_del_driver時會呼叫這個函式,但前提是呼叫在at24cxx_detect函式中呼叫了i2c_attach_client函式將 裝置、驅動、介面卡三者聯絡起來了*/

static int at24cxx_detach(struct i2c_client *client)

/* 1. 分配乙個i2c_driver結構體 */

/* 2. 設定i2c_driver結構體 */

static struct i2c_driver at24cxx_driver = ,

.attach_adapter = at24cxx_attach,

.detach_client = at24cxx_detach,

};static int at24cxx_init(void)

static void at24cxx_exit(void)

module_init(at24cxx_init);

module_exit(at24cxx_exit);

module_license("gpl");

我們來分析一下這個程式的流程:

首先分配乙個i2c_driver結構體,然後設定並註冊這個結構體。設定的時候有來個函式比較重要:attach_adapter 和.detach_client ,前乙個在註冊的時候呼叫,後乙個在解除安裝的時候呼叫。註冊之後,這個結構體就被加入到匯流排驅動列表裡面,然後它會呼叫at24cxx_attach函式,at24cxx_attach函式又會呼叫i2c_probe(adapter, &addr_data, at24cxx_detect);函式,其中addr_data,代表裝置位址,at24cxx_detect是找到裝置後要執行的函式。i2c_probe函式最終會呼叫介面卡裡面的真正傳送訊號的函式把裝置位址傳送給從裝置,一旦發現了相符合的從裝置,就會呼叫at24cxx_detect函式,這個函式裡面需要呼叫i2c_attach_client建立聯絡。

這裡建立聯絡的工作沒有做,後來再來完善。

當呼叫 i2c_del_driver解除安裝i2c_driver這個結構體的時候,就會呼叫對應的驅動程式的 .detach_client = at24cxx_detach,函式來解除連線,但是前提是已經通過i2c_attach_client函式建立了聯絡。

由於這裡並沒有建立聯絡,所以。。。。。。

我們可以總結出編寫iic匯流排驅動的大致流程:

1. 分配乙個i2c_driver結構體

2. 設定

attach_adapter // 它直接呼叫 i2c_probe(adap, 裝置位址, 發現這個裝置後要呼叫的函式);

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

3. 註冊:i2c_add_driver

IIC驅動程式分析(二)

在上一節的實驗中,我們採用的是normal i2c 的方式,即 要發出s訊號和裝置位址並得到ack訊號,才能確定存在這個裝置。那麼如果本身不存在這個裝置當然啊不會給出應答訊號,這是就不會呼叫i2c probe adapter,addr data,at24cxx detect 函式中的at24cxx ...

IIC匯流排驅動程式框架分析

我們首先從 drivers i2c chips eeprom.c來分析,這是驅動那一塊的 static struct i2c driver eeprom driver id i2c driverid eeprom,attach adapter eeprom attach adapter,detach...

USB驅動程式分析

1.對於每個pc來說,都有乙個或者多個稱為主機 host 控制器的裝置,該主機控制器和乙個根集線器 hub 作為乙個整體。2.每個host控制器其實就是乙個pci裝置,掛載在pci匯流排上。驅動開發人員應該給host控制器提供驅動程式,用usb hcd結構體表示。3.usb host控制器都會自帶乙...