图片

IIC特点

  • 主从通信
  • 高速IIC总线一般可达400kbps以上,用于低速设备通信
  • 传输距离短,一般设计PCB板时,外设嵌入pcb
  • 半双工通信,同一时间只能单项通信,任意时刻只能有一个主机
  • IIC总线上可连接128个设备,但0x00地址不使用,因此127个设备,但实际设计情况,建议不超过8个,因为总线电容不能超过400pF
  • 速率和模式:I2C支持不同的通信速率,通常有
    • 标准模式(100 kbit/s)
    • 快速模式(400 kbit/s)
    • 快速plus模式(1Mbit/s)
    • 高速模式(3.4 Mbit/s)
    • 超高速模式(5 Mbit/s)

IIC通信流程

image

四个信号

归纳上方流程,发现有四个信号:

  1. 起始信号-第一步
  2. 发送信号-第二、四步
  3. 应答信号-第三、五步
  4. 终止信号-最后一步

4种信号都是使用SCL(时钟线)和SDA(数据线)的电平状态,来表示和传输

起始信号S&&停止信号P

img

SCL和SDA在空闲状态下,都是高电平

起始信号

SCL为高电平时,SDA为高电平向低电平跳变,广播IIC总线上的所有设备,开始传输数据

停止信号

SCL 为高电平时,SDA 由低电平向高电平跳变,广播IIC总线上的所有设备,这一次数据传输已经结束,可以开始下一次传输。

发送信号&&接收信号

读写状态

如何定义0和1?

image

  • SCL为低电平,SDA为写状态,设备可以改变SDA的高低电平状态
  • SCL为高电平,SDA为读状态,设备可以读取SDA的高低电平状态,此时SDA的状态要求稳定、

真实数据

image

数据传输

image

1. 发送信号
寻址数据

​ IIC通信流程第二步,主机广播想要通信的从机地址,IIC总线上所有设备接受到这个地址后,与自己的地址作比较,若相同,则应答

image

note:传输方向决定第四、五步的发送器和接受器

eg: 假设 传输方向 0:主\(\to\)

第四步发送器:主机发送器

第五步接收器:从机接收器

第4+2n步和第5+2n步重复以上两个步骤,方向不可更改

信息数据

​ IIC通信流程第四步: 发送1Byte的信息

image

2. 应答信号
  • 0: 应答
  • 1: 非应答,即异常终止

IIC的常见使用方式

1. 主机给从机发数据

image

值得注意的是IIC通信终止方式:

  • 主机终止:主机发送P
  • 从机终止:主机发送数据后,从机不应答,主机发送P

2. 从机给主机发数据

image

  • 主机终止:从机发送数据后,主机不应答,从机也就不再发送数据,主机发送P

3. 主从机交互式发数据

image

note: S和P之间为一次传输,在此期间,其它设备无法抢占总线,同时主机可以再次发送寻址信号,改变传输方向。

芯片设计

电气特性

总线高低电平定义

一般总线上认为,低于 \(0.3 Vdd\) 为低电平,高于 \(0.7Vdd\) 为高电平。

对于电源电压固定为5(1±10%)v的器件,其逻辑电平规定如下:

  • Vilmax=1.5v(最大输入低电平)
  • Vihmax=3v(最大输入高电平)

对于能够适应电源电压范围较宽的器件(如cmos类),其逻辑电平规定如下:

  • Vilmax=0.3vdd(最大输入低电平)
  • Vihmax=0.7vdd(最大输入高电平)

传输速度模式

image

上拉电阻

由于I2C接口采用Open Drain机制,器件本身只能输出低电平,无法主动输出高电平,只能通过外部上拉电阻RP将信号线拉至高电平。因此I2C总线上的上拉电阻是必须的,所以在SCL总线和SDA总线上,加上"上拉电阻",I2C的上拉电阻可以是1.5K,2.2K,4.7K。

上拉电阻放置建议

应安置在OD输出端附近。当I2C总线上主从器件(Master & Slave)两端均为OD输出时,电阻放置在信号路径的中间位置。当主设备端是软件模拟时序,而从设备是OD输出时,应将电阻安置在靠近从设备的位置

上拉电阻的分析,为什么要有一个合适的上拉电阻?

  1. 上拉电阻过小,总线上电流增大,端口输出低电平增大。

  2. 上拉电阻过大,上升沿时间增大,方波可能会变成三角波

上拉电阻的计算公式

最大电阻

\[R_p(max)=\frac{t_r}{0.8473\times C_b} \]

