一. IIC实验简介
I2C
是最常用的通信接口,众多的传感器都会提供
I2C 接口来和主控相连。
比如摄像头、
加速度计、触摸屏等。
I.MX6U-ALPHA开发板
使用
I2C1
接口连接了一个距离传感器
AP3216C
,本章我们就来学习如何使用
I.MX6U
的
I2C
接口来驱动
AP3216C
,读取
AP3216C
的传感器数据。
二. I2C协议
1. I2C简介
I2C
是很常见的一种总线协议
,
I2C
使用两条线在主控制器和从机之间进行数据通信。
一条是
SCL(
串行时钟线
)
,另外一条是
SDA(
串行数据线
)
,这两条数据
线需要接上拉电阻,总线空闲的时候
SCL
和
SDA
处于高电平。
I2C
总线标准模式下速度可以
达到
100Kb/S
,快速模式下可以达到
400Kb/S
。
2. I2C协议物理连接
I2C
是支持多从机的,也就是一个
I2C
控制器下可以挂多个
I2C
从设备,这些不同的
I2C
从设备有不同的器件地址,这样
I2C
主控制器就可以通过
I2C
设备的器件地址访问指定的
I2C
设备了。
一个
I2C
总线连接多个
I2C
设备,如下图:
3. I2C协议
(1) I2C 协议术语
I2C总线关键几点说明:
①
I2C 使用两条线:SCL与SDL。这两根线必须要接一个上拉电阻,一般是
4.7K
。
②
I2C
是支持多从机的。
也就是一个
I2C
控制器下可以挂多个
I2C 从设备。通过从机地址来区分访问哪个从设备。
从机地址一般可以通过看器件手册知道。
起始位:
I2C
通信起始标志,通过这个起始位就可以告诉
I2C
从机,“我”要开始进行
I2C
通信了。在
SCL
为高电平的时候,
SDA
出现下降沿就表示为起始位。
如下图所示:

停止位:
停止 I2C 通信的标志位,和起始位的功能相反。在 SCL 位高电平的时候,SDA
出现上升沿就表示为停止位。
如下图所示:
数据传输
I2C
总线在数据传输的时候要保证在
SCL
高电平期间,
SDA
上的数据稳定,因此
SDA
上
的数据变化只能在
SCL
低电平期间发生。
如下图所示:
应答信号
当
I2C
主机发送完
8
位数据以后会将
SDA
设置为输入状态,等待
I2C
从机应答,也就是
等到
I2C
从机告诉主机它接收到数据了。
应答信号是由从机发出的,主机需要提供应答信号所
需的时钟。
主机发送完
8
位数据以后紧跟着的一个时钟信号就是给应答信号使用的。从机通过
将
SDA
拉低来表示发出应答信号,表示通信成功,否则表示通信失败。
(2) I2C读写时序
I2C 写时序
I2C
总线单字节写时序 ,如下图所示:
具体步骤如下:
① 开始信号。
② 发送 I2C 设备地址。
每个 I2C 器件都有一个设备地址,通过发送具体的设备地址来决定访问哪个 I2C 器件。这是一个 8 位的数据,其中高 7 位是设备地址,最后 1 位是读写位,为 1 表示读操作,为 0 表示写操作。
③ I2C 器件地址后面跟着一个读写位,为 0 表示写操作,为 1 表示读操作。
④ 从机发送的 ACK 应答信号。
⑤ 重新发送开始信号。
⑥ 发送要写入数据的寄存器地址。
⑦ 从机发送的 ACK 应答信号。
⑧ 发送要写入寄存器的数据。
⑨ 从机发送的 ACK 应答信号。
⑩ 停止信号。
I2C 读时序
I2C
总线单字节读时序,如下图所示:

I2C
单字节读时序比写时序要复杂一点。
读时序分为
4
大步骤:
第一步:发送设备地址,
第
二步: 发送要读取的寄存器地址,
第三步:重新发送设备地址,
第四步:
I2C
从器件输出要
读取的寄存器值。