Linux环境下基于I2C总线的EEPROM 驱动程序
在I2C总线驱动程序体系结构中.使用数据结构Driver来表示I2C设备驱动,使用数据结构Client表示一个具体的I2C设备。而对于I2C总线
控制器,各种总线控制器在进行数据传输时采用的算法有好多种,使用相同算法的控制器提供的控制接口也可能不同。在I2C总线驱动程序体系结构中,用数据结构Algorithm来表示算法,用数据结构Adapter来表示不同的总线控制器。Linux内核的I2C总线驱动程序体系结构如图5所示。
1/2 12下一页尾页
图5 Linux内核I2C总线驱动程序体系结构
在图5中,一个Client对象对应一个具体的I2C总线设备,而一种I2C设备的Driver可以同时支持多个Client。每个Adapter对应一个具体的I2C总线控制器.不同的I2C总线控制器可以使用相同的算法Algorithm。i2c-core是I2C总线驱动程序体系结构的核心,在这个模块中,除了为总线设备驱动提供了一些统一的调用接口来访问具体的总线驱动程序功能,以进行读写或设置操作外,还提供了将各种支持的总线设备驱动和总线驱动添加到这个体系中的方法,以及当不再使用这些驱动时将其从体系中删除的方法。i2c-core将总线驱动程序体系一分为二,相互独立。可以针对某个I2C总线设备来设计一个I2C设备驱动程序,而不需要关心系统的I2C总线控制器是何种类型,所以提高了其可移植性。另一方面,在设计I2C总线驱动时也可以不要考虑其将用来支持何种设备。因为i2c-core提供了统一的接口,所以也为设计这两类驱动
提供了方便。
4 开发实例
Linux内核已经提供了I2C驱动中所需要的基本模块。i2c-core、i2c-dev和i2c-proc是总线控制器和I2C设备所需要的核心模块。对于MPC8250处理器,内核中还有MPC8260的算法模块i2c-algo-8260,它也适用于MPC8250的I2C控制接口。这些模块程序在默认条件下是不会被编译到内核里的,所以需要在配置Linux内核时把这些模块选中。在笔者的开发中需要实现的是I2C总线控制器驱动和I2C设备EEPROM驱动。