硬件I2C和软件I2C的区别

article/2025/8/3 2:00:04

硬件I2C和软件I2C的区别

一、硬件I2C

1、硬件I²C的局限性及学习意义

尽管硬件I²C外设在STM32等微控制器中提供了标准化的通信支持,但在实际应用中,其稳定性可能存在问题。例如,某些情况下外设会因事件检测异常而进入死锁状态,仅能通过断电复位恢复。尽管如此,掌握硬件I²C的实现方法仍具有重要价值,不仅有助于理解I²C协议本身,还能为后续学习其他通信协议奠定基础。

硬件I²C的工作原理

硬件I²C通过微控制器内置的专用外设实现,其功能类似于USART串口模块。用户仅需配置相关寄存器,外设即可自动生成符合I²C标准的时序信号。与软件模拟不同,硬件I²C无需CPU直接干预引脚电平变化,而是通过寄存器操作控制外设完成通信流程。

软件模拟I²C的实现方式

软件模拟I²C依赖CPU通过GPIO手动模拟协议时序。例如,生成起始信号时,需先将SCL引脚置为高电平,随后在SDA引脚上产生由高到低的跳变,最后拉低SCL电平。这一系列操作完全由程序控制,严格遵循I²C协议的时序要求。

硬件与软件方案的对比

硬件I²C的优势在于降低CPU负载,但其引脚分配通常受限于芯片设计,仅能使用特定功能引脚。相比之下,软件模拟I²C具有更高的灵活性,允许任意GPIO充当SCL和SDA信号线,但会占用更多CPU资源。

2、I2C外设功能框图

3、通信引脚

STM32中有两个I2C外设,硬件I2C必须要使用这些引脚,因为这些引脚才连接到I2C引脚,就比如说PB6与PB7引脚就连接到芯片内部的I2C1外设。

在硬件设计中,STM32主控芯片的I2C接口默认配置为PB6(SCL)和PB7(SDA)引脚。然而,实际电路连接中,EEPROM存储器的SCL和SDA信号线并未与这两个引脚直接相连,而是分别接至PC12和PC11端口。为实现正常的I2C通信功能,需要通过外部飞线将PB6与PC12、PB7与PC11进行对应连接。这种跨接方式最终实现了STM32的I2C接口引脚与EEPROM器件之间的信号通路建立,从而构成完整的I2C总线系统。

4. STM32的I2C外设通信机制(核心功能解析)

4.1 I2C工作模式配置

STM32的I2C接口支持四种基本工作模式,分别是:

- 主设备发送模式(Master Transmitter)

- 主设备接收模式(Master Receiver)

- 从设备发送模式(Slave Transmitter)

- 从设备接收模式(Slave Receiver)

在默认情况下,I2C模块初始化为从模式(Slave Mode)。工作模式会在以下两种情况下动态切换:

- 从模式切换到主模式:当接口主动发起起始信号(Start Condition)时自动进行。

- 主模式切换回从模式:当检测到总线仲裁失败(Arbitration Loss)或生成停止信号(Stop Condition)时发生。这种设计支持多主设备(Multi-Master)总线架构,允许多个主设备在同一总线上进行通信。

4.2 主从模式功能定义

- **主模式(Master Mode)**:在这种模式下,STM32充当总线主机,负责发起通信并生成时钟信号(SCL),可以作为发送端或接收端。

- **从模式(Slave Mode)**:在这种模式下,STM32作为从设备,响应主机的指令并传输数据。

4.3 主模式工作机制

**模式切换条件**:

I2C接口默认处于从模式,需要通过置位控制寄存器的START位来产生起始信号,从而切换至主模式。

**数据传输控制**:

主设备负责初始化数据传输,包括以下步骤:

- 产生起始条件(Start Condition)以启动通信;

- 输出同步时钟(SCL);

- 发送停止条件(Stop Condition)以终止通信。

起始信号触发后,硬件会自动将设备配置为主模式,并接管总线控制权。在主模式下,完整的通信周期必须包含起始信号与停止信号,这是确保协议时序正确性的关键。

**关键点**:

- 在主模式下,STM32必须精确控制时钟信号(SCL)和数据信号(SDA),以符合I2C协议的要求。

- 主设备在通信过程中需要处理总线仲裁,确保在多主设备环境中能够成功传输数据。

- 停止信号的生成标志着一次通信周期的结束,同时也是下一次通信的准备。

通过这些详细的配置和控制,STM32的I2C接口能够灵活地适应不同的通信需求,无论是作为主设备还是从设备,都能有效地进行数据传输。

二、EEPROM与硬件I2C的协同关系

硬件I2C与EEPROM的通信关系解析** 

1. 硬件I2C的作用** 

