你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

【实战经验】STM32 Bootloader中 DFU使用限制

[复制链接]
zero99 发布时间:2016-6-28 14:23
STM32 Bootloader中 DFU使用限制

前言
众所周知,STM32所有的MCU中包含Bootloader代码,可以通过对boot引脚(boot0,boot1)的配置从bootloader启动,通过spi/i2c/usb等升级片内FLASH,从而实现版本升级的目的。但是通过USB升级的时候,在低温(零下10摄氏度以下)的情况下,出现升级失败的情况,很容易出现。

问题现象
通过bootloader usb升级时,在温度低的情况下,发现有一部分芯片升级失败,而且重新尝试,仍然升级失败。

原因分析
考虑到用户的量很大,而且问题都是出现在低温的环境下,所以基本排除用户单板设计,布线等问题,但是bootloader代码也非常的成熟,大量的被用户使用,所以软件问题也被排除,所以将问题的原因定位在环境温度低造成的,而温度低会对哪些外设 产生影响呢,查阅任何一款MCU的数据手册HIS部分的参数,都可以发现:
31.jpg
从这张表中可以看出,当温度低于-10℃时,HSI的准确性会降低很多,误差变得相当大,
而熟悉STM32的工程师可能会有疑问,STM32的USB模块需要非常精准的48MHz时钟,所以一般时钟HSE作为其时钟源进行倍频和分频,为什么HSI低温时误差大会对其造成影响呢?
这里就要重新回到bootloader中来,虽然这一部分代码并非开源的,是芯片出厂后就固化到MCU里面的,但我们可以从下面的流程中了解到原因:
如上描述,使用usb模块,一般情况下是必须用HSE(有CRS功能的除外)的,但是作为bootloader而言,它本身是并不知道外接HSE的频率的,所以它就需要通过HSI去测算HSE的频率值,这个算法比较简单,通过简单的枚举即可,但是这样做就带来了一个问题,那就是当HSI偏差过大时,估测出来的HSE产生了偏差,这就最终导致了USB的48M时钟不准,产生了usb升级失败的问题!

总结
在使用bootloader进行升级时,同样需要考虑到时钟可能带来的误差。



文档下载地址:
https://www.stmcu.org.cn/document/list/index/category-1012

实战经验汇总:
https://www.stmcu.org.cn/module/forum/thread-576401-1-1.html
收藏 5 评论6 发布时间:2016-6-28 14:23

举报

6个回答
yanhaijian 回答时间:2016-6-28 18:29:58
楼主研究的比较细。
shanji 回答时间:2016-6-29 09:15:59
楼主用的DFU软件是ST官方的还是自己开发的?官方的不太好用啊。
wdshuang09 回答时间:2016-11-12 15:53:48
分析的太好 了
peter001 回答时间:2016-11-13 10:45:01
恩,论坛里关于温度特性讨论的话题太少,支持楼主
xiaoxiao0932 回答时间:2017-4-11 10:39:29
谢谢分享啊!~
pener 回答时间:2017-7-15 09:06:59
stm32自带的bootloader支持USB升级?

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

相似技术帖

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版