符号定义: 上升沿时间 tr 、负载电容 Cb 、标准上升沿时间 0.8473 有关。

最小电阻

\[R_p(min)=\frac{V_{dd}-V_{OL}(max)}{I_{OL}} \]

符号定义: 电源 \(Vdd\) 电压、GPIO 的最大输出电压 \(V_{OL}\)、 GPIO的自己最大电流 \(I_{OL}\) (3mA)有关

电源电压限制了上拉电阻的最小值 ;负载电容(总线电容)限制了上拉电阻的最大值

负载电容: IIC总线挂的设备越多,电容也就越大。

关于计算Rp的基本参数如下表所示:

image

1、标准模式:0~100KHz,上升沿时间 tr = 1us

2、快速模式:100~400KHz,上升沿时间 tr = 0.3us

3、快速plus模式:up to 3.4MHz,上升沿时间 tr = 0.12us

实例计算

在实际的应用中,决定电阻的所有变量中,总线的负载电容很难精确地计算,只能大致的估计范围。

因此通常在应用中,一般是根据估计和经验选择一个临时上拉电阻,然后根据波形的测试效果去选择合适的电阻。

在一些系统中,假设10k,4.7k,2k电阻都能满足要求,那么就要在速度和功耗中按照设计需求进行取舍,上拉电阻越大意味着功耗越低,同时要牺牲部分上升时间。上拉电阻小意味着功耗高,同时意味着总线的扩展能力更强,

由此公式,假设 Vdd 是 3.3V 供电,Cb 总线电容是200pF(虽然协议规定负载电容最大 400pF,实际上超过 200pF 波形就很不好,我们以 200pF 来计算)

标准模式-100kbit/s

\[Rp(max)= \frac{tr}{0.8437*Cb}= \frac{1000 \times 10^{-9}} {0.8437 \times 200 \times 10 ^{-12}}=5.9KΩ \]

快速模式-400kbit/s

举例说明下I2C总线基本参数是Cb=200pF,VDD=3.3V,计算Rp值。

\[Rp(max)= \frac{tr}{0.8437*Cb}= \frac{300 \times 10^{-9}} {0.8437 \times 200 \times 10 ^{-12}}=1.77KΩ\\ \]

根据以上计算,Rp应选择966.667Ω–1.77KΩ之间的即可,具体阻值根据实际情况来确定。

快速模式plus-1Mbit/s

\[Rp(max)= \frac{tr}{0.8437*Cb}= \frac{120 \times 10^{-9}} {0.8437 \times 200 \times 10 ^{-12}}=708Ω \]

由于电源电压限制了上拉电阻的最小值 ;负载电容(总线电容)限制了上拉电阻的最大值,所以三种模式下的\(Rp(min)\)一样

\[Rp(min)= \frac{ VDD - Vol(max)}{I_{ol}} = \frac{3.3-0.4}{3 \times 10^{-3}}=966.667Ω \]

一般芯片驱动电流为\(3mA\),所以上拉电阻\(\frac{3V}{R_p} < 3mA\),即\(R_p>1K\)

推荐:不同速率采用的电阻一般有以下几种:1.5K、2.2K、4.7K,总线速率越高,总线上拉电阻要越小。一般应用采用4.7K,如果挂多个设备,为保证通信速率,选择2.2k。

功耗问题

上拉电阻与总线的电容形成了RC,高速时将直接影响通讯,所以功耗与速度,二者只可得其一。

电阻越小,功耗越高。

1. IIC扩展IO芯片

芯片: PCA9555PW

PCA955PW的数据手册

image

IIC的地址引脚

指令形式

[s] [从机地址+方向] [command byte] [内容] [p]

image

值得注意的是

image

意思是,command=2,如果内容中第一个字节发送给output port 1,那么下一个字节将发送给output port 0 ,也就是说下一个字节的数据必将发给同一对寄存器(eg: output port0 && output port1)中的另一个。

command=

cmmond=2

image

2. IIC连接显示屏

3. IIC连接存储器(EEPROM)

4. IIC连接实时时钟(RTC)

5. I2C/SPI至UART

芯片: SC16IS740/750/752

参考

[1] B站-创客学院视频

[2] CSDN-IIC原理超详细讲解---值得一看

[3] 一文详解I2C总线 - -电子发烧友网 (elecfans.com)

[4] IIC上拉电阻的选择与计算-电子发烧友网 (elecfans.com)

[5] I²C - Wikipedia

posted on 2024-03-14 14:52  Getone超  阅读(538)  评论(0编辑  收藏  举报