单片机/C/C++八股:(二十六)IIC 专题(I²C)---- 上集

上一篇 下一篇
SN号和PN号(普及用)

目 录

  • [IIC 专题(I²C)](#IIC 专题(I²C))
    • [1)简单介绍一下 IIC](#1)简单介绍一下 IIC)
    • [2)IIC 的基本时序是什么](#2)IIC 的基本时序是什么)
    • [3)IIC 通讯地址位数总结](#3)IIC 通讯地址位数总结)
    • [4)IIC 的通信速率有哪些](#4)IIC 的通信速率有哪些)

IIC 专题(I²C)

IIC:Inter Integrated Circuit,集成电路总线

可参考博客:Cortex-M3-STM32F1 开发:(四十九)IIC 总线结构和协议-CSDN博客

下面整理的问题及答案或多或少会有交叉重复的内容,要想熟练掌握,重点还是要理解 IIC 的整个流程及应用案例

1)简单介绍一下 IIC

I²C 是一种同步、半双工、双线制的串行总线 ,主要用于 板内芯片间、微控制器和外设 的 低速或中速 通信 。它只有两根线:时钟线 SCL 和数据线 SDA,采用多主/多从架构,一个总线可以挂多个设备,每个设备通过唯一的地址区分。

I²C 器件的引脚均为开漏输出,必须外接上拉电阻才能产生高电平。这样设计是为了实现线与逻辑,任何设备都能安全地拉低总线,不会因输出冲突而短路。


2)IIC 的基本时序是什么

  1. 起始信号:SCL高电平时,SDA从高电平切换到低电平表示通信开始
  2. 停止信号:SCL高电平时,SDA从低电平切换到高电平表示通信结束
  3. 数据发送 :SCL低电平时,SDA可以变化(准备数据)SCL高电平时,SDA必须保持稳定(数据有效),数据按 高位先行 传输
  4. 应答信号 :每传输8位数据后,接收方需要给出应答位
    • ACK(低电平)表示成功接收
    • NACK(高电平)表示接收失败或结束传输

具体的看那篇博客。


3)IIC 通讯地址位数总结

I²C 协议支持两种地址格式:

① 7 位地址(标准模式,最常用,占用1个字节):

  • 地址范围:0x00 ~ 0x7F(128 个,0000000~1111111)
  • 实际可用:约 112 个(部分地址被协议保留
  • 地址格式:7位地址 和 1位读/写位 组成 1 个字节(高 7 位为地址,最低位为 R/W 读写方向位)
    • 比如典型的 IIC 器件 AT24C02,读地址为 0xA0(10100000),写地址为 0xA1(10100001)
  • 被协议保留的主要地址有(了解即可,只有7位,不要误以为是整个字节的8位):

    • 0x00(0000000):广播地址

    • 0x01(0000001) ~ 0x07(0000111):特殊用途(如起始字节、CBUS 兼容等)

    • 0x78(1111000) ~ 0x7B(1111011):用于10 位地址指示(下面红字会解释)及未来扩展

② 10 位地址(扩展模式,向下兼容 7 位,占用2个字节):

  • 地址范围:0x000 ~ 0x3FF(1024 个,0000000000~1111111111)
  • 地址格式:占用2个字节
    • 第1字节:11110 + 地址高 2 位 + R/W(第1字节的高5位固定为11110)
    • 第2字节:地址低 8 位

两种地址格式一起使用时(10位地址设备和7位地址设备可以共存于同一总线):

当发送方拉低 SDA 线,并发送了通讯地址的第1个字节时,其他设备接收到之后会判断这第1个字节:

  • 如果高5位是11110
    • 7位地址设备不会应答(高5位为11110是被保留的地址,合法的7位地址设备的高5位不会是11110);
    • 10位地址设备会进一步判断具体地址。
  • 如果高5位不是11110
    • 7位地址设备会进一步判断后续位,如果和自己内部设定的地址完全匹配就会应答;
    • 10位设备会把它当作一个普通的 7 位地址帧,如果该设备恰好有一个匹配的备用 7 位地址,它仍然会应答;否则静默。

注: 这是帮助理解的表述方式,实际上7位地址设备会直接提取第1字节的 7 位地址,和自己内部设定的地址完全匹配才会应答。


4)IIC 的通信速率有哪些

I²C 协议定义了多个速率等级,所有模式的参考时钟频率在数值上与位速率相等(例如 100 kHz 对应 100 kbps):

  • 标准模式(Standard‑mode, Sm)

    • 最高速率可达 100 kbps (时钟频率 100 kHz)

    • 最早的 I²C 规范,适合大多数低速外设。

  • 快速模式(Fast‑mode, Fm)

    • 最高速率可达 400 kbps (时钟频率 400 kHz)

    • 目前应用最广,几乎所有 I²C 设备均支持。

  • 快速模式增强版(Fast‑mode Plus, Fm+)

    • 最高速率可达 1 Mbps (时钟频率 1 MHz)

    • 驱动能力增强,可支持更大的总线电容(约 550 pF),适合更长距离或更多节点的场景。

  • 高速模式(High‑speed mode, Hs‑mode)

    • 最高速率可达 3.4 Mbps (时钟频率 3.4 MHz)

    • 需要专用硬件:主设备在高速传输前必须发送一个特定的 主机码 以启动高速模式,且需要支持高速电平的特殊 I/O 缓冲器。

  • (单向传输)超快速模式(Ultra Fast‑mode, UFm)

    • 最高速率可达 5 Mbps (时钟频率 5 MHz)

    • 单向通信:仅支持写操作,无应答位,免去上拉电阻,改用 推挽输出 驱动线路。

    • 主要用于特定的传感器或显示接口等需要单向高速刷新的场景。

影响速率选择的关键因素:

  • 总线电容:电容越大,上升时间越慢,限制最高速率。Fm+ 通过加大驱动能力缓解这一问题。
  • 线路长度:走线过长会增加分布电容和干扰。
  • 抗干扰要求:电磁干扰严重的环境可能迫降低速率。
  • 设备兼容性:总线上所有器件必须支持所选速率,向下兼容是常态(例如支持 1 Mbps 的设备通常能工作在 400 kbps 及以下)。

相关推荐
旖-旎1 小时前
LeetCode 518:零钱兑换||(完全背包)—— 题解
c++·算法·leetcode·动态规划·背包问题
Henry Zhu1232 小时前
C++中的特殊成员函数与智能指针
c++
_wyt0014 小时前
多重背包问题详解
c++·背包dp
Ljwuhe5 小时前
C++——多态
开发语言·c++
越甲八千6 小时前
STL stack为何没有迭代器
c++
从零开始的代码生活_7 小时前
C++ 继承详解:访问控制、对象模型、菱形继承与设计取舍
开发语言·c++·后端·学习·算法
云小逸7 小时前
【C++ 第七阶段:模板、泛型编程与工程综合详解】
开发语言·c++
GIS阵地8 小时前
QgsSingleBandPseudoColorRenderer 完整详解(QGIS 3.40.13 C++)
开发语言·前端·c++·qt·qgis
王维同学8 小时前
[原创][Windows C++]LSA 认证、安全与通知包的注册表枚举
c++·windows·安全