野火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 的负担,提高传输效率。
相关推荐
sbjdhjd8 小时前
网工进阶笔记:H3CSE 园区网全栈技术与协议汇总
网络·笔记·云计算·ssh·网络工程·vlan·aaa
吠品9 小时前
智谱开源 ZCode 之后,真正的考试才开始
单片机·嵌入式硬件·1024程序员节
海绵宝宝的月光宝盒11 小时前
14-AutoCAD-阵列命令应用与案例实战(AR)
经验分享·笔记·自动化·课程设计·制造·学习方法·cad
白山编程大哥13 小时前
接口幂等性是什么?如何设计?
笔记
ACP广源盛1392462567313 小时前
6 盘位存储扩展方案选型笔记:YLB3116 @ACP评估记录
笔记·硬件架构·硬件工程·国产芯片
小李不想当小白13 小时前
SPI通信外设与W25Q64 (硬件SPI)(STM32标准库学习笔记)
笔记·stm32·单片机·嵌入式硬件·学习·嵌入式
LCG米13 小时前
STM32驱动W5500以太网模块实测:TCP吞吐瓶颈定位、TX指针回绕陷阱与断线重连保活落地
stm32·单片机·嵌入式硬件·tcp/ip
创界工坊工作室15 小时前
63-基于STC89C52霍尔传感器的智能化电能表设计
stm32·单片机·嵌入式硬件·51单片机·proteus
weixin_4481199415 小时前
Datawhale Jev Cookbook 202610 笔记3
笔记
姚瑞南15 小时前
【PRD】招投标商机雷达爬虫系统
人工智能·经验分享·笔记·爬虫·产品运营·产品经理