您的位置:首页 > 其它

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

2010-10-29 20:52 274 查看
最近一直被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以来的总线、设备、驱动这样一个模型。具体的实现以后再乱写写吧!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: