【STM32笔记3】I2C的时序解读与软件模拟(即软件I2C的实现,另有软I2C与硬I2C的差异说明)

STM32硬件I2C时序配置和最高速度测试 关于timing参数的最小时间单位,我的理解是时钟树配给I2C的频率除去预分频就是了 ,例如160M主频如果不分频,那么timing的数字就表示多少个(1/160M)秒,但实测并不是这样,似乎时钟树提供给I2C的时钟首先已经被分频了一次,大约已经给到了10分频。SDADEL和SCLDEL可以参考下图我框出来的,I2C在SCL高电平时数据有效,这个时间主要就是为了防止SCL高电平时SDA数据还没准备好,可以想象大部分情况下给到0其实也不会有问题,但原则上还是至少给1避免不稳定因素。这是一个32bit寄存器。 阅读详情
AI摘要

本文详细介绍了I2C总线的原理及应用,包括I2C总线的信号类型、时序图、数据传输过程,以及使用STM32进行I2C通信的软件与硬件实现差异。通过实战经验分享,深入解析I2C通信机制。

一、I2C简介

1、IIC(Inter-Integrated Circuit)总线是一种由PHILIPS公司开发的两线式串行总线,用于连接微控制器及其外围设备。它是由数据线 SDA 和时钟 SCL 构成的串行总线,可发送和接收数据。 在 CPU 与被控 IC 之间、IC 与 IC 之间进行双向传送,高速 IIC 总线一般可达 400kbps 以上;

2、I2C 总线在传送数据过程中共有三种类型信号,它们分别是:开始信号、结束信号和应答信号。

开始信号:SCL 为高电平时,SDA 由高电平向低电平跳变,开始传送数据; 

结束信号:SCL 为高电平时,SDA 由低电平向高电平跳变,结束传送数据; 

应答信号:接收数据的 IC 在接收到 8bit 数据后,向发送数据的 IC 发出特定的低电平脉冲, 表示已收到数据。CPU 向受控单元发出一个信号后,等待受控单元发出一个应答信号,CPU 接 收到应答信号后,根据实际情况作出是否继续传递信号的判断。若未收到应答信号,由判断为受控单元出现故障;

注: 起始信号是必需的,结束信号和应答信号,都可以不要。

二、I2C总线数据传输的总时序图(主要参考start、ack、stop三大信号的产生与运用)

1、start信号的实现

2、ack信号的实现(附不产生ack信号的实现)

3、stop信号的实现

4、一个字节大小的数据的send与read(注:都是由MSB-高位到LSB-低位)

 

三、指定地址读取I2C芯片内部的一个字节大小的数据的时序图(此处以24Cxx芯片为例,主要参考其软件模拟实现方式)

 

 四、指定地址写入I2C芯片内部的一个字节大小的数据的时序图(此处以24Cxx芯片为例,主要参考其软件模拟实现方式)

另:

1、I2C-24C02的初始化函数 

2、个人时序总结笔记

3、I2C软件实现与硬件实现的差异 

所谓硬件I2C对应芯片上的I2C外设,有相应I2C驱动电路,其所使用的I2C管脚也是专用的;软件I2C一般是用GPIO管脚(只不过此处所用到的GPIO口恰巧是芯片内部硬件I2C所分配的复用引脚PB6、PB7),用软件控制管脚状态以模拟I2C通信波形。

(1)硬件I2C的效率要远高于软件的,而软件I2C由于不受管脚限制,接口比较灵活。模拟I2C 是通过GPIO,软件模拟寄存器的工作方式,而硬件(固件)I2C是直接调用内部寄存器进行配置。如果要从具体硬件上来看,可以去看下芯片手册,因为固件I2C的端口是固定的;

(2)从底层配置上看,比如IO口配置,如果配置了IO口的功能(IIC功能)那就是固件IIC,否则就是模拟,可以看IIC写函数,看里面有木有调用现成的函数或者给某个寄存器赋值,如果有,则肯定是固件IIC功能,没有的话肯定是数据一个bit一个bit模拟发生送的,肯定用到了循环,则为模拟;

(3)从代码量判断,模拟的代码量肯定比固件的要大。且硬件IIC用法比较复杂,模拟IIC的流程更清楚一些;硬件IIC速度比模拟快,并且可以用DMA;模拟IIC可以在任何管脚上,而硬件只能在固定管脚上;

附:此文为本人经STM32实战后总结所得,欢迎大家参考指点,谢谢。

STM32硬件I2C与软件模拟实现详解 I2C总线作为嵌入式系统中广泛使用的串行通信协议,采用双线制设计(SCL时钟线和SDA数据线)实现主从设备间的数据交互。其开漏输出结构和线与逻辑确保了多设备共享总线时的可靠性,标准模式支持100kHz通信速率。在STM32开发中,硬件I2C外设通过精确的时序控制实现高效通信,而软件模拟方案则提供引脚配置的灵活性。通过分析总线物理层特性、协议层时序规范以及STM32的硬件实现机制,开发者可以掌握I2C在传感器连接(如OLED屏幕驱动)和模块通信等场景的应用要点,其中硬件I2C初始化配置和软件模拟的GPIO时序 阅读详情

