现在的位置: 首页 > 综合 > 正文

基于I2C子系统的I2C驱动编写

2013年12月25日 ⁄ 综合 ⁄ 共 735字 ⁄ 字号 评论关闭

 

       最近一直被I2C驱动所困扰,在上次编写普通at24c02(eeprom)的字符设备驱动后,一直没有什么进展,不知道为什么,我的中断已经注册了,但是我的中断例程就是没有被执行,这是怎么回事??

     现在干脆写基于I2C子系统的e2prom的驱动程序

     I2C子系统的三层结构:(1)I2C_CORE层(2)I2C总线驱动层(3)I2C设备驱动层

     I2C核心层是Linux内核提供的,基本上不需要驱动工程师去修改,它是I2C总线驱动层与I2C设备驱动之间的桥梁,提供了I2C总线的注册、注销,I2C设备的注册、注销等方法。

     I2C总线驱动需要实现的工作,(1)数据结构I2C_algorithm里的几个函数,包括:master_xfer()、functionality()等。

     I2C_设备驱动层是具体是I2C设备,但是中间又有一个struct i2c_driver结构体是虚的,即没有和具体设备有联系,与具体设备对应的是:struct i2c_client结构体。可是i2c_driver结构十分重要的。它包括了几个重要的需要工程师根据具体i2c设备实现的函数:attach_adapter(),detach_client()等函数。

 

 

     总结一下:struct I2C_adapter与struct i2c_algorithm这两个结构体是在I2C总线驱动中实现的。struct i2c_driver与struct i2c_client这两个结构体是在I2C设备驱动中实现的,最终完成时,应该是有两个驱动模块,一个是总线驱动模块,一个是设备驱动模块。这正好是Linux2.6以来的总线、设备、驱动这样一个模型。具体的实现以后再乱写写吧!!

抱歉!评论已关闭.