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

【实战经验】STM32L011&STM32F091空片检测进行System Bootloader编...

[复制链接]
eefishing 发布时间:2016-9-20 15:46
STM32L011&STM32F091 空片检测进行 System Bootloader 编程注意事项

5 y) T% S1 A. v$ H3 G4 _( v0 ^' K7 {. p  Q9 R
前言
, v+ D  z4 a4 |  b& V9 M9 D
部分STM32 是具有空片检测功能的,以便直接进入System Memory 中执行Bootloader,方便通过某些个外设来直接进行编6 v8 z# k1 s9 g$ s
程。比如STM32L011xx、STM32L021xx、STM32F04x 和STM32F09x。有看过《STM32F091 空片使用System Bootloader
# j& W9 m; s, h" ^/ ~下载代码》和《STM32L011x 和STM32L021x 启动模式注意事项》的都知道这个功能。0 @, Y' b/ Q0 Q' o
* P3 @& E! s( _! x8 z
问题- ~# j% G: C+ K& [$ V
某客户在其产品的设计中,使用了STM32L011D4P6。客户工程师反映STM32L011 为空片的时候,空片检测功能不存在,( r* d1 a# F" k) [; S+ D' `4 f$ w
无法使用串口升级程序进行升级。
+ I  c0 n% ~, t( d, T. p# u0 u4 {$ P) b; t( R! h) O  {1 x3 h& _1 ]$ N  G
调研
3 ]# [: z- b7 `( n' g. H4 Q5 k1.了解问题' m5 [$ B) _. j: q; A+ S
拿到客户的用户板,使用串口工具连接STM32L011D4P6 的USART2(PA9 和PA10),使用Flash Loader Demonstrator
' P% a3 a! {1 c- e% @. O对STM32L011D4P6 进行连接。界面如下:
' c0 J/ l) m5 K- u+ p( }3 m% ]  t 11.png   L, V' O# W% @. u9 W( e6 L. U; ?/ l
: ]$ L# q4 |( Z% z; p
当点击按钮“Next”进行连接的时候,此时弹出对话框:
7 e6 L+ j: @! b; u3 X 12.png 0 U+ D0 O' E# H4 l. X+ b
无法连接。: p! }( R2 w+ c% b$ L) K0 |& n, N
! X# t) _7 @5 _# a  i; f0 G
使用STM32 ST-LINK Utility 对芯片进行连接,并点击菜单“Target → Blank Check”进行空片测试,确认芯片是擦除过的。4 q/ q( S* C* P$ h6 i' V! W, x- j
13.png
/ P& }& d; F9 P$ J5 B. L$ j9 R客户认为,空片情况下应该可以进入System Memory 而使用Bootloader 进行串口烧写的,为什么就连接不上呢?
) Y+ }1 @% ~# M2 W% y
7 [" I9 P9 T7 G, X0 ]2 _8 e2.问题分析3 t' r2 m+ Z  P" _% b! ?
仔细查看客户的板子,发现客户的BOOT0 脚是拉到低电平的,看起来应该是不会有问题啊。于是,继续在STM32 ST-LINK9 N* V0 V1 b' Z9 F4 b% g: z3 q
Utility 中点击菜单“Target → Option Bytes…”来查看一下STM32L011D4P6 的选项字节,得到如下结果:; X2 p5 ?9 _$ {* W" k+ ~) b( P
14.png
* B6 ?5 f3 W3 T  X1 @3 U5 Z  c. z可以看到,客户在选项字节中配置:nBOOT_SEL = 1, nBOOT0 = 1,nBOOT1 = 1,来达到使用选项字节而不使用BOOT0
1 V5 Q9 L6 J; V, Y8 ?. j0 e脚来达到从Flash program memory 启动的。也就是说,BOOT0 脚是没有被使用的。客户认为这个选项字节配置和使用
( e1 f6 A6 s9 r, A0 p# LBOOT0 脚拉低电平来从Flash program memory 启动是一样的。: l! _# ]6 R4 Z# ~0 q( p
! f) p! m3 o, z2 t$ z
此时,再来看一下参考手册RM0037 是如何描述空检测的:2 r6 [1 \5 z  |8 l$ s0 U6 H
15.png ( v& o; Z6 k' E1 Q# @
从这段话中,我们知道“Empty Check”是内部有一个查空标志,可用于使用Bootloader 对未编程过的芯片进行简单编程。" }9 e; v8 d+ x- m3 t# E
当这个标志位被置“1”的时候,此芯片被认为是空的,系统将从System memory 中启动Bootloader,以允许用户进行代码' y/ e( f# j2 l, j3 ~' T- F$ Y
下载,而不是从Flash program memory 启动。此标志位只在载入Option bytes 时更新:当地址0x8000 0000 读出的内容为$ A  z5 V, A! T; z. t8 z( N4 ^
0x0000 0000 时,此标志位置“1”,否则为“0”。这意味着当烧写完一个空片后需要在系统复位后执行代码的话,是必须
# [* c2 c7 A3 }0 o要重新上电或者在FLASH_CR 寄存器中置位OBL_LAUNCH。
" J( g- i& Z7 I& s- H, [$ x5 A" H- c$ R5 {. ~& G. s" A5 ^
此处,我们需要注意到这一句话:“This flag is used when BOOT0 pin is configured to select Flash program memory as
. ^6 _  {8 i! r( J$ v  k; Htarget boot area.”注意了,这里写的是BOOT0 脚!不是选项字节中的nBOOT0。所以,在选项字节配置为nBOOT_SEL =
8 K# c. W$ m2 [+ b' a; _5 R3 u1, nBOOT0 = 1,nBOOT1 = 1 的情况下,虽然也是空片,却是不能进入System memory 中的Bootloader 的,也就导致无* Q* S$ O- |8 N2 L5 D
法在这个情况下使用Bootloader 进行下载代码!
! l; l$ q" Z' y& z* J4 l; X4 Y* B8 _' T7 t/ M7 F2 m' Z2 o# y  H
来看一下STM32F091 的,参考手册RM0091 的“Empty Check”也有这么一句话:“This flag is used when BOOT0 pin is
" k) M, m* G) x% c! gdefining Main Flash memory as target boot space.”这里说的也是BOOT0 脚!对STM32F091 进行测试,也是一样的情况。
9 H, K$ j! i/ L% d, e% k9 \. n( _. ~3 I  r, ^% t
3.问题解决6 `  v9 d# j" ^. R$ o' H9 z; R
使用STM32 ST-LINK Utility 将STM32L011D4P6 选项字节中的nBOOT_SEL 位清掉,更新成功后复位,再使用Flash
8 w- T5 t. d3 b( wLoader Demonstrator 进行连接,证实已经可以正常连接,虽然此时的BOOT0 脚拉的是低电平。
* Y; [1 u& x# F# X& g' |
  v$ G6 p2 P  z1 k3 }+ I结论# j6 [) b" n5 h  C+ f1 m; h/ d
在使用空片检测进入System Memory 中使用Bootloader 进行代码下载的时候,条件是启动配置使用的是BOOT0 脚为低电平
7 P: k4 l0 Q* P选择从Flash program memory 启动的情况下,而不是使用选项字节“nBOOT_SEL = 1, nBOOT0 = 1,nBOOT1 = 1”选择
$ \& h, ~. p0 {1 L" \! ?4 H从Flash program memory 启动的情况下。* P0 P. h) w( d) m$ f. i
8 d5 t, E! _$ \) O
处理
( \% u* r: y' A5 r1 y- V2 h在使用空片检测进入System Memory 中使用Bootloader 进行代码下载的时候,应该避免此选项字节情况的发生。特别是不" r! g6 q' w: b7 K- E( W. K
使用JTAG/SWD 接口的情况下,更要小心。4 [; H, H+ J. f* r

# M$ L! A7 q8 a( h, p+ @7 Z2 U; e5 ^0 d4 f0 Z
点击下载文档
  j9 u+ s1 j: {查看更多实战经验
5 C; r' R# z  t: h5 E& S0 C$ W0 R$ V' {& a9 x- t2 `% P- T, A
收藏 评论1 发布时间:2016-9-20 15:46

举报

1个回答
feixiang20 回答时间:2017-7-1 21:42:40
讲解的很详细
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版