【基础通信协议】——IIC

引言

IIC是产品设计中最常用的通信接口,众多的传感器都会提供IIC接口来和主控连接,如陀螺仪、加速计、触摸屏等。所以IIC是嵌入式学习必须要掌握的。

本次只是讲解理论,不做实际实验操作,因为我现在在学Linux,使用的IMX6ULL大家手里面也可能没有这个板子,所以就不做演示啦。

IIC简介

IIC是很常见的一种总线协议,IIC是由NXP(恩智浦)公司设计的,IIC使用两条线在主控制器和从机之间进行数据通信。一根为SCL(串行时钟线),另一条为SDA(串行数据线)。通常这两根线都需要接上拉电阻,使总线空闲的时候SCLSDA都处于高电平状态。

IIC总线的标准速度可以达到100Kb/s,快速模式下可以达到400Kb/s。

IIC总线工作是按照一定协议来与运行的。IIC是支持多从机的。也就是一个IIC控制器下面可以挂多个IIC设备,这些不同的IIC从设备有不同的器件地址,这样IIC主控制器就可以通过IIC设备的器件地址访问指定的设备了。

如上图,SDA和SCL两根线都有一个上拉电阻,一般是4.7K。其余的IIC器件都挂在总线上。

协议术语

起始位

IIC通信起始标志,告诉IIC从机“我要开始IIC通信了”,SCL为高电平的时候,SDA出现下降沿就表示起始位。

停止位

停止IIC通信的标志位,和起始位的功能相反。当SCL处于高电平的时候,SDA由低变高出现上升沿为停止位。

数据传输

IIC总线在数据传输的时候要保证SCL高电平期间,SDA上的数据稳定,因此SDA的数据变化只能在SCL处于低电平的期间发生。

应答信号

当IIC主机发送完8位数据以后会将SDA设置为输入状态,等待IIC从机应答,也就是等IIC从机告诉主机它可以接收数据了。应答信号是由从机发起的,主机需要提供应答信号所需的时钟,主机发送完8位数据以后紧跟着一个时钟信号就是给应答信号使用的。从机通过将SDA拉低来表示发送应答信号,表示通信成功,否则表示失败。

时序

主机通过IIC总线与从机之间进行通信主要两个操作:读和写

IIC写时序

具体步骤

  • 开始信号
  • 发送设备地址:每个IIC器件都有一个设备地址,通过发送具体的设备地址来决定访问哪个IIC器件。发送8位数据,7位位设备地址,第8位为读写位(1表示读操作,0表示写操作)。
  • 等待应答:等待从机发送ACK应答
  • 重新发送开始信号
  • 发送寄存器地址
  • 等待应答
  • 发送要写入的数据
  • 等待应答
  • 停止信号

IIC读时序

具体步骤

  • 发送开始信号
  • 发送设备地址7位,第8位为读写位,此时为写状态(0)
  • 等待应答
  • 重新发送开始信号
  • 发送寄存器地址
  • 等待应答
  • 重新发送开始信号
  • 重新发送设备地址,这里第8位置1(读状态)
  • 等待应答
  • 从IIC器件中读取到的数据
  • 主机发送NOACK信号,表示读取完成
  • 发送停止信号

如果我们需要读写多字节,那么在读写数据的时候可以连续发送多个自己的数据,其他的控制时序和单字节是一样的。

如果您觉得这篇文章不错,且手里较为宽裕,可以支持一下博主,一分也是缘分😊
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