ARM-Linux-IIC设备的添加与驱动实现
2012-02-15怯肇乾吴志亮
怯肇乾,吴志亮
(郑州精益达汽车零部件有限公司,河南 郑州 100044)
广泛应用的ARM-Linux及其Android的嵌入式软硬件系统中,常常涉及到内部整合电路IIC (Inter-Integrated Circuit)总线的操作及其设备的添加与驱动的实现。基于ARM内核的各类微处理器芯片中,通常都会集成一到几个IIC总线控制器,用以连接存储器、传感器、人机界面等IIC设备。没有操作系统的常规应用中,根据IIC控制器和所选IIC设备的特点,按照IIC通信协议,通过直接明了的编程设计,很容易在系统中实现IIC设备的添加与驱动。而ARM-Linux嵌入式操作系统,对IIC采用分层分散的总线架构,虽然做到了稳定、高效、模块化,却使向其中添加需要的IIC设备及其驱动实现困难了很多,常规的驱动设计方法不能用了。ARMLinux下,IIC总线的体系框架是怎样的?如何因地制宜向其中添加IIC设备并顺利实现其驱动程序设计呢?本文以下将展开详细阐述。
1 IIC总线设备驱动及其实现分析
ARM-Linux下,IIC分为3个层次:IIC内核、IIC总线驱动和IIC设备驱动。IIC内核提供核心数据结构的定义和相关接口函数,实现驱动的注册、注销管理,设备的探测、检查,以及无关具体适配器的读写通信代码。IIC总线驱动定义具体的适配器结构i2c_adapter及其算法结构i2c_algorithm,控制适配器以主控方式产生IIC通信时序。IIC内核和IIC总线驱动共同完成硬件上的主机总线控制器驱动。IIC设备驱动定义描述具体设备的i2c_client,以具体的i2c_driver实现从机设备驱动,包括read、write以及ioctl等用户层接口。ARMLinux-IIC总线驱动的框架结构及其所在的软/硬件体系如图1所示。

图1 ARM-Linux-IIC总线驱动的框……