相关推荐

STM32/ATtiny26 GPIO软件模拟I²C通讯:从时序原理到主从机实现

I²C(Inter-Integrated Circuit)是一种广泛使用的串行通信协议,仅需两根信号线(SCL时钟线和SDA数据线)即可实现多设备间的数据交换。在STM32开发中,硬件I²C外设虽然使用方便,但在某些场景下(如引脚复用冲突、外设资源不足或需要灵活控制时序)并不适用。此时,通过GPIO软件模拟I²C成为一种实用且灵活的替代方案。本文将以STM32单片机为例,详细介绍如何仅使用4个GPIO引脚(主机和从机各占用SCL、SDA两根线)实现I²C通讯。

m0_73354873的博客 359

I2C的6个时序

主机和从机的输出,如果设置为推挽输出模式,输出高电平时为强上拉,输出低电平时强下拉。但如果没有配置好主机和从机的发送时序,二者同时发送,一个发送高电平一个发送低电平会造成短路。(开漏模式下输出高电平就相当于断开引脚,所以在输入之前可以直接输出高电平,不需要再切换成输出模式。但是为了兼容重复起始条件sr,sr最开始的SCL是低电平,SDA电平不敢确定,为保险起见,趁SCL低电平时拉高SDA(否则SCL高电平期间读数据,读到的SDA有可能是0)如果SCL和SDA都是低电平,先释放SCL再释放SDA就行。

ble123456789的博客 3354

I2C协议从原理到实战:时序解析、软件模拟与调试指南

I2C(Inter-Integrated Circuit)是一种广泛应用的同步、半双工串行通信总线协议,其核心原理在于仅使用两根信号线(SDA和SCL)即可实现多设备间的通信。该协议通过严格的时序控制、地址寻址和应答机制,确保了数据在主从设备间可靠传输。其技术价值在于极大地简化了硬件连接,节省了微控制器的IO引脚资源,成为连接低速外设的通用标准。在嵌入式系统、传感器网络和芯片间通信等应用场景中,I2C协议是读取温度传感器、配置EEPROM和驱动OLED屏幕等任务的关键技术。然而,其调试过程常面临挑战,例如时

weixin_34124651的博客 444

[技术讨论]STM32硬件IIC和软件IIC的比较

其中,iic_init()函数用于初始化GPIO,iic_start()函数用于发送起始信号,iic_stop()函数用于发送停止信号,iic_send_ack()函数用于发送ACK信号,iic_send_nack()函数用于发送NACK信号,iic_send_byte()函数用于发送一个字节,iic_receive_byte()函数用于接收一个字节,iic_write_reg()函数用于写一个寄存器,iic_read_reg()函数用于读一个寄存器。如果需要高速通信,建议选择硬件IIC;

ic2121的博客 3165

《STM32单片机基础入门》 - 第9章:I2C通信

【代码】《STM32单片机基础入门》 - 第9章:I2C通信。

2301_79143213的博客 879

I²C总线原理与STM32软件模拟实现详解

I²C(Inter-Integrated Circuit)是一种同步、半双工、多设备共享的串行通信协议,广泛应用于嵌入式系统中芯片间低速控制交互,如传感器配置、EEPROM读写和OLED显示驱动。其核心依赖开漏输出、上拉电阻与地址寻址机制,实现线与逻辑、主从仲裁与ACK应答等关键功能。相比UART等异步协议,I²C通过主机统一提供SCL时钟,规避了波特率匹配难题,但对时序精度、电气设计和软件状态机实现提出更高要求。在STM32工程实践中,软件模拟I²C因其时序可控、故障可诊断、跨平台可移植等优势,常被优先选

weixin_35935514的博客 41

I2C基本概念讲解(时序,架构,速率)

I2C是一种同步串口总线的协议,由NXP公司设计。使用一主多从的设计框架,本文从基础出发,主要讲解I2C基本概念讲解(时序,架构,速率),分析IIC的时序图,以及拆分讲解IIC时序的各个部分内容

HCD9701的博客 6189

南京银行信息技术岗提前批笔试与面试

1、笔试 笔试大致可以分为三部分:性格测试、行测题目、专业知识 性格测试 性格测试一般会有较多的体量,可能一共大概有一百多道接近两百道的样子,这个是不限时的。 前面有100道是这样的题目,就是有四个选项都是各种形容词,然后分别选出最符合自己的与最不符合自己的选项。这种题你就顺着自己的潜意识填就行了,但是前后要一致,我怀疑他出这么多题,可能就是考一考你记不记得前面填了啥。比如你做到第90题的时候,可能会出现和前面第2题类似的四个形容词,更有甚者就是一模一样的,你要对自己之前选的什么有个比较清楚的记忆。

qq_40971025的博客 6921

I2C通信时序图解析

一、I2C协议简介   I2C 通讯协议(Inter-Integrated Circuit)是由 Phiilps 公司开发的,由于它引脚少,硬件实现简单,可扩展性强,不需要 USART、CAN 等通讯协议的外部收发设备,现在被广泛地 使用在系统内多个集成电路(IC)间的通讯。  关于I2C协议的更多内容,可阅读《I2C总线协议》,本博文主要分析I2C波形图,对于I2C的基础知识不在做...

Y15613153828的博客 1万+

Ubuntu22.04+Docker一键部署Autoware Universe避坑指南(附鱼香ROS配置)

本文详细介绍了在Ubuntu22.04系统中使用Docker一键部署Autoware Universe的完整流程,包括鱼香ROS工具链配置、Docker环境优化及VSCode开发环境集成。通过实战指南帮助开发者快速搭建自动驾驶开发环境,解决常见部署问题,提升开发效率。

weixin_29254673的博客 414

西安电子科技大学841学长经验分享(总成绩第三名)

西安电子科技大学841学长经验分享(总成绩第三名)

qq_30953547的博客 1082

江协科技STM32学习- P34 I2C通信外设

从 2024/06/12 定下计划开始学习下江协科技STM32课程,接下来将会按照哔站上江协科技STM32的教学视频来学习入门STM32 开发,本文是视频教程 P2 STM32简介一讲的笔记。

小狗爱吃黄桃罐头的博客 1323

国密USB Key开发实战:SKF库调用全流程解析(附代码示例)

本文详细解析了国密USB Key开发中SKF库的调用全流程,涵盖从设备枚举、应用容器遍历到数字签名与验证的核心步骤。通过实战代码示例,深入探讨了SKF库的层次化模型、SM2签名实现细节以及纯软件验签方案,为开发电子签章、安全登录等合规应用提供了一套完整的调用开发指南。

oo7890的博客 524

软件I2C主从模式实现:基于STM32的完整示例

通过STM32平台深入讲解软件I2C的主从通信机制,结合实际代码演示软件i2c的完整实现流程,帮助开发者掌握灵活、可移植的总线控制方法。

weixin_30838971的博客 758

网络系统实现技术之IPX与SPX

IPX/SPXNovell NetWare网络Novell公司为适应网络发展,将主机网络转换为PC网络,开发了Novell NetWare网络系统。该系统中基于客户机/服务器模式。以普通PC机做为客户机,以性能强大的服务器做为服务器,为客户机提供文件服务、数据库服务及其他服务。与前面的SNA模型一样,Novell NetWare也早于OSI模型,所以不能与OSI模型严格对应,但也有很明

成片的大树 9164

【AUTOSAR-DEM】-2.1-APP SWC设置UDS/OBD DTC检出和恢复

点击返回「《Autosar_BSW高阶配置》总目录」 案例背景(共6页精讲): DEM模块提供两种不同类型的Event: • BSW-related events:DEM_EVENT_KIND_BSW(通过C-API报告 - Dem_SetEventStatus) • SW-C-related events:DEM_EVENT_KIND_SWC(通过RTE operation - SetEventStatus) 下面我们讲讲在APP SWC中设置BusOff(总线关闭) DTC故障成立/恢复(其它

「汽车电子助手」的博客 3944

STM32标准库-I2C通信

本文介绍了I2C通信协议及其在MPU6050传感器中的应用。I2C采用双线制(SCL时钟线、SDA数据线)实现主从设备间通信,具有多主多从、硬件简单等特点。文章详细解析了I2C的时序单元(起始/停止信号、数据有效性、应答机制)和硬件结构(移位寄存器、地址匹配、时钟控制等模块)。以STM32为例展示了硬件I2C的初始化及主机发送流程代码。MPU6050部分重点说明其集成三轴加速度计/陀螺仪的硬件电路和内部框图,传感器数据经ADC转换后通过I2C接口传输。全文通过时序图、电路图与代码相结合,系统阐述了I2C通信

weixin_50242782的博客 1281

【在 WSL2 GUI 中使用 pulseaudio 播放声音】

最近在搞一个Linux项目,由于WSL2中需要用到声音外放,无奈只能潜心研究。后来就使用了一种折中的方式替代,那就是pulseaudio。目前来讲WSL2对硬件外设的支持还是不太友好,关于USB的支持我之前在其他文章中已经论述过了,这里不讨论。1、Windows11别忘记打开声音2、可能有一定延迟,因为是通过网络传输的。3、效果的话只能见仁见智了,如果不能满足要求就安装一个实实在在的Ubuntu吧!

jiexijihe945的博客 4530

使用逻辑分析仪调试STM32 I2C时序:操作指南

通过逻辑分析仪深入观测STM32的I2C时序,精准定位通信问题,提升调试效率。掌握I2C时序波形解析方法,让嵌入式开发更高效可靠。

weixin_34779181的博客 970

【北大核心-代码复现】基于 VMD-FFCM-iTransformer 光伏功率短期预测

【北大核心-代码复现】基于 VMD-FFCM-iTransformer 光伏功率短期预测

766

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

从软件模拟到硬件加速:深入对比STM32的I2C实现方式及其对系统性能的影响

本文深入对比STM32的软件模拟与硬件I2C实现方式,重点分析其对系统性能的影响。硬件IIC配合连续多字节读取技术可大幅降低CPU资源占用,显著提升MPU6050等传感器数据采集效率,适用于对实时性要求高的嵌入式应用场景。

l3m4n的博客 956

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

STM32单片机入门学习——第34节: [10-4] I2C通信外设

本次笔记是用来记录我的学习过程,同时把我需要的困难和思考记下来,有助于我的学习,同时也作为一种习惯,可以督促我学习,是一个激励自己的过程,让我们开始32单片机的学习之路。欢迎大家给我提意见,能给我的嵌入式之旅提供方向和路线,现在作为小白,我就先学习32单片机了,就跟着B站上的江协科技开始学习了.在这里会记录下江协科技32单片机开发板的配套视频教程所作的实验和学习笔记内容,因为我之前有一个开发板,我大概率会用我的板子模仿着来做.让我们一起加油!

qq_44764442的博客 1069

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

STM32驱动24C02 EEPROM:I2C时序详解与硬件/软件模拟方案对比

I2C总线是一种广泛使用的同步串行通信协议,通过SCL和SDA两根线实现主从设备间的数据传输,其开漏输出结构要求外接上拉电阻,通信速率可达100kHz或400kHz。在嵌入式系统中,I2C常用于连接EEPROM、传感器和显示屏等外设,实现配置存储和数据采集。STM32微控制器提供了硬件I2C外设,但配置复杂且存在稳定性问题,而软件模拟I2C则通过GPIO和延时函数灵活控制时序,更适合低速设备如24C02 EEPROM。24C02作为2Kbit存储芯片,读写操作需严格遵循时序要求,包括起始条件、设备地址、应答

weixin_28278377的博客 200

从零到一:STM32C8T6的GPIO模拟I2C驱动OLED避坑指南

本文详细介绍了如何在STM32C8T6微控制器上通过GPIO模拟I2C协议驱动OLED显示屏。内容涵盖硬件连接、STM32CubeIDE环境配置、精确时序控制、信号完整性分析以及常见故障排查技巧,帮助开发者避开常见陷阱,高效实现OLED显示驱动。

nnn11的博客 873

STM32软件模拟I2C读写AT24C02:时序详解与调试经验

I2C总线是嵌入式系统中应用最广泛的通信协议之一,几乎所有传感器、屏幕和存储芯片都依赖它进行数据交互。理解I2C的起始、停止、应答和数据有效性时序,是掌握该协议的基础。而AT24C02作为经典的EEPROM芯片,是实践I2C通信的理想对象。本文以STM32F103为例,采用软件模拟I2C的方式驱动AT24C02,详细讲解GPIO配置、读写时序、上拉电阻选择及5V转3.3V供电等硬件设计要点。通过逻辑分析仪验证波形,可快速定位总线卡死、地址错误等常见问题。该方案不仅适用于教学入门,也能为需要掉电保存数据的实际

weixin_34387468的博客 429

STM32 GPIO模拟I2C实战:从时序到代码,解决硬件I2C痛点

在嵌入式开发中,I2C总线是连接传感器、EEPROM和显示屏最常用的通信方式之一。然而,硬件I2C外设的引脚固定、调试困难等问题常让开发者头疼。GPIO模拟I2C凭借其引脚灵活、时序可控、异常恢复简单的优势,成为工程实践中的可靠备选方案。理解I2C协议的开漏结构、上拉电阻、起始停止条件及应答机制,是成功实现软件模拟的基础。通过合理配置STM32的GPIO开漏模式,结合延时控制与逻辑分析仪调试,即可稳定驱动OLED、AT24C02等常见从设备。本文从嵌入式工程师视角,系统讲解IO口模拟I2C的完整流程,涵盖时

weixin_34416754的博客 421
上一篇: 【NB-LOT笔记1】移远BC28&BC95&BC35-G模块+STM32基于TCP\UDP\MQTT三大协议的入网与通信测试例程
下一篇: 【嵌入式-单片机笔记1】处理器(MCU)与外部设备的通信方式(主要就串行通信进行总结)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值