这篇具有很好参考价值的文章主要介绍了IMX6ULL裸机篇之I2C协议。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。
一. 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
总线单字节写时序 ,如下图所示:
具体步骤如下:文章来源地址https://www.toymoban.com/news/detail-472624.html
① 开始信号。
② 发送 I2C 设备地址。
每个 I2C 器件都有一个设备地址,通过发送具体的设备地址来决定访问哪个 I2C 器件。这是一个 8 位的数据,其中高 7 位是设备地址,最后 1 位是读写位,为 1 表示读操作,为 0 表示写操作。
③ I2C 器件地址后面跟着一个读写位,为 0 表示写操作,为 1 表示读操作。
④ 从机发送的 ACK 应答信号。
⑤ 重新发送开始信号。
⑥ 发送要写入数据的寄存器地址。
⑦ 从机发送的 ACK 应答信号。
⑧ 发送要写入寄存器的数据。
⑨ 从机发送的 ACK 应答信号。
⑩ 停止信号。 文章来源:https://www.toymoban.com/news/detail-472624.html
I2C 读时序
I2C
总线单字节读时序,如下图所示:
I2C
单字节读时序比写时序要复杂一点。
读时序分为
4
大步骤:
第一步:发送设备地址,
第
二步: 发送要读取的寄存器地址,
第三步:重新发送设备地址,
第四步:
I2C
从器件输出要
读取的寄存器值。
具体步骤如下:
(1) 主机发送起始信号。
(2)
主机发送要读取的 I2C
从设备地址。
(3) 读写控制位,因为是向 I2C
从设备发送数据,因此是写信号。
(4)
从机发送的 ACK
应答信号。
(5) 重新发送 START
信号。
(6) 主机发送要读取的寄存器地址。
(7)
从机发送的 ACK
应答信号。
(8) 重新发送 START
信号。
(9) 重新发送要读取的 I2C
从设备地址。
(10)
读写控制位,这里是读信号,表示接下来是从 I2C
从设备里面读取数据。
(11)
从机发送的
ACK
应答信号。
(12)
从
I2C
器件里面读取到的数据。
(13)
主机发出
NO ACK
信号,表示读取完成,不需要从机再发送
ACK
信号了。
(14)
主机发出
STOP
信号,停止
I2C
通信。
到了这里,关于IMX6ULL裸机篇之I2C协议的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!