历史上的今天
返回首页

历史上的今天

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

正在发生

2021年12月27日 | STM32 硬件I2C 到底是不是个坑?

2021-12-27 来源:eefocus

/**

******************************************************************************

* @author    Maoxiao Hu

* @version   V1.0.0

* @date       May-2015

******************************************************************************

* < COPYRIGHT 2015 ISE of SHANDONG UNIVERSITY >

******************************************************************************

**/

调试STM32的硬件I2C已经有很长一段时间了,几乎搜遍了所有资料,对于其到底能不能正常工作,今天做一个彻底的研究。

 

下面是我在测试中得到的几个结论:

1、硬件I2C的CLK在50kHz及以下的情况下工作,不会出现任何情况下的卡住。(本人测试时间为20h)

2、硬件I2C的CLK在常用的100kHz和400KHz下工作,99%的概率下会在1小时之内卡住,甚至只有几十秒。

3、硬件I2C的CLK在任何频率下工作,在读取或者发送数据时,都绝对不允许其它中断事件打断它的工作,否则一定会卡住,只是时间问题。

综上,硬件I2C的稳定工作情况是:工作在50kHz及以下,并且保证无其它任何中断打断它的工作。这样只适用于某些对速率要求不高的场所,比如EEPROM的读取等,而对于高速器件例如某些型号的AD芯片,就不能用了。

 

如果你一定需要高速率(400KHz),那么推荐大家使用STM32的替代方案GD32(兆易创新),它与STM32完全兼容但是解决了STM32的硬件I2C bug,经过本人实际测试,在400KHz的情况下工作,48小时无任何错误发生。但是仍需注意的是不能有外部中断打断I2C的工作。

 

对于ST公司推荐的将I2C工作在DMA和最高优先级的中断,我只能说大家可以根据自己的情况使用,因为如果你使用了ucos ii或者其它实时操作系统,那么这种设置最高优先级的方式是绝对不推荐的。如果你是裸机程序,并且任务数量不多,可以考虑这种DMA+中断的方式,否则一定会出现问题,只是测试时间长短问题。

 

最后需要说明的是:

(1)以上只是考虑了最纯粹的硬件I2C代码,对于某些使用了软件弥补的方法,例如在经常卡住的部分设置超时退出,不在本文的讨论范围内,因为这样已经破坏了正常的I2C协议。

(2)由于使用STM32的较高境界是使用中断调度任务而不是死等循环,而硬件I2C对于中断打断十分忌讳,所以随着你的编程和对操作系统理解水平的提高,你会越来越感觉STM32硬件I2C是个坑。

 

所以,STM32的硬件I2C确实是个坑,可以正常工作的环境要求十分苛刻,


推荐阅读

史海拾趣

CUI Inc.公司的发展小趣事

CUI Inc.一直坚信,与客户的紧密合作是其成功的关键。因此,公司始终致力于与客户发展协作性伙伴关系。通过深入了解客户的需求和反馈,CUI不断优化其产品和服务,以满足客户的期望。这种以客户为中心的经营理念不仅赢得了客户的忠诚和支持,还为CUI带来了持续的业务增长和市场份额的扩大。

这些故事只是CUI Inc.在电子行业中发展起来的一部分可能情况。实际上,CUI的发展可能涉及更多的战略决策、市场变化和技术突破。如果需要更具体、详细的故事,建议查阅相关的行业报告、公司年报或新闻资讯。

Electronic公司的发展小趣事

AMD,曾经一度陷入困境的半导体公司,近年来实现了逆袭。AMD通过持续的技术创新和市场竞争策略的调整,成功在处理器和显卡市场取得了重要份额。AMD的产品性能不断提升,价格也更加亲民,赢得了消费者的广泛认可。同时,AMD还积极与游戏厂商和硬件厂商合作,推出了多款定制化的产品和解决方案。这些努力使得AMD在激烈的市场竞争中逐渐崭露头角。

Emmoco公司的发展小趣事