硬件I2C(Inter-Integrated Circuit)是STM32等微控制器内置的串行通信接口,采用**同步、半双工**方式,通过**SCL(时钟线)**和**SDA(数据线)**两根信号线与外部设备通信。其核心优势包括: 

- **硬件自动处理时序**(无需软件模拟时钟信号); 

- **支持标准(100kHz)、快速(400kHz)和高速(1MHz及以上)模式**; 

- **多主设备仲裁机制**,避免总线冲突。 

2. EEPROM的I2C接口特性

EEPROM(Electrically Erasable Programmable Read-Only Memory)是一种可通过I2C接口访问的非易失性存储器,典型型号如**AT24Cxx系列**,其关键特性包括: 

- **依赖I2C协议进行读写**:所有操作(地址寻址、数据写入、数据读取)均需遵循I2C时序; 

- **从设备地址固定**:通常由硬件引脚(A0~A2)设置,例如AT24C02的默认地址为**0xA0**(写)/ **0xA1**(读); 

- **页写入与单字节操作**:支持按字节或分页(如16字节/页)写入,需严格遵循时序间隔。 

3. 硬件I2C与EEPROM的协同工作流程

1. 初始化配置

   - STM32的I2C外设需配置为**主模式**,并设置: 

     - 时钟频率(与EEPROM兼容,如100kHz); 

     - 自身引脚(如PB6/PB7或重映射引脚)与EEPROM的SCL/SDA连接。 

2. 数据传输过程

   - **写操作**: 

     1. 主机(STM32)发送**起始信号(Start)**; 

     2. 发送EEPROM的**设备地址 + 写标志(0)**; 

     3. 发送待写入的**存储单元地址**; 

     4. 发送数据字节(单字节或页写入); 

     5. 终止通信(Stop信号)。 

   - **读操作**: 

     1. 主机先发送设备地址 + 写标志,写入目标存储地址; 

     2. 重新发送起始信号,切换为读模式(设备地址 + 读标志1); 

     3. 接收EEPROM返回的数据,最后发送NAK/Stop结束。 

3. 关键注意事项 

   - **电气兼容性**:需确保总线上拉电阻(通常4.7kΩ)正确连接; 

   - **时序严格性**:EEPROM的写入周期(如5ms)需通过延时或轮询ACK保证; 

   - **错误处理**:硬件I2C应启用中断/DMA,检测总线错误(如仲裁丢失、无应答)。 

4. 硬件I2C对比软件模拟的优势** 

特性       ​软件 I²C ​硬件 I²C

​实现方式       通过 GPIO 引脚模拟 I²C 时序(软件控制)  使用 MCU 内置的硬件 I²C 外设(硬件控制)

​CPU 占用      高(需 CPU 持续操作 GPIO) 低(硬件自动完成时序,CPU 可处理其他任务)

​时序精度       依赖软件延时,精度较低    由硬件时钟控制,精度高且稳定

​开发复杂度    简单(无需配置复杂寄存器)    复杂(需初始化外设、处理中断/DMA)

​灵活性    高(可适配任意 GPIO 引脚)   低(必须使用硬件 I²C 外设的固定引脚)

​速度       较慢(受限于软件延时)    较快(支持标准模式 100kHz、快速模式 400kHz+)

​兼容性    通用性强(可适配不同 MCU) 依赖具体 MCU 的硬件支持

5. 典型问题与解决方案

- **通信失败**: 

  - 检查SCL/SDA线路连接、上拉电阻; 

  - 确认设备地址匹配(含硬件引脚电平); 

  - 通过逻辑分析仪捕获时序,排查协议错误。 

- **数据写入异常**: 

  - 遵守EEPROM的页写入限制(如AT24C02每页≤16字节); 

  - 写入后增加足够延时(或查询ACK完成信号)。 

**总结**:硬件I2C为EEPROM提供了高效、稳定的访问方式,其硬件自动化的特性显著降低了软件复杂度,适用于需要高可靠性的嵌入式存储系统。

三、软件I2C        

通过 GPIO 手动控制 SCL 和 SDA 引脚电平,模拟 I²C 时序。

#include "stm32f10x_gpio.h"#include "stm32f10x_rcc.h"/* 宏定义(修改为PB6/PB7引脚) */#define SOFT_I2C_SCL_PIN    GPIO_Pin_6  // PB6作为SCL#define SOFT_I2C_SDA_PIN    GPIO_Pin_7  // PB7作为SDA#define SOFT_I2C_PORT       GPIOB/* 初始化函数(开漏模式+上拉) */void Soft_I2C_Init(void) {GPIO_InitTypeDef GPIO_InitStruct;// 使能GPIOB时钟RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);// 配置SCL和SDA为开漏输出(实际需外接上拉电阻)GPIO_InitStruct.GPIO_Pin = SOFT_I2C_SCL_PIN | SOFT_I2C_SDA_PIN;GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_OD;  // 开漏输出GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(SOFT_I2C_PORT, &GPIO_InitStruct);// 初始状态拉高总线GPIO_SetBits(SOFT_I2C_PORT, SOFT_I2C_SCL_PIN);GPIO_SetBits(SOFT_I2C_PORT, SOFT_I2C_SDA_PIN);}/* 精确延时(基于SysTick或NOP指令) */static void Delay_us(uint32_t us) {us *= (SystemCoreClock / 1000000) / 5;  // 根据主频校准while(us--) __NOP();}/* 产生起始信号 */void Soft_I2C_Start(void) {GPIO_SetBits(SOFT_I2C_PORT, SOFT_I2C_SDA_PIN);GPIO_SetBits(SOFT_I2C_PORT, SOFT_I2C_SCL_PIN);Delay_us(5);GPIO_ResetBits(SOFT_I2C_PORT, SOFT_I2C_SDA_PIN);  // SDA下降沿Delay_us(5);GPIO_ResetBits(SOFT_I2C_PORT, SOFT_I2C_SCL_PIN);  // SCL拉低准备数据传输}/* 产生停止信号 */void Soft_I2C_Stop(void) {GPIO_ResetBits(SOFT_I2C_PORT, SOFT_I2C_SCL_PIN);GPIO_ResetBits(SOFT_I2C_PORT, SOFT_I2C_SDA_PIN);Delay_us(5);GPIO_SetBits(SOFT_I2C_PORT, SOFT_I2C_SCL_PIN);    // SCL上升沿Delay_us(5);GPIO_SetBits(SOFT_I2C_PORT, SOFT_I2C_SDA_P


http://www.hkcw.cn/article/EQutIExXUG.shtml

相关文章

PyCharm接入DeepSeek,实现高效AI编程

介绍本土AI工具DeepSeek如何结合PyCharm同样实现该功能。 一 DeepSeek API申请 首先进入DeepSeek官网:DeepSeek 官网 接着点击右上角的 “API 开放平台“ 然后点击API keys 创建好的API key,记得复制保存好 二 pycharm 接入deepseek 首先打开PyCh…

大模型-attention汇总解析之-MQA

MQA,即 “Multi-Query Attention”,是减少 KV Cache 的一次的一种大胆尝试,首次提出自《Fast Transformer Decoding: One Write-Head is All You Need》, 在2019 年减少 KV Cache 就已经是研究人员非常关注的一个课题了。MQA 的思…

华为OD机试真题——游戏分组王者荣耀(2025A卷:100分)Java/python/JavaScript/C/C++/GO最佳实现

2025 A卷 100分 题型 本专栏内全部题目均提供Java、python、JavaScript、C、C++、GO六种语言的最佳实现方式; 并且每种语言均涵盖详细的问题分析、解题思路、代码实现、代码详解、3个测试用例以及综合分析; 本文收录于专栏:《2025华为OD真题目录+全流程解析+备考攻略+经验分…

主流 AI IDE 之一的 Windsurf 使用入门

一、Windsurf 的常见入门界面 以上是本次展示Windsurf版本信息。 1.1 个人配置中心 1.2 AI 助手快捷设置 1.3 使用额度查看页面 1.4 智能助手 Windsurf 编辑器中 AI 助手名称 :Cascade 。打开 Cascade 窗口,开始聊天就可以了。方框里有写和聊两种状态锁…

大数据量下的数据修复与回写Spark on Hive 的大数据量主键冲突排查:COUNT(DISTINCT) 的陷阱

背景与问题概述 这一周(2025-05-26-2026-05-30)我在搞数据拟合修复优化的任务,有大量的数据需要进行数据处理及回写,大概一个表一天一分区有五六千万数据,大约一百多列的字段。 具体是这样的我先取档案&#x…

长尾关键词优化驱动SEO增长

内容概要 在搜索引擎优化领域,长尾关键词的精细化运营已成为突破流量瓶颈的核心突破口。相较于通用型关键词,长尾词凭借其低竞争度、高转化潜力的特性,能够精准捕捉用户搜索意图,为网站带来更具价值的自然流量。本文将从战略定位…

数字孪生驱动的智慧水务管网智能运维系统实践

引言:数字孪生赋能城市水务基础设施智能化转型 在新型智慧城市架构中,地下供水管网作为城市生命线工程,其数字化重构已成为市政基础设施现代化的核心命题。本文以某省会城市智慧水务示范项目为蓝本,系统阐述数字孪生技术在供水管…

数据资产——立法与实操指南

