历史上的今天
返回首页

历史上的今天

今天是:2025年12月12日(星期五)

正在发生

2022年12月12日 | 简析STM32 I2C通讯死锁问题

2022-12-12 来源:elecfans

I2C接口是一种使用非常普遍的MCU与外部设备的接口方式,在STM32中也集成了I2C接口,我们也常常使用它来与外围的传感器等设备通讯。


最近在我们使用STM32F1VET6读取压力和温湿度传感器数据时,就是使用I2C接口来实现通讯的。但在使用I2C和STM32F1的标准库读取数据时出现了死机的现象。其现象是这样的,程序可以顺利的运行,但I2C没有数据返回。用示波器查看波形时,发现SCL的电平时钟为高,而SDA的电平时钟为低。如果拔掉对应的设备,SCL的波形则恢复正常。接上设备恢复正常,但运行一会现象依旧。


一开始以为是连接的设备有问题,于是换了一台设备,发现依旧如此。难道真的是I2C出现了死锁现象。那我们看看究竟怎么样的情况下I2C才会发生死锁现象呢?


在I2C主设备进行读写操作的过程中,主设备在开始信号后控制SCL产生8个时钟脉冲,然后拉低SCL信号为低电平,在这个时候,从设备输出应答信号,将SDA信号拉为低电平。如果这个时候主设备异常复位,SCL就会被释放为高电平。此时,如果从设备没有复位,就会继续I2C的应答,将SDA一直拉为低电平,直到SCL变为低电平,才会结束应答信号。


而对于I2C主设备来说.复位后检测SCL和SDA信号,如果发现SDA信号为低电平,则会认为I2C总线被占用,会一直等待SCL和SDA信号变为高电平。这样,I2C主设备等待从设备释放SDA信号,而同时I2C从设备又在等待主设备将SCL信号拉低以释放应答信号,两者相互等待,I2C总线进人一种死锁状态。同样,当I2C进行读操作,I2C从设备应答后输出数据,如果在这个时刻I2C主设备异常复位而此时I2C从设备输出的数据位正好为0,也会导致I2C总线进入死锁状态。


既然判断了是I2C出现了死锁,那我们有什么办法解决了?网上有不少高手提供了多种的解决方案。当然有些方法实现起来不那么容易,因为我们的硬件已经确定,软件业已经编好,做很大的改变是不现实的。


所以我选择在出现死锁时将I2C接口重新配置,并且将对应的GPIO端口配置为输出,并将电位拉高,然后再冲新配置I2C端口,但现象并未消除。于是我们将I2C的时钟也重新使能现象消除。这种不断重置I2C接口的方法虽然能够使得在死锁时能够恢复使用,但不停地解除和配置接口总是感觉并那么理想。


在我们的试验中我们发现,可以从软件和硬件的角度来解决这一问题。首先我们来说下软件方法:在I2C主设备中增加I2C总线恢复程序。每次I2C主设备复位后,如果检测到SDA数据线被拉低,则控制I2C中的SCL时钟线产生9个时钟脉冲(针对8位数据的情况),这样I2C从设备就可以完成被挂起的读操作,从死锁状态中恢复过来。


这种方法有很大的局限性,因为大部分主设备的I2C模块由内置的硬件电路来实现,软件并不能够直接控制SCL信号模拟产生需要时钟脉冲。其次我们说一下硬件方式:如硬件尚可修改,可以增加一个额外的总线恢复设备或者串入一个具有死锁恢复的I2C缓冲器都可以从硬件上解决这个问题。其实我们发现用GPIO模拟I2C通讯时,死锁现象是不会出现的。所以如果硬件不能改变,但软件容易改变时,我们可以考虑使用GPIO来模拟I2C通讯。


推荐阅读

史海拾趣

CALMIRCO公司的发展小趣事

CALMIRCO公司深知合作共赢的重要性,因此积极与上下游企业建立紧密的合作伙伴关系。公司与多家知名芯片制造商、电子设备生产商等建立了长期稳定的合作关系,共同推动产业链的发展。通过资源共享、技术互补等方式,CALMIRCO公司与合作伙伴实现了共赢发展,共同提升了行业竞争力。

EEMB Co Ltd公司的发展小趣事

EEMB集团成立于1995年,初期以外销为主,总部位于武汉东西湖金银湖畔。公司创始人们凭借对电子行业的敏锐洞察力和对锂电池技术的深入研究,决定专注于锂电池的研发与生产。他们组建了一支技术实力强大的研发团队,并开始着手设计和生产高性能的锂电池产品。在初期的几年里,公司逐渐在市场上建立起了一定的声誉,并开始与一些知名的工业企业和设备制造商建立合作关系。

Aplus Flash Technology Inc公司的发展小趣事

