I2C
介绍I2C的功能和使用方法。
模块介绍
I2C 总线是一种两线式串行总线,用于连接微控制器及其外围设备,多用于主控制器和从器件间的主从通信,在小数据量场合使用,传输距离短。每个设备都有自己的唯一地址,且I2C为半双工,任意时刻只能有一个主机并进 行单行通信。
功能介绍
Linux 中 I2C 体系结构上图所示,共分成了三个层次:
- 用户空间,包括所有使用I2C 设备的应用程序;
- 内核,也就是驱动部分;
- 硬件,指实际物理设备,包括了 I2C 控制器和 I2C 外设。
其中,Linux 内核中的 I2C 驱动程序从逻辑上主要实现:
- I2C framework 提供一种 “访问 I2C slave devices” 的方法。由于这些 slave devices 由 I2C controller 控制,因而主要由 I2C controller 驱动实现这一目标。
- 在 I2C framework 内部,有 I2C core、I2C busses、I2C algos 和 I2C muxes 四个模 块。
- I2C core 使用 I2C adapter 和 I2C algorithm 两个子模块抽象 I2C controller 的功能。
- I2C busses 是各个 I2C controller drivers 的集合,位于 drivers/i2c/busses/目录下, i2c-k1.c。
- I2C algos 包含了一些通用的 I2C algorithm,所谓的 algorithm,是指 I2C 协议的通信方 法,用于实现 I2C 的 read/write 指令。
源码结构介绍
控制器驱动代码在drivers/i2c/目录下:
drivers/i2c/
|-- i2c-core-of.c #I2C子系统核心文件,提供相关的接口函数
|-- i2c-boardinfo.c
|-- i2c-core-base.c
|-- i2c-core-slave.c
|-- i2c-core-smbus.c
|-- i2c-dev.c #I2C子系统的设备相关文件,用于注册相关的设备文件
|-- busses/i2c-k1x.c #k1平台的I2C控制器驱动代码