在追求经济效益的同时,Emmoco也注重环保和可持续发展。公司积极采用环保材料和绿色生产工艺,降低生产过程中的能耗和排放。同时,Emmoco还积极参与环保公益活动,推动电子行业的绿色发展。这些举措不仅体现了Emmoco的社会责任感,也为公司的长期发展奠定了坚实的基础。

Corsair Memory Inc公司的发展小趣事

随着公司的发展,Corsair Memory Inc不仅局限于内存产品的生产,还积极扩大业务范围。其中,收购SCUF Gaming是Corsair在扩展业务版图上的重要一步。这一收购使Corsair得以进入游戏外设市场,进一步丰富了其产品线,也为其带来了更多的增长机会。

DENWIRE公司的发展小趣事

进入90年代后期,Corsair再次调整其产品策略,由生产标准内存转变为生产高于规格的内存,即超频内存。这一决策迎合了当时市场对高性能内存的需求,Corsair的超频内存迅速在市场上获得了认可。其产品的超级性能专为极大需求的应用软件而设,也一直被应用关键的服务器及极高性能的工作站(包括游戏系统)上。

ADI(亚德诺半导体)公司的发展小趣事

Corsair Memory Inc公司,由Don Lieberman、John Beekley与Andy Paul于1994年在美国加州佛利蒙创立。起初,公司专注于为英特尔系统生产Cache-On-A-Stick (COAST)模组。然而,随着英特尔将快取内存由主板移至处理器晶体中,Corsair迅速调整战略,将注意力转向电脑内存市场。这一转变不仅使Corsair避开了潜在的市场风险,更为其后续的内存业务奠定了坚实的基础。

问答坊 | AI 解惑

Rfid标签生产的工艺流程及其相关设备简介

RFID标签的生产链虽然不长,但需要的设备却不少。从制造过程来看,分为芯片制造、天线制造、芯片倒贴或邦定、合成材料印刷、层压或覆膜合成几大工序。 1. 天线印刷天线可以采用传统的腐蚀天线或印刷天线。腐蚀天线可以是铝箔或铜箔。生产商需要 ...…

查看全部问答>

弱弱的问下!想知道wince的数据库怎么生成?

如题!想知道wince的数据库是用什么软件生成的…

查看全部问答>

ucfs文件系统上SD/mmc驱动移植

小弟现在正移植ucfs文件系统到nucleus上面,大概知道了一些切入点,可是发现对具体的设备移植的时候要明白具体的硬件操作,比如说sd卡的内部擦除、写啊等操作,还需要自己写相关的操作函数,有点困难。 能不能给介绍下sd驱动的编程,sd和mmc是不是 ...…

查看全部问答>

有人熟悉kernelderiver驱动编程吗?

有人熟悉kernelderiver驱动编程吗?有没有中文方面的资料?…

查看全部问答>

想去intel的可以找我

想去intel的可以找我,manjianmei@live.cn…

查看全部问答>

STM8触摸库程序跑飞

我按照汉之云的资料修改了stm8s_map.h,文件又重新配库的.h文件,因为我用STM8S103K,编译通过,我用STLINK调的时发现程序跑飞然后,请大家看看,STM8到底行不行啊,还有我共20键,我用STLINK关察那个初始化数组始终显示9个,闷 ...…

查看全部问答>

电子清纱器操作终端

与纺织企业合作,研制电子清纱器,正在设计电子清纱器操作终端方案。…

查看全部问答>

这样的人是大牛吗?

今天遇到一个学习上得问题,加了一个群去问了一下! 虽然问到了答案,却被群猪无情的T出了群! 主要是我先前问了一下管理,他说没有时间,我就发群里问了。不到5s 就又同学帮我解决了问题!可能是 群猪觉得我菜鸟吧!不配和他们说话!不知道这样的 ...…

查看全部问答>

LM3S811与ADXL345原理图

画了LM3S811的原理图与PCB,有ADXL345、IMU3000、ITG3200等的评估板。…

查看全部问答>