打印
[开发工具]

STM32 Bootloader 中 DFU 使用限制

[复制链接]
1092|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
豆杀包|  楼主 | 2021-11-10 10:21 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
前言
众所周知, STM32 所有的 MCU 中包含 Bootloader 代码, 可以通过对 boot 引脚( boot0, boot1) 的配置从 bootloader 启动,
通过 spi/i2c/usb 等升级片内 FLASH, 从而实现版本升级的目的。但是通过 USB 升级的时候,在低温(零下 10 摄氏度以下)的
情况下,出现升级失败的情况,很容易出现。  

使用特权

评论回复
沙发
豆杀包|  楼主 | 2021-11-10 10:22 | 只看该作者
问题现象
通过 bootloader usb 升级时,在温度低的情况下,发现有一部分芯片升级失败,而且重新尝试,仍然
升级失败。
  

使用特权

评论回复
板凳
豆杀包|  楼主 | 2021-11-10 10:23 | 只看该作者
原因分析
考虑到用户的量很大,而且问题都是出现在低温的环境下,所以基本排除用户单板设计,布线等问题,
但是
bootloader 代码也非常的成熟,大量的被用户使用,所以软件问题也被排除,所以将问题的原因
定位在环境温度低造成的,而温度低会对哪些外设 产生影响呢,查阅任何一款
MCU 的数据手册 HIS
部分的参数, 都可以发现:  


从这张表中可以看出,当温度低于-10℃时, HSI 的准确性会降低很多, 误差变得相当大,
而熟悉 STM32 的工程师可能会有疑问, STM32 的 USB 模块需要非常精准的 48MHz 时钟,所以一般
时钟 HSE 作为其时钟源进行倍频和分频,为什么 HSI 低温时误差大会对其造成影响呢?
这里就要重新回到 bootloader 中来,虽然这一部分代码并非开源的,是芯片出厂后就固化到 MCU 里面


使用特权

评论回复
地板
豆杀包|  楼主 | 2021-11-10 10:23 | 只看该作者
如上描述,使用 usb 模块,一般情况下是必须用 HSE( 有 CRS 功能的除外) 的,但是作为 bootloader
而言,它本身是并不知道外接 HSE 的频率的,所以它就需要通过 HSI 去测算 HSE 的频率值,这个算
法比较简单,通过简单的枚举即可,但是这样做就带来了一个问题,那就是当 HSI 偏差过大时,估测
出来的 HSE 产生了偏差,这就最终导致了 USB 的 48M 时钟不准,产生了 usb 升级失败的问题!  

使用特权

评论回复
5
豆杀包|  楼主 | 2021-11-10 10:25 | 只看该作者
总结
在使用 bootloader 进行升级时,同样需要考虑到时钟可能带来的误差。  

使用特权

评论回复
6
xiaoqizi| | 2021-12-6 14:51 | 只看该作者
这种误差大吗

使用特权

评论回复
7
木木guainv| | 2021-12-6 15:01 | 只看该作者
DFU的功能是什么

使用特权

评论回复
8
磨砂| | 2021-12-6 15:01 | 只看该作者
大概多低的温度啊

使用特权

评论回复
9
晓伍| | 2021-12-6 15:20 | 只看该作者
都可以怎么启动呢

使用特权

评论回复
10
tpgf| | 2021-12-6 15:22 | 只看该作者
全系列都适用吗

使用特权

评论回复
11
八层楼| | 2021-12-6 15:23 | 只看该作者
非常不错的办法啊

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

49

主题

323

帖子

0

粉丝