野火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 的负担,提高传输效率。
相关推荐
Mxzx品牌15 小时前
佛山招聘软件哪个好:【帅聘网】匹配度高
笔记·其他·生活
九硕智慧建筑一体化厂家16 小时前
无线动能开关|烘焙后厨防潮免布线照明控制方案
运维·笔记·智慧城市
映翰通朱工16 小时前
Windows 上位机 + EC3320:USB 转 CAN 通信实测(从接线到 SSH 收包)
windows·stm32·ssh
ZZHow102416 小时前
PyTorch深度学习入门笔记(小土堆)P7-14
人工智能·pytorch·笔记·python·深度学习
九硕智慧建筑一体化厂家17 小时前
直流照明|档案库房专用照明,防紫外线、防纸张老化、适配24小时值守
运维·网络·笔记·智慧城市
Funing717 小时前
系列一:STM32 外设初始化
stm32·单片机·嵌入式硬件
prog_610317 小时前
【笔记】用cursor手搓cursor(八)
笔记·llm·大语言模型·agent
一只小菜鸡..17 小时前
南京大学 操作系统 (JYY) 学习笔记:文件系统实现——从 FAT、ext2 到现代 B-Tree 黑科技
笔记·科技·学习
小飞猪。。17 小时前
笔记十八:大模型 RLHF 系统工程实战笔记
人工智能·笔记
XiangrongZ18 小时前
debian中配置stm32的交叉编译环境
运维·stm32·debian