随着全球环保意识的提高,电子行业对环保的要求也越来越高。Aplus Flash Technology Inc公司积极响应环保号召,将环保理念融入产品设计和生产过程中。公司研发出了一款低能耗、环保型的闪存芯片,不仅降低了产品的能耗和碳排放,还提高了产品的可回收利用率。这一创新举措得到了消费者的广泛认可和支持,也为公司在市场上树立了良好的环保形象。

HOPERF公司的发展小趣事

成立于1998年的HOPERF,最初是一家专注于无线射频技术的小型创业公司。在那个通信技术日新月异的时代,公司创始人凭借敏锐的市场洞察力和对技术的执着追求,带领团队开始了自主研发之路。初期,HOPERF在无线射频领域不断突破,成功研发出多款具有自主知识产权的射频芯片,为公司的后续发展奠定了坚实的基础。这些技术创新不仅提升了产品的性能,还大大降低了成本,使得HOPERF在竞争激烈的市场中逐渐站稳脚跟。

Aristo-Craft/ L M P Inc公司的发展小趣事

品质是公司的生命线。Aristo-Craft/L M P Inc一直注重品质管理,从原材料采购到生产过程的每一个环节都进行严格把控。公司建立了完善的质量管理体系,并通过了多项国际质量认证。同时,公司还注重品牌建设,通过广告宣传、参加行业活动等方式提高品牌知名度和美誉度。

百蓉(ECE)公司的发展小趣事

面对智能制造的浪潮,百蓉公司积极拥抱变革。他们引进了先进的自动化设备,对生产线进行了全面升级,实现了从手工制造向智能制造的转变。这一转型不仅提高了生产效率,还大幅提升了产品质量和产品的一致性,使得百蓉的产品在市场上更具竞争力。

问答坊 | AI 解惑

IP网络摄像机高分辨率就是质变吗?

IP网络摄像机的质变在哪里?其实很简单,就在于取消了模拟视频的环节。熟悉视频监控系统的人都知道,模拟摄像头+DVS组合实际上就是将模拟视频输出接入到DVS中进行数字化和网络化,而IP摄像头则从视频感光模块开始就已完成数字化,之后的所有环节都 ...…

查看全部问答>

PADS助手:一个很好的软件献给用PADS Logic/Loyout(Power Logic/PCB)的人

[PADS助手]Logic自动编号+鼠标缩放拖拉图纸+键盘替代菜单快捷键 v2.0 Pads助手是一款帮助用户更方便地使用PADS Logic / PADS Layout(Power Logic / Power PCB)画图软件的辅助软件。 目前,Pads助手有三项主要功能: 1. 原理图元件批量编号功能 ...…

查看全部问答>

基于虹膜的人体特征识别方法研究

  人体特征识别方法,也叫生物特征识别方法,是指利用人的独特的生理及行为特征进行鉴别的身份验证的技术手段。它的产生及发展源于人们在迈进数字时代的过程中对身份验证方法的准确性与便捷性不断提高的需求。传统的身份验证方法主要包括身份标志 ...…

查看全部问答>

消费电子领域十大技术趋势

replyreload += \',\' + 373726;Timson,如果您要查看本帖隐藏内容请回复…

查看全部问答>

我想做一个有关防止病毒通过u盘传播的东西

我想做一个能防止通过u盘传播病毒的东西,但我现在对优盘的设计,驱动等方面不太了解。麻烦哪位高手介绍一些该如何入手,有哪些比较好的书。…

查看全部问答>

2440 + CE5.0下的中断驱动问题

小弟做过4.2下的中断驱动,不知道5.0下的中断驱动怎么着手做啊?哪位大哥给点指导啊?…

查看全部问答>

什么书适合VHDL初学者

想买本书看看,书太多不知道选哪本,请教各位啦。 还有谁看过《基于Quartus2的FPGA/CPLD数字系统设计实例》,谈谈感受吧。…

查看全部问答>

SCCB 总线 PK I2C总线

SCCB总线  SCCB是简化的I2C协议,SIO-l是串行时钟输入线,SIO-O是串行双向数据线,分别相当于I2C协议的SCL和SDA。SCCB的总线时序与I2C基本相同,它的响应信号ACK被称为一个传输单元的第9位,分为Don’t care和NA。Don’t care位由从机产 ...…

查看全部问答>

字库GT21H16S2Y

   我正在做LED字幕机,因字比较多需要字库支持,请老师帮忙写个字库GT21H16S2Y取字程序。谢谢裴京2011。07。28…

查看全部问答>

关于红外中断问题

最近在做一个红外调节的时钟  被卡住了  调试了好久就是没做出来  有谁做过能发程序来拜读一下吗 谢谢   由于本人是菜鸟 希望发过来的程序 能修改一下吗  我希望 用ds12c887来做时钟芯片  它的定时中断接 ...…

查看全部问答>