【InterFace】I2C 总线详述

背景

昨天出去了一趟,人问:你熟悉什么?答:软硬件。结果,好尴尬。
硬件一般都做什么内容?
答:电源设计。
能说下升压、降压电路是怎么实现的吗?
答:不能。(Ps:后续增加 电源设计原理)
通讯都用到什么接口?
答:UART、I2C、SPI。
然后我想,I2C 我研究了好久,我得把话题转到 I2C 上。
我说:我最近在做 I2C 的接口。
I2C 和 SPI 有什么区别?
答:I2C 总线只需要 2 根线, SPI 对于每个从设备都要外加一条 NSS。而且通讯速率相差甚异。I2C 最高通信频率只能到 4Mbit/s。SPI 能到 50Mbit/s,具体还取决于主从机的性能。
知道为什么 I2C 速度提不上去吗?
答:我猜是 阻容特性导致的,具体的不清楚
…….
经过这次,我猜发现,我对 I2C 的了解程度并没有我想象中那么深入。
因此决定用篇文章专门研究 I2C 总线。

I2C 名称的由来

Ps:昨天和男票看《观复嘟嘟》,男票就提到,每次马老师讲一个事物时,总是会先长篇介绍这个事物名称的由来,实际上有助于帮助我们去了解。因此,首先,先介绍下 I2C 名称的由来。

I2C 是 Inter-Integrated Circuit 的简写,Inter-Intergrated Circuit 翻译过来,曰:内置集成电路。为什么 I2C 是内置集成电路?
I2C 总线是由飞利浦(Philips)半导体公司在 80 年代初设计出来的,为了让主板、嵌入式系统或手机用以连接低速周边装置而发展的。
从上面这段语句中,可以得知,I2C 是为了解决低速设备接入高速设备而存在的

I2C 可以写成 I²C、IIC。

  • I2C 读作: I - two - C
  • I²C 读作: I - squared - C
  • IIC 读作: I - I - C
  • 在中国,咱们读: I 方 C。这个读法,我想国外友人应该是没法听懂的。

I2C 概述

I2C 总线是一种简单、双向二线制同步串行总线。只需要 2 根线就可以和总线上的器件进行信息传递。

下图是一个典型的 I2C 总线连接示意图。
这里写图片描述

SDA 和 SCL

从硬件上来说, I2C 总线只有 2 根线,分别为 SDA 和 SCL,两者都是双向 I/O 线。总线接口已经集成在芯片内部,不需要特殊的接口电路。

  • SDA :是串行数据总线,负责数据信号的传输。
  • SCL:是串行时钟总线,负责时钟信号的传输。

电气特性

SDA 和 SCL 都是双向 I/O 线,接口电路为开漏输出(Open-drain),需要通过上拉电阻接电源 VCC。
这样,当总线空闲时,两根线都是 High
这里写图片描述
NOTE
I2C 总线器件均为 CMOS 器件,输出级均为开漏电路,因此,CMOS 器件在总线上消耗的电流很小。这样,就能保证 I2C 总线不需要太大的电流驱动能力,或者说,I2C 具有足够的驱动能力。
但是, I2C 总线扩展器件的数量并不是受限于电流驱动能力,而是受限于电容负载总量I2C 总线的电容负载能力为 400pF(通过驱动扩展可达到 4000pF)。每一个器件的输入端都相当于一个等效电容,由于 I2C 总线扩展器件的连接方式为并联,因此,I2C 总线的总等效电容等于每一个器件等效电容之和,等效电容的存在会造成传输信号波形的畸变。在超出范围时,会导致数据传输出错。

Master 和 Slave

从接入的设备来说,I2C 总线上连接着主设备(Master)从设备(Slave)

  • Master 用于启动数据传输,并产生时钟信号。
  • 任何被寻址的器件均是被认为是 Slave。

NOTE
Master 和 Slave 的关系不是恒定的,而是取决于此时数据传输的方向。

工作原理

Master 要发送数据给 Slave,则:

  • Master 首先寻址 Slave
  • Master 再主动发送数据给 Slave
  • 最后由 Master 终止数据传送

Master 要接收 Slave 的数据,则:

  • Master 首先寻址 Slave
  • Master 再主动接收 Slave 发送的数据
  • 最后由 Master 终止接收的过程

