![](https://csdnimg.cn/release/download_crawler_static/86184122/bg1.jpg)
Linux 下 I2C 设备驱动开发和实现
2008-05-16 嵌入式在线 收藏 | 打印
I2C 总线具有结构简单使用方便的特点。本文描述了 Linux 下 I2C 驱动的
结构,并在此基础上给出了 I2C 设备驱动和应用的实现。
1 引言
I2C (Inter-Integrated Circuit) 总线是一种由 PHILIPS 公司开发的两线式串行
总线,用于连接微控制器及其外围设备。 I2C 总线最主要的优点是其简单性和有
效性。由于接口直接在组件之上, 因此 I2C 总线占用的空间非常小,减少了电路
板的空间和芯片管脚的数量,降低了互联成本。 I2C 总线最初为音频和视频设备
开发,现已应用于各种服务与管理场合, 来实现配置或掌握组件的功能状态, 如
电源、系统风扇、系统温度等参数,增加了系统的安全性,方便了管理。
2 I2C 总线概述
I2C 总线是由数据线 SDA 和时钟 SCL 构成的串行总线,可发送和接收数据,
每个器件都有一个惟一的地址识别。 I2C 规程运用主 /从双向通讯。器件发送数
据到总线上, 则定义为发送器, 器件接收数据则定义为接收器。主器件和从器件
都可以工作于接收和发送状态。总线必须由主器件(通常为微控制器)控制,主
器件产生串行时钟( SCL)控制总线的传输方向,并产生起始和停止条件。 SDA
线上的数据状态仅在 SCL 为低电平的期间才能改变, SCL 为高电平的期间,SDA
状态的改变被用来表示起始和停止条件。
I2C 总线在传送数据过程中共有三种类型信号,它们分别是:开始信号、结
束信号和应答信号。
开始信号: SCL 为高电平时, SDA 由高电平向低电平跳变,开始传送数据。
结束信号: SCL 为低电平时, SDA 由低电平向高电平跳变,结束传送数据。
应答信号:接收数据的 IC 在接收到 8bit 数据后,向发送数据的 IC 发出特定
的低电平脉冲,表示已收到数据。 CPU 向受控单元发出一个信号后,等待受控
单元发出一个应答信号, CPU 接收到应答信号后,根据实际情况作出是否继续
传递信号的判断。若未收到应答信号,由判断为受控单元出现故障。
3 Linux 的 I2C 驱动架
Linux 中 I2C 总线的驱动分为两个部分,总线驱动( BUS)和设备驱动
(DEVICE )。其中总线驱动的职责,是为系统中每个 I2C 总线增加相应的读写
方法。但是总线驱动本身并不会进行任何的通讯, 它只是存在那里,等待设备驱
动调用其函数,参见图 1。