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

【实战经验】无法使用内置 Bootloader 的 DFU 方式进行固件升...

[复制链接]
zero99 发布时间:2016-9-20 16:02
无法使用内置 Bootloader 的 DFU 方式进行固件升级

5 D3 f# u% w8 _$ `2 {% W! M
5 F1 l, g$ Y" L$ T. b1 前言
* X0 x; X0 g: s6 r5 F  K本文将针对客户无法使用内置Bootloader的DFU方式进行固件升级的问题进行分析。) s( k. X" R' [* r# T6 F
/ I, f; e6 I& d; r6 `, a- ~# }# {1 ?1 _
! ^/ o- F2 t) i, C) B. L
2 问题描述4 S! U- a) L9 l  N1 J3 Y
客户使用的是STM32F205VET6,做了个最小系统测试板,在BOOT0=1,BOOT1=0的情况下连接PC,使用PC端软件DfuSeDemo无法检测到DFU设备,但是同样在Bootloader模式下,却可以通过串口1进行固件升级。
7 L6 `1 c3 W; t
6 Y" M" M3 U5 I6 a! }- u1 {: k$ \3 l. T, k3 O9 x' N
3 问题分析
9 d, D6 j1 a5 A: Q) v' S首先怀疑的是USB线路问题,因此,在却换到正常模式(BOOT0=0,BOOT1=0)时,使用CubeMx做了个简单的鼠标HID测试程序验证,结果发现在正常模式下测试程序是能正常运行的,从这点可以说明USB不存在线路不通的问题。4 }9 F  b& m6 N" g" @) w% L3 n
7 K& g& ?2 R6 F+ Q
其次,检查各个管脚的电平,VDD,BOOT0,BOOT1均未发现异常。
# }. H* l. @- m& U4 P3 W' o8 {) ]% m2 d于是打开应用文档AN2606-STM32 microcontroller system memory boot mode.pdf,通过此应用文档可知,不同的Bootloader版本可用于固件升级的方式不尽相同,如3.2节如下内容:; K+ |) ]( h' b, L- W% K! ]
11.png $ ]8 i1 Y3 C+ J# H
) }- B2 i& A1 W; z* Y: X  N% \9 u
因此怀疑此MCU的BID是否会不支持DFU?通过上图可知,BID可以通过SWD直接读取,因此我们需要找到保存此BID信息的地址。
; e% C6 d) W' ^通过应用文档AN2606 3.2节的表3:
9 g+ Z6 j3 X3 Z" B 12.png ) S' B- O( J5 r/ q2 k  Y! J, \. C

; W8 H- ]) i8 T! T如上图可知,STM32F2的Bootloader存在两种BID,可以通过地址为0x1FFF77DE这个地址的值来获取,如为0x20则只支持USART,若为0x33,则支持USART,CAN,DFU这3种方式。于是使用PC端软件STM32 ST-LINK Utility通过SWD读取0x1FFF77DE这个地址的值,如下图所示:
& g) B1 X0 l9 l- l; g 13.png 0 A( P0 ~" u$ X8 Z& M6 p  b
如上图,可见客户使用的STM32F205的BID为0x33,是同时支持USART,CAN和DFU这3种方式的,因此,排除Bootloader版本问题的可能性。
, e4 E: j, X, l- u
. |9 a* C# u* z% [- E" K6 C在上述可能性都排除外,客户提出怀疑芯片本身或Bootloader烧录的代码有问题,于是找出一块STM32F4-DISCOVERY板进行MCU替换,替换后的结果为STM32F205在放到DISCOVERY板上则能正常通过Bootloader的DFU方式进行固件升级,因此,这就明确排除了芯片本身问题的可能性,因此,只可能是用户板子外围电路的问题。
- I4 |# V1 ^) A8 M再次回到AN2606这个应用文档,在15.2.2节找到Bootloader的工作流程图,如下所示:" m" \6 ?: [6 a+ o
14.png # U( Z, L: A4 R: R4 V" e" @" r
1 H/ e$ k% v  v! }% B; x+ V) w
通过上图可知,Bootloader是依次检查USART->CAN->DFU的方式,怀疑Bootloader程序在DFU之前由于某种未知原因是否已经进入到USAR或CAN的方式中而一直没有出来?
! ?7 P. y2 R0 F( m1 Z
1 e4 S  g- w( h$ _/ o6 Z4 h) G# k为了排除这种可能性,我们针对USART1的RX脚PA10,USART3的RX脚PB11和PC11拉高,同时将CAN2的RX脚PB5拉低进行测试,结果还是无法检测到DFU设备。9 ?# v  D3 x  U9 H( u2 {; `1 {

2 d) y) D% ~' r4 w! z再次回到上图进行分析,如上图,若USART和CAN都没有检测到的话,Bootloader程序会检测USB线是否连接,然后检测外部HSE,若HSE不存在,则产生系统复位,否则将会重现配置系统主频到60M。- W( w( @7 o4 K( d/ |! J/ w% I- m