由此可见,无论是发送数据或者接收数据,都是由主机主动发起和终止数据传输过程。同时, Master 还负责在 SCL 上产生时钟。

数据传输

下图为 I2C Bus的数据传输示意图。
这里写图片描述

数据有效性

SDA 上的数据必须:

  • 在 SCL 为 High 时,保持不变
  • 在 SCL 为 Low 时,进行电平转换
    这里写图片描述

起始信号和停止信号

每次 Master 发起通讯时, Master 必须产生起始信号(Start)。
在每次通讯结束时,Master 必须产生停止信号(Stop)。
这里写图片描述

  • Start 信号:SCL 为 High 时,SDA 由 High 变 Low ,产生下降沿。
  • Stop 信号:SCL 为 High时, SDA 由 Low 变 High,产生上升沿。

Byte 格式

  • 发送到 SDA 线上的每个数据长度必须为 1 Byte(8 bits)
  • 每次传输可以发送的字节数量不受限制
  • 每个字节后必须跟一个响应位(Ack)
  • 首先传输的是数据的最高位(MSB)

应答响应

I2C 总线共有 2 种应答。当生产 Ack ,认为数据通讯正常,主机可继续通讯。当产生 NAck,认为数据通讯异常,主机可产生停止信号(P)结束通讯。

  • Ack : 第 9 个 SCL 脉冲时,SDA 为 Low
  • NAck : 第 9 个 SCL 脉冲, SDA 为 High

NOTE
当为 I2C 读时序时, 最后一个 Byte 均产生 NAck,为正常情况。
当为 I2C 写时序是,最后一个 Byte 均产生 Ack,为正常情况。

I2C 总线共有 2 种情况,需产生应答:

  • Slave Address + W/R 响应。Master 发送 Slave Address + W/R 后,必须由被寻址的 Slave 产生 Ack,若不存在对应地址的 Slave,主机将接收到 NAck,产生停止信号(P)以终止数据传输。

  • 数据响应。在每 Byte 数据后的第 9 个 SCL 脉冲,必须由 Receiver 产生 Ack,以响应 Transmitter 数据通讯正常,若 Receiver 正在进行其他操作而无法响应 Transmitter时,需产生 NAck 以终止数据传输。

NOTE

  • 地址应答必须由 Slave 应答
  • 数据应答不区分 Master 和 Slave ,仅区分 Transmitter 和 Receiver。

时钟扩展

在数据传输过程中,如果 Slave 要完成一些其他功能后,才能接受或发送下一个完成的数据字节,可以使 SCL 保持 LOW,迫使 Master 进入等待状态,当 Slave 准备好接收下一个数据字节并释放 SCL 后,数据传输继续。

Slave Address 和 R/W

在 Master 发起通讯时,在产生 Start 信号后,Master 发送 Slave Address 和 R/W。
这里写图片描述
Salve Address 为 7 bits。实际可用地址为:(0x07, 0x78)
以下为特殊用途的 Slave Address:
这里写图片描述
R/W:
- R/W = 0 时,表示 Write
- R/W = 1 时,表示 Read

Software Reset

若在 General Call(0000 0000h)后,主机发送 0x06(0000 0110),将产生软件复位。

I2C 总线速率

I2C 共有 5 种通讯速率,分为双向(Bidirectional Bus)和单向(Unidirectional Bus)。

  • 双向(Bidirectional Bus):
    • Standard-mode(Sm):up to 100 kbit/s
    • Fast-mode(Fm):up to 400 kbit/s
    • Fast-mode Plus(Fm+):up to 1 Mbit/s
    • High-speed mode(Hs-mode):up to 3.4 Mbit/s
  • 单向(Unidirectional Bus):
    • Ulrta Fast-mode(UFm):up to 5 Mbit/s

总线电气特性计算

上拉电阻 Rp 阻值计算

这里写图片描述
供电电压 VDD 和最大输出低电平,决定上拉电阻 Rp 的阻值。
Example

VDD = 5 V ± 10%, Vol(max) = 0.4 V at 3 mA
Rp(min) = (5 + 5*10% - 0.4)/0.003 = 1.7 kOhm

猜你喜欢

转载自blog.csdn.net/XiuHua_Wu/article/details/81381516