IIC协议

1.简介

IIC(Inter Integrated Circuit)协议是由飞利浦公司开发的一种半双工同步通信协议,属于一主多从的总线结构,一般有两根信号线,一根时钟线SCL和一根数据线SDA。IIC占用的硬件资源较少,速度也较低,是一种适用于低速、短距离、多设备通信的协议。

IIC的一般模式如下

模式 速率 最大电容
标准模式(Standard Mode) 100kb/s 400pF
快速模式(Fast Mode) 400kb/s 400pF
增强快速模式(Fast Mode Plus) 1Mb/s 550pF
高速模式(High Speed Mode) 1.7Mb/s 400pF
高速模式(High Speed Mode) 3.4Mb/s 100pF
极速模式(Ultra-FastMode) 5Mb/s ?

IIC经过多年的发展,已经支持多主机模型,SMbus协议等。
本文仅介绍最简单的IIC协议。

2.IIC协议

2.1物理层(硬件电路)

2.1.1原理

IIC总线由串行数据线SDA,时钟线SCL和上拉电阻构成

file

原理是通过对SCL和SDA高低电平时序的控制,来进行数据的传输。在空闲状态时,SCL和SDA被上拉电阻拉高,保持高电平。

2.1.2电路设计和电气限制

连接到总线的输出端必须是开漏输出模式,上拉能力,即上升沿的时间由电源,总线电容和上拉电阻等决定,下降沿由OD产生,速度很快。因此IIC的通信速率上线取决于上拉能力,可以通过示波器直观的看到,上升沿相比于下降沿更慢

file

2.1.2.1最大设备数量

理论上来说,7位地址的IIC可以挂载127个设备,10位地址IIC可以挂载1023个设备,但是IIC规定了总线电容不能超过400pF,由于器件的管脚都是有输入电容的,PCB上也会有寄生电容,所以会有一个限制。

上面说到了上拉能力与总线电容和上拉电阻有关,其原因是电容和电阻形成一个RC时间常数,影响了上拉时间。

2.1.2.2上拉电阻

IIC采用Open drain模式,设备不能自己输出高电平,这牵扯到一些矛盾

  • 功耗低 -> 大电阻
  • 速度快 -> 小电阻

上拉电阻计算公式

R_{min}=\frac{Vdd(min)-0.4V}{3mA}
\\
R_{max}=\frac{CT}{0.874 * C}

如果IIC的上升沿过缓,可以通过减小上拉电阻Rp来实现(不得小于Rmin),或者降低总线电容(减少总线上的设备数量)
IIC协议还定义了串联在SDA、SCL线上电阻。该电阻的作用是,有效抑制总线上的干扰脉冲进入从设备,提高可靠性。这个电阻的选择一般在100~200ohm左右。这个电阻并不是必须的,在恶劣噪声环境中,可以选用。

2.2协议层

2.2.1基本时序
2.2.1.1起始和终止

IIC协议规定,起始和终止只能由主机发出。

  • 总线空闲时,SCL和SDA均为高电平
  • SCL为高,SDA从高跳变到低,表示起始信号
  • SCL为高,SDA从低跳变到高,表示终止信号
    file
2.2.1.2 寻址

在主机发送起始后,紧接着发送设备地址

2.2.1.3发送一个字节

SCL低电平期间,主机将数据依次放到SDA上(高位先行),然后释放SCL,从机在SCL高电平期间读取数据位,所以SCL高电平期间SDA不允许变化。循环8次即可发送一个字节。

2.2.1.4接收一个字节

SCL低电平期间,从机将数据依次放到SDA上(高位先行),然后释放SCL,主机在SCL高电平期间读取数据位,所以SCL高电平期间SDA不允许变化。循环8次即可接收一个字节。

file

2.2.1.5应答
  • 发送应答:主机在接受完一个字节后,在下一个时钟发送一位数据,0表示应答,1表示非应答
  • 接收应答:主机在发送完一个字节后,在下一个时钟接收一位数据,判断从机是否应答,规则同上(接受之前需要释放SDA)
2.2.2写数据

file

  • 主机发送起始信号
  • 主机发送从机地址
  • 从机产生应答信号
  • 主机发送寄存器地址+write
  • 从机产生应答信号
  • 重复执行:
  •     主机发送发送一个字节数据
  •     从机产生应答信号
  • 主机发送停止信号
2.2.3读数据

file

  • 主机发送起始信号

  • 主机发送从机地址

  • 从机产生应答信号

  • 主机发送寄存器地址+write

  • 主机发送起始信号

  • 主机发送寄存器地址+read

  • 重复执行:

  •     主机读取一个字节

  •     主机发送应答信号(应答则继续读取,不应答则停止读取)

  • 主机发送停止信号

连续读取时是读取以发送地址为首地址的连续内存区域

2.2.4数据有效性
  • SDA线上的数据必须在SCL的高电平时保持稳定。
  • SDA线的高或低电平状态只有在 SCL 线的时钟信号是低电平时才能改变。
  • 发送到 SDA 线上的每个字节必须为 8 位,每次传输可以发送的字节数量不受限制 ,每个字节后必须跟一个响应位 ,首先传输的是数据的最高位
  • 如果从机要完成一些其他功能后(如中断)才能接收或发送下一个完整的数据字节,可以使时钟线 SCL 保持低电平迫使主机进入等待状态 ,当从机准备好接收下一个数据字节时释放时钟线 SCL, 数据传输继续。
  • 当两个主机在较短的时间内发起起始条件时,会进行仲裁,保证仅由一个主机发送数据。

3.总结

IIC协议是一种性价比非常高的通信协议,广泛用于芯片之间的通信,IIC协议是精心设计的,使用最少的硬件实现了最多的功能,其同步时序也易于软件实现,但是由于IIC是Open drain模式,导致其上拉能力较弱,因此最高传输速率有限,尽管现在已经有解决方案,但是并没有普及

暂无评论

发送评论 编辑评论


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