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

【经验分享】STM32 Bootloader 中 DFU 使用限制

[复制链接]
STMCU小助手 发布时间:2022-2-12 18:58
前言
2 `, ~! R8 ^2 T众所周知,STM32 所有的 MCU 中包含 Bootloader 代码,可以通过对 boot 引脚(boot0,boot1)的配置从 bootloader 启动,通过 spi/i2c/usb 等升级片内 FLASH,从而实现版本升级的目的。但是通过 USB 升级的时候,在低温(零下 10 摄氏度以下)的情况下,出现升级失败的情况,很容易出现。
- e4 p9 N+ h9 @/ e- d" d7 Y问题现象
: g9 i- i: M1 v! a0 D4 u6 o. r通过 bootloader usb 升级时,在温度低的情况下,发现有一部分芯片升级失败,而且重新尝试,仍然升级失败。3 g6 B4 z( v% K( j4 ^0 J7 N
. M3 b2 d/ O; y
原因分析8 y- z  U3 j3 A" [/ e; h! D3 F
考虑到用户的量很大,而且问题都是出现在低温的环境下,所以基本排除用户单板设计,布线等问题,但是 bootloader 代码也非常的成熟,大量的被用户使用,所以软件问题也被排除,所以将问题的原因定位在环境温度低造成的,而温度低会对哪些外设 产生影响呢,查阅任何一款 MCU 的数据手册 HIS部分的参数,都可以发现:, g+ E  F) u* {: m
+ a$ }& ^& F# W7 K8 |$ L' l) \
VDC358K5[O]FWVHFH_JV.png ) J" b: R( f, p% M$ k
: i. s6 x/ m& N6 d9 v
从这张表中可以看出,当温度低于-10℃时,HSI 的准确性会降低很多,误差变得相当大,
6 ^) i. m  j; H4 J1 w% `1 K, b而熟悉 STM32 的工程师可能会有疑问,STM32 的 USB 模块需要非常精准的 48MHz 时钟,所以一般时钟 HSE 作为其时钟源进行倍频和分频,为什么 HSI 低温时误差大会对其造成影响呢?
+ \0 z3 s6 _6 o0 u2 @2 K- m这里就要重新回到 bootloader 中来,虽然这一部分代码并非开源的,是芯片出厂后就固化到 MCU 里面的,但我们可以从下面的流程中了解到原因:
' W, o3 ~0 ?& W( {) c! }' J如上描述,使用 usb 模块,一般情况下是必须用 HSE(有 CRS 功能的除外)的,但是作为 bootloader而言,它本身是并不知道外接 HSE 的频率的,所以它就需要通过 HSI 去测算 HSE 的频率值,这个算法比较简单,通过简单的枚举即可,但是这样做就带来了一个问题,那就是当 HSI 偏差过大时,估测出来的 HSE 产生了偏差,这就最终导致了 USB 的 48M 时钟不准,产生了 usb 升级失败的问题!$ L2 c" T! M2 X6 _3 c
2 e1 _6 h7 ]( H6 `$ i: Z
总结
8 j: m, k' i/ F& O8 z" R在使用 bootloader 进行升级时,同样需要考虑到时钟可能带来的误差。3 U) u# ~% ^* U4 r8 ~6 t
1 x+ {' d. f) W* \- ^, K+ }  z& C
收藏 评论0 发布时间:2022-2-12 18:58

举报

0个回答

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版