野火STM32_HAL库版课程笔记-I2C介绍

本节内容为理论内容

I2C 协议简介

I2C 物理层

I2C 协议层

I2C 基本读写过程

1. 主机写操作

最上面的时序图,描述了主机向从机写入数据的过程。

  • S:起始信号。表示通信开始。
  • SLAVE ADDRESS:从机地址。主机发送要通信的从设备地址。
  • R/W :读写位。此处为 '0' ,表示写操作。
  • A:应答信号。从机收到地址和读写位后,拉低总线表示应答。
  • DATA:数据。主机发送数据字节。
  • A / A̅:应答/非应答。每发送一个字节数据,接收方都需要发送一个应答位。最后一个字节传输完后,可以是应答也可以是非应答。
  • P:停止信号。表示通信结束。

总结流程: 起始 -> 发送从机地址(写) -> 等待应答 -> 发送数据(n字节) -> 等待应答 -> 停止。

2. 主机读操作

中间的时序图,描述了主机从从机读取数据的过程。

  • S:起始信号。
  • SLAVE ADDRESS:从机地址。
  • R/W :读写位。此处为 '1' ,表示读操作。
  • A:应答信号。从机收到地址和读命令后应答。
  • DATA:数据。此时数据方向是从从机到主机。
  • A:应答信号。主机接收到数据后,通常需要发送应答(除了最后一个字节)。
  • P:停止信号。

总结流程: 起始 -> 发送从机地址(读) -> 等待应答 -> 接收数据(n字节) -> 发送应答 -> 停止。

3. 复合模式

最下面的长时序图,也称为"复合格式"或"重复启动模式"。这通常用于先写后读的场景,例如:先向传感器写入要读取的寄存器地址,然后再读取该寄存器的数据。

  • 第一阶段(写):
    • S:起始信号。
    • SLAVE ADDRESS + R/W̅:发送从机地址,R/W位为写(0)。
    • DATA (n字节 + ack):发送控制数据(通常是寄存器地址)。
  • Sr :重复起始信号。注意这里没有发送停止信号(P),而是直接再次发送起始信号。这保证了总线的占用权不释放,防止其他主机干扰。
  • 第二阶段(读/写):
    • SLAVE ADDRESS + R/W̅:再次发送从机地址,此时R/W位根据需求决定(通常是切换为读 '1')。
    • DATA (n字节 + ack):进行数据的读取或写入。
  • P:停止信号。通信彻底结束。

通讯的起始和停止信号

数据有效性

地址和数据方向

响应

STM32 的 I2C 架构

1. 物理接口层 (橙色部分)

这是 STM32 芯片与外部世界连接的物理引脚。

  • SDA (Serial Data):串行数据线,用于双向传输数据。
  • SCL (Serial Clock):串行时钟线,由主机产生时钟信号。
  • SMBA (SMBus Alert):SMBus 警报线。SMBus 是基于 I2C 的一种总线标准,这个引脚用于特定的警报功能,在普通 I2C 通信中不常用。

2. 时钟控制模块 (紫色部分)

这部分负责生成和管理 I2C 通信所需的时钟信号。

  • 时钟控制:负责根据设定的速度(标准模式 100kHz 或快速模式 400kHz)来分频产生 SCL 时钟。
  • 时钟控制寄存器 (CCR):用户可以通过编程这个寄存器来配置 I2C 的通信速率(波特率)。

3. 数据处理与移位模块 (绿色部分)

这是 I2C 通信的核心数据通路,负责数据的串并转换和过滤。

  • 数据寄存器 (DR):这是 CPU 与 I2C 外设交换数据的地方。
    • 发送时:CPU 把数据写入 DR。
    • 接收时:CPU 从 DR 读取收到的数据。
  • 数据移位寄存器:负责将并行数据转换为串行数据(发送时),或将串行数据转换为并行数据(接收时)。它直接连接到 SDA 线进行位传输。
  • 比较器:用于从机模式。当主机发送地址时,硬件会将总线上的地址与"自身地址寄存器"里的值进行比较,如果匹配,则选中该从机。
  • 自身地址寄存器 / 双地址寄存器:存储 STM32 作为从机时的地址。
  • PEC 计算 / PEC 寄存器:用于数据包错误校验(Packet Error Checking),这是 SMBus 协议特有的功能,用于验证数据完整性。

4. 控制逻辑与状态模块 (黄色部分)

这部分是 I2C 外设的"大脑",负责协调各个模块的工作,并向 CPU 报告状态。

  • 控制寄存器 (CR1 和 CR2):用户通过写这些寄存器来开启 I2C、配置应答使能、启动/停止传输等。
  • 状态寄存器 (SR1 和 SR2):反映当前的通信状态(例如:发送寄存器为空、接收寄存器非空、地址已发送、总线忙等)。CPU 通过读取这些寄存器来判断下一步该做什么。
  • 控制逻辑:根据 CR 寄存器的设置和当前的通信状态,自动控制时序的产生(如产生起始信号、停止信号、应答信号)。
  • 中断 / DMA 请求:当特定事件发生(如数据接收完成)时,硬件会自动向 CPU 发送中断请求或 DMA 请求,从而减少 CPU 的负担,提高传输效率。
相关推荐
qq_284274056 小时前
机械原理笔记:平面机构自由度计算(复合铰链、局部自由度、虚约束)与四杆机构入门(含考点)
笔记·学习·平面·自动化·制造
qq_284274057 小时前
数控铣床与加工中心笔记:铣刀与刀柄系统、G54试切对刀、镜像加工指令、孔加工工艺(钻扩铰镗)与固定循环G73/G83/G81/G76/G87/G84
笔记·学习·自动化·制造
Titan20248 小时前
MySQL访问个人学习笔记
笔记·学习·mysql
宵时待雨8 小时前
STM32基础1:嵌入式历史与生态
stm32·单片机·嵌入式硬件
zhangzhangkeji8 小时前
stm32 14-1 WDG 看门狗:理论部分
stm32
不会代码的小猴9 小时前
启动文件
stm32·嵌入式硬件
深圳老胡9 小时前
STM32CubeMX 生成 CMake 工程,用 VSCode 编译与调试的完整流程
笔记·stm32·单片机·代码规范
坤坤子吖9 小时前
C++智能指针:RAII、shared_ptr与内存泄漏
开发语言·c++·笔记·学习
甜甜的大香瓜9 小时前
【MT32F006】MT32F006之Timer定时
单片机
甜甜的大香瓜9 小时前
【MT32F006】MT32F006之读写内部EEPROM
单片机