5月27日,数据资产一千零一夜,华东数交周二夜谈第三十三期圆满结束,上海国瓴律师事务所首席合伙人、管理委员会主席高慧、天册(上海)律师事务所律师邓亚军;数据宝网络科技有限公司数据资产研究院高级研究员王国辉共同围绕“数据资产…

放假带出门的充电宝买哪种好用耐用?倍思超能充35W了解一下!

端午节的到来和毕业季的临近,让很多人开始计划出游或长途旅行。而在旅途中,一款好用耐用的充电宝可以省不少事。今天,我们就来聊聊放假带出门的充电宝买哪种好用耐用,看看为什么倍思超能充35W更适合带出门~ 一、为什么需要一款好用…

ONLYOFFICE文档API:更强的安全功能

在数字化办公时代,文档的安全性与隐私保护已成为企业和个人用户的核心关切。如何确保信息在存储、传输及协作过程中的安全,是开发者与IT管理者亟需解决的问题。ONLYOFFICE作为一款功能强大的开源办公套件,不仅提供了高效的文档编辑与协作体验…

day14 leetcode-hot100-27(链表6)

21. 合并两个有序链表 - 力扣(LeetCode) 1. 暴力法 思路 创建一个空节点,用来组装这两个链表,谁小谁就是下一个节点。 知识 创建空节点:ListNode n1 new ListNode(-1); 具体代码 /*** Definition for singly-l…

DALI DT6与DALI DT8介绍

“DT”全称Device Type,是DALI-2 标准协议中的IEC 62386-102(即为Part 102)部分对不同类型的控制设备进行一个区分。不同的Device Type代表不同特性的控制设备,也代表了这种控制设备拥有的扩展的特性。 在DALI(数字可寻址照明接口&#xff09…

【自然语言处理】——基于与训练模型的方法【复习篇1】

本系列文章主要通过课本课后题目的方式来进行期末复习,很多知识分析的可能会比较浅,所以还请大佬们及时指正,我们可以在评论区讨论交流! 2.1 基于规则与基于机器学习的自然语言处理方法分别有哪些优缺点? 【先总结来讲…

Golang——2、基本数据类型和运算符

基本数据类型和运算符 1、基本数据类型1.1、整形1.2、浮点型1.3、布尔值1.4、字符串1.5、byte和rune类型1.6、修改字符串 2、基本数据类型之间的转换2.1、数值类型之间的相互转换2.2、其他类型转换成string类型2.3、string类型转换成数值类型 3、Golang中的运算符3.1、算数运算…

服务器如何配置防火墙管理端口访问?

配置服务器防火墙来管理端口访问,是保障云服务器安全的核心步骤。下面我将根据你使用的不同操作系统(Linux: Ubuntu/Debian/CentOS;Windows Server)介绍常用防火墙配置方法。 ✅ 一、Linux 防火墙配置(UFW / firewalld…

4.2.2 Spark SQL 默认数据源

在本实战概述中,我们探讨了如何在 Spark SQL 中使用 Parquet 格式作为默认数据源。首先,我们了解了 Parquet 文件的存储特性,包括其二进制存储方式和内嵌的 Schema 信息。接着,通过一系列命令,我们演示了如何在 HDFS 上…

4.0/Q2,GBD数据库最新文章解读

文章题目:Global burden of Type 2 Diabetes Mellitus attributable to dietary risks in elderly adults: insights from the Global Burden of Disease study 2021 DOI:10.3389/fnut.2025.1557923 中文标题:老年人饮食风险导致的 2 型糖尿病…

mobile app 工具简要对比

支持mobile app UI自动化测试的工具比较多,其中使用时间很长,应用很广泛的有appium,前面博客也详细介绍过appium webdriverio工具的特点,此篇博客将介绍之前项目实际使用或者调研过的mobile app ui工具,最后再对多个工…

【Doris基础】Apache Doris业务场景全解析:从实时数仓到OLAP分析的完美选择

目录 1 Doris核心能力概述 2 实时数据分析场景 2.1 实时数据仓库 2.2 实时监控与告警 3 交互式OLAP分析场景 3.1 自助式BI分析 3.2 用户行为分析 4 大数据分析场景 4.1 日志分析系统 4.2 时序数据处理 5 Doris技术架构适配性分析 5.1 适合Doris的场景特征 5.2 不适合Doris的场景…

投稿 IEEE Transactions on Knowledge and Data Engineering 注意事项

投稿 IEEE Transactions on Knowledge and Data Engineering 注意事项 要IEEE overleaf 模板私信,我直接给我自己论文,便于编辑 已经投稿完成了,有一些小坑 准备工作 注册IEEE账户:若没有IEEE账户,需前往IEEE官网注册。注册成功后,可用于登录投稿系统。现在新的系统,…