6 h& S' n) Y3 E4 Y, O由于我们是连着USB线且在正常运行模式下USB是能正常工作的,因此,这里检测USB线结果应该是通过的,于是按照程序流程,接下来检测外部HSE,若检测失败则复位系统。与是用示波器查看2 L4 j$ j1 o4 u+ t0 L
VDD与NRST脚的波形,发现系统在VDD上电后有3次复位,如此,可以得出Bootloader程序在检测外部HSE时结果为失败,如下:4 X0 {4 T, A: I, Q
15.png 6 D4 \) u5 Y3 e7 B

6 c9 {$ i) V9 V& I2 I4 E9 H4 y  T为什么会检测外部HSE失败? 用户使用的HSE是8M晶振,与DISCOVERY板一样都是8M外部晶振,对比用户的外部晶振电路与DISCOVERY的对应电路,如下图所示:
$ k8 e5 m1 V8 n) f4 I% _2 M: c 16.png
6 u/ \. z6 r9 B% N& Z2 s) P
# x+ j8 g6 e( D# c如上图,左边为客户板子的晶振电路,右边为DISCOVERY板的晶振电路,对比可知,用户的负载电容使用的是33pF,且多了个1M的反馈电阻。
, s; T1 A& S! [: O! Y( P% e$ `1 Z% O首先将反馈电阻去掉后测试,结果还是一样。进一步将客户板子的晶振负载电容换成20pF后进行测试,结果可以正常检测到DFU设备,如此可见,正是因为这个负载电容的原因造成Bootloader的DFU无**常工作!
2 T$ t! ~9 j0 c( v! \' {* r. L$ K. Q6 ]1 M  j) N/ p
* g- [: A8 d2 [7 Z( B% N4 ^
4 总结" ]; u' j# y7 H
此问题是由于晶振负载电容过大,导致内置Bootloader程序在检测外部HSE的时间点与实际HSE稳定震荡所需的时间不同步造成,结果就是检测不到HSE,进而引起系统复位,最终无法使用Bootloader的DFU方式进行固件升级。
; ~' U# P+ n! Q! F- B% c" C5 z( E3 n3 A/ y% a2 Z  z

6 ]7 [2 s+ z1 K" Q* A: p6 M) g8 q5 本文所涉及到的文档与软件下载链接9 \& f. |0 P4 e( Z- z; q4 H
AN2606 https://www.stmcu.org.cn/document/detail/index/id-2009181 x' ]# l: x- p. [- ~4 m: n! [5 V
DfuSeDemo https://www.stmcu.org.cn/document/detail/index/id-2143398 k3 I/ f: y1 J
STM32 ST-LINK Utility https://www.stmcu.org.cn/document/detail/index/id-2158400 H/ N# b4 N5 w9 `
2 D& X/ y% t# v- A! b3 k$ x# }9 n- L
: e) Q( \$ l0 |5 H
点击下载文档4 _5 ?3 f% }; ~
查看更多实战经验
2 ]+ \, G9 g$ B. \1 S# L
4 |9 n; z+ l6 L
赞 1 收藏 3 评论3 发布时间:2016-9-20 16:02

举报

3个回答
天道酬勤DW 回答时间:2016-10-8 16:53:47
这个分析的好,厉害
wdshuang09 回答时间:2016-10-8 18:25:08
问题分析的很透彻,学习了
xiaoxiao0932 回答时间:2016-12-15 15:07:58
谢谢分享啊~
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版