EDN China > 技术文章 > 嵌入式系统 > 操作系统 > 正文
? 2016博客大赛-不限主题,寻找电子导师,大奖升级??

嵌入式Linux系统中I2C总线设备的驱动设计

来源:中国电子工程网?? 2007年07月23日 ?? 收藏0

  引言

  I2C总线是PHILIPS公司推出的两线式串行总线,用于连接微控制器及其外围设备,具有简单、高效等特点。由于其接口直接在组件之上,因此I2C总线占用的空间非常小,减少了电路板的空间和芯片引脚的数量,降低了互联成本,特别适用于嵌入式产品。

  而Linux系统具有开源、免费、网上资源丰富等优点,目前已成为嵌入式系统的主流选择。因此如何在嵌入式Linux系统中实现I2C功能成为实际开发中的问题。

  I2C总线

  I2C 总线通过串行数据SDA 和串行时钟SCL线在连接到总线的器件间传递信息,每个器件都有一个唯一的地址识别。根据数据传输时的功能不同,把器件分为主机和从机。主机是初始化总线的数据传输并产生允许传输的时钟信号的器件,通常是微控制器。此时,任何被寻址的器件都被认为是从机,例如LCD驱动器、E2PROM等。

  I2C总线协议规定,各主机进行通信时都要有起始、结束、发送数据和应答信号。这些信号都是通信过程中的基本单元。起始信号就是在SCL线为高时SDA线从高变化到低;停止信号就是在SCL线为高时SDA线从低变化到高;应答信号是在SCL为高时SD

A为低;非应答信号相反,是在SCL为高时SDA为高。

  总线传送的每1帧数据均是1个字节。协议规定,在启动总线后的第1个字节的高7位是对从机的寻址地址,第8位为方向位(“0”表示主机对从机的写操作;“1”表示主机对从机的读操作),其余的字节为操作数据。数据传送过程是:在I2C总线发送起始信号后,发送从机的7位寻址地址和1位表示这次操作性质的读写位,在有应答信号后开始传送数据,直到发送停止信号。主机每发送1个字节就要检测SDA线上有没有收到应答信号,有则继续发送,否则将停止发送数据。

  Linux中I2C总线驱动结构

  Linux系统对I2C总线具有很好的支持。与硬件物理连接相对应的,Linux的I2C框架中各个部分的关系如图1所示。

Linux内核I2C总线驱动程序构架

图1 Linux内核I2C总线驱动程序构架

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

  1. I2C core框架:提供了核心数据结构的定义和相关接口函数,用来实现I2C适配器驱动和设备驱动的注册、注销管理,以及I2C通信方法上层的、与具体适配器无关的代码,为系统中每个I2C总线增加相应的读写方法。

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

  3. I2C 设备驱动:定义描述具体设备的i2c_client和可能的私有数据结构、借助I2C core提供的函数接口完成设备在内核的注册,并实现具体的功能,包括read, write以及ioctl等对用户层操作的接口。

  总体而言,Linux中I2C总线的驱动分为两个部分:总线驱动(BUS)和设备驱动(DEVICE)。I2C core与I2C总线适配器驱动完成了硬件上的主机总线驱动(BUS),而I2C driver则实现了从机设备驱动。在设计中,I2C core提供的接口是统一的,不需要修改,我们只需要实现特定I2C总线适配器驱动和I2C设备驱动,这样大大提高了系统的可移植性。

  笔者在某个产品中曾用AT91RM9200和X1227构成嵌入式系统的时钟模块。在该设计中,AT91RM9200作为I2C的主机部分,X1227作为从机。下面以此为例,具体介绍这两部分驱动的实现。

  AT91RM9200 I2C总线驱动实现

  AT91RM9200是ARM920T处理器,它提供标准的两线接口TWI,即I2C接口,主机工作模式。通过TWI 控制寄存器TWI_CR设置I2C工作模式和状态。时钟由寄存器TWI_CWGR中编程值产生。该寄存器定义了TWCK 信号,使接口适应宽范围时钟。

  具体在linux中AT91RM9200 I2C总线适配器驱动的实现,首先初始化AT91RM9200 I2C的工作模式,然后装载I2C总线驱动,这需要两个结构模块来描述:struct i2c_adapter和struct i2c_algorithm。


上一页123下一页
?? ?? ??


打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮

1.扫描左侧二维码
2.点击右上角的分享按钮
3.选择分享给朋友
?? ??

I2C总线? I2C设备? 驱动?

相关文章

我来评论
美国的游客
美国的游客 ??? (您将以游客身份发表,请登录 | 注册)
?
有问题请反馈