I2C协议

文章介绍了I2C通信协议,包括其基本原理、物理连接和协议细节,如SCL和SDA线、多从机支持、起始位、停止位和应答信号。还讨论了I2C在I.MX6U-ALPHA开发板上驱动AP3216C距离传感器的示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.  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 设备,如下图:

三.  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读写时序

(1)  I2C 写时序(Master → Slave)

I2C 总线单字节写时序 ,如下图所示:

具体步骤如下:

 发送 start起始信号。

 发送 I2C 设备地址:发送从机7位地址+1位写模式位;

每个 I2C 器件都有一个设备地址,通过发送具体的设备地址来决定访问哪个 I2C 器件。这是一个 8 位的数据,其中高 7 位是设备地址,最后 1 位是读写位,为 1 表示读操作,为 0 表示写操作。

I2C 器件地址后面跟着一个读写位,为 0 表示写操作,为 1 表示读操作。

③ 从机发送的 ACK 应答信号。

  重新发送 start起始信号。

⑤ 发送寄存器地址。

⑥ 从机发送的 ACK 应答信号。

 发送数据给从机。

  从机发送的 ACK 应答信号。

⑨ 停止信号。

(2)  I2C 读时序(Master ← Slave)

I2C 总线单字节读时序,如下图所示:

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

具体步骤如下:

(1)   主机发送 start 起始信号(SCL=高,SDA 高→低)
(2)   主机 发送 7 位从机地址 + 写模式(0)(先写入寄存器地址);
(3)   从机发送的 ACK 应答信号。
(4)   重新发送 START 信号。
(5)   主机发送寄存器地址给从机。
(6)   从机发送的 ACK 应答信号。
(7)   重新发送 START 信号(Repeated Start)
(8)   重新发送7 位从机地址 + 读模式(1);
读写控制位,这里是读信号,表示接下来是从 I2C 从设备里面读取数据。
(9) 从机发送的 ACK 应答信号。
(10) 从机发送数据到主机(8 位数据);
(11) 主机发出 NO ACK 信号,表示读取完成;
(12) 主机发出 STOP 信号,停止 I2C 通信。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值