I2C總線設備驅動框架

編寫I2C驅動程序,我們可以參考 \linux-3.4.2\Documentation\i2c 中的一些文檔

(1)大致框架

app:   open  read write
-----------------------------------------------------------------------

設備驅動層:知道數據的含義
xxx_read()    xxx_write()
------------------------------------------------------------------------

核心層:給設備驅動層和總線驅動層提供接口函數  

-------------------------------------------------------------------------

總線驅動層:知道怎麼發數據,但是不知道數據的含義

-------------------------------------------------------------------------

硬件層:適配器     i2c類設備等

 

(2)如何編寫I2C設備驅動
         一般來說,廠家已經提供了總線驅動程序,我們要做的就是編寫設備驅動模型,需要編寫兩個文件 xxx_dev.c   xxx-drv.c。當兩個文件xxx_dev.c中提供的設備名字在xxx_drv中的 id_table 中時,就調用xxx_dev中的probe()函數,在probe() 函數中我們可以註冊字符設備驅動或者是其它驅動。

(3)dev_xxx.c 文件的編寫
static struct i2c_board_info at24cxx_info = {
    I2C_BOARD_INFO("at24cxx", 0x50),
};

static struct i2c_client *at24cxx_client;
static int at24cxx_init(void)
{    
    static struct i2c_adapter *i2c_adap;    
    i2c_adap = i2c_get_adapter(0);
    at24cxx_client = i2c_new_device(i2c_adap , &at24cxx_info);
    i2c_put_adapter(i2c_adap);
    return 0;
}

(4)xxx-drv.c文件
      分配/設置 i2c_driver 結構體,註冊函數爲:i2c_add_driver(); 在i2c_driver 結構體中的成員函數probe()中做我們想做的事。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章