ARM-Linux下ZLG7290 I2C驱动程序的编写

Linux大全评论329 views阅读模式

项目中用到ZLG7260按键数码显示芯片与at91sam9260系列ARM9处理器连接,ZLG7290通过I2C接口与ARM9TWI I2CPA23SDA数据线 PA24SCL时钟线)接口相连连接,另外还有一个中断信号引脚(INT)与ARM的一个GPIO引脚(PB30)连接,具体连接电路由于公司需要技术保密不贴出来了。本周通过学习Linux I2C体系架构,完成这一驱动程序,下面将一些开发心得贴出来和大家分享。

        首先来看什么是I2C

I2C (InterIntegrated Circuit)总线是一种由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备。I2C总线最主要的优点是其简单性和有效性。由于接口直接在组件之上,因此I2C总线占用的空间非常小,减少了电路板的空间和芯片管脚的数目,降低了互联本钱。I2C总线最初为音频和视频设备开发,现已应用于各种服务与治理场合,来实现配置或把握组件的功能状态,如电源、系统风扇、系统温度等参数,增加了系统的安全性,方便了治理。

I2C总线是由数据线SDA和时钟SCL构成的串行总线,可发送和接收数据,每个器件都有一个惟一的地址识别。I2C 规程运用主/从双向通讯。器件发送数据到总线上,则定义为发送器,器件接收数据则定义为接收器。主器件和从器件都可以工作于接收和发送状态。总线必须由主器件(通常为微控制器)控制,主器件产生串行时钟(SCL)控制总线的传输方向,并产生起始和停止条件。SDA线上的数据状态仅在SCL为低电平的期间才能改变,SCL为高电平的期间,SDA状态的改变被用来表示起始和停止条件。

I2C总线在传送数据过程中共有三种类型信号,它们分别是:开始信号、结束信号和应答信号。开始信号:SCL为高电平时,SDA由高电平向低电平跳变,开始传送数据。结束信号:SCL为低电平时,SDA由低电平向高电平跳变,结束传送数据。应答信号:接收数据的IC在接收到8bit数据后,向发送数据的IC发出特定的低电平脉冲,表示已收到数据。CPU向受控单元发出一个信号后,等待受控单元发出一个应答信号,CPU接收到应答信号后,根据实际情况作出是否继续传递信号的判定。若未收到应答信号,由判定为受控单元出现故障。

再来看Linux内核提供的I2C构架

 

内核中i2c相关代码可以分为三个层次:

1.       i2c框架:i2c.h和i2c-core.c为i2c框架的主体,提供了核心数据结构的定义、i2c适配器驱动和设备驱动的注册、注销管理,i2c通信方法上层的、与具体适配器无关的代码、检测设备地址的上层代码等;i2c-dev.c用于创建i2c适配器的/dev/i2c/%d设备节点,提供i2c设备访问方法等。

2.       i2c总线适配器驱动:定义描述具体i2c总线适配器的i2c_adapter数据结构、实现在具体i2c适配器上的i2c总线通信方法,并由i2c_algorithm数据结构进行描述。

3   i2c设备驱动:定义描述具体设备的i2c_client和可能的私有数据结构、借助i2c框架的i2c_probe函数实现注册设备的attach_adapter方法、提供设备可能使用的地址范围、以及设备地址检测成功后创建i2c_client数据结构的回调函数。

 

具体到Linux内核的对应文件来看:

Linux驱动的i2c文件夹下有algos,busses,chips三个文件夹,另外还有i2c-core.c和i2c-dev.c两个文件。其中i2c-core.c文件实现了I2C core框架,是Linux内核用来维护和治理的I2C的核心部分,其中维护了两个静态的LiST,分别记录系统中的I2C driver结构和I2C adapter结构。I2C core提供接口函数,对应一个I2C adatper。I2C driver和I2C client初始化时在I2C core中进行注册,以及退出时进行注销。同时还提供了I2C总线读写访问的一般接口,主要应用在I2C设备驱动中。

  Busses文件夹下的i2c-at91.c文件实现了at91sam9260下I2C总线适配器驱动,定义描述了具体的I2C总线适配器的i2c_adapter数据结构,实现比较底层的对I2C总线访问的具体方法。I2C adapter 构造一个对I2C core层接口的数据结构,并通过接口函数向I2C core注册一个控制器。I2C adapter主要实现对I2C总线访问的算法,iic_xfer() 函数就是I2C adapter底层对I2C总线读写方法的实现。同时I2C adpter 中还实现了对I2C控制器中断的处理函数。

企鹅博客
  • 本文由 发表于 2020年9月6日 18:45:45
  • 转载请务必保留本文链接:https://www.qieseo.com/151153.html

发表评论