I2C

I2C

参考链接:

  1. UM10204 I2C-bus specification and user manual Rev. 7.0
  2. 一文看懂I2C协议 - 王超的文章 - 知乎
  3. I²C(IIC)总线协议详解—完整版 - 曾小庆的文章 - 知乎
  4. 单片机I2C通信入门(上):硬件部分有哪些注意点?
  5. 单片机I2C通信入门(下):三份文件搞清楚I2C通信协议

1. I2C是什么?

I2C的全称是Inter-Integrated Circuit,意思是芯片与芯片之间的通讯。它是由Philips(飞利浦)公司,现NXP(恩智浦)半导体开发的一种简单的双向两线制总线协议标准。

2. I2C总线的特点

翻译自UM10204 I2C-bus features

  • 只需要两线:一个串行数据线(SDA),一个串行时钟线(SCL)
  • 连接到总线的每一个设备都可以通过唯一的地址进行软件寻址,并且始终存在简单的控制器/目标关系;控制器可以作为控制器-发送器或者控制器-接收器运行。
  • 是真正的多控制总线,包括冲突检测和仲裁,以防止在两个或更多个控制器同时启动数据传输时损坏数据。
  • 串行、8位、双向数据传输在标准模式下最高可达100 kbit/s,在快速模式下最高可达400 kbit/s,在快速模式+下最高可达1 Mbit/s,在高速模式下最高可达3.4 Mbit/s。
  • 串行、面向 8 位的单向数据传输,在超快模式下传输速度高达 5 Mbit/s。
  • 片内滤波可抑制总线数据线上的尖峰,以保持数据完整性。
  • 可连接到同一总线的IC数量仅受最大总线电容的限制。在某些情况下,可能允许更大的电容。

3. 5种速率模式

速率模式-ch 速率模式-en 速率 备注
标准模式 Standard-mode 100 kbit/s
快速模式 Fast-mode 400 kbit/s
快速模式+ Fast-mode Plus 1 Mbit/s
高速模式 High-speed mode 3.4 Mbit/s
超快模式 Ultra Fast-mode 5Mbps 单向传输

3. I2C总线的硬件设计

I2C总线对于设备上的IO口进行了一些阉割,总线在默认状态下是高电平,MOS管导通时变为低电平。

I2C总线为了解决多设备共用总线而不烧毁电路的问题,采用了开漏输出的方案,配合上拉电阻,可以输出完整的高低电平。上拉电阻值,在总线设备多,速度要求高的时候可以设置相对小一些。

4. I2C总线协议

4.1. I2C总线术语的定义

Term 术语 Description 描述
Transmitter 发射机 向总线发送数据的设备
Receiver 接收机 从总线接收数据的设备
Controller 控制器 启动传输、生成时钟信号并终止传输的设备
Target 目标 控制器寻址的设备
Multi-controller 多控制器 多个控制器可以尝试同时控制总线,而不会损坏消息
Arbitration 仲裁 程序以确保如果多个控制器同时尝试控制总线,则只允许一个控制器这样做,并且获胜消息不会损坏
Synchronization 同步 同步两个或多个设备的时钟信号的过程

获胜消息:在多个控制器争夺总线控制权的过程中,最终成功获得控制权的控制器所发送的信息

4.2. 数据传输方式

  1. 假设微控制器 A 想要向微控制器 B 发送信息:
    • A(控制器)寻址 B(目标)
    • A(控制器-发送器),将数据发送到B(目标接收器)
    • A 终止传输。
  2. 如果 A 想要从 B 接收信息:
    • A(控制器)寻址 B(目标)
    • A(控制器-接收器)从 B(目标发送器)接收数据
    • A 终止传输。

4.3. 4种信号

  1. 起始信号
    • SCL处于高电平时,SDA由高到低变化,这种信号是起始信号。
  2. 停止信号
    • SCL处于高电平时,SDA由低到高变化,这种信号是停止信号。
  3. 应答信号
    • I2C最大的一个特点就是有完善的应答机制,从机接收到主机的数据时,会回复一个应答信号来通知主机表示“我收到了”。
    • 应答信号出现在1个字节传输完成之后,即第9个SCL时钟周期内,此时主机需要释放SDA总线,把总线控制权交给从机,由于上拉电阻的作用,此时总线为高电平,如果从机正确的收到了主机发来的数据,会把SDA拉低,表示应答响应。
  4. 非应答信号
    • 当第9个SCL时钟周期时,SDA保持高电平,表示非应答信号。

5. 总结

  1. I2C 4种信号的分别是什么形式?

others

只能说自己对于I2C的了解程度还是不够的。之前使用I2C,无非是驱动OLED屏幕、读取传感器的值这样的任务,没有使用I2C总线连接多个设备使用。以后一定要做个小项目切身体验一下,加深理解。

posted @ 2024-05-12 02:35  霍北北  阅读(111)  评论(0编辑  收藏  举报