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

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

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

  n$ q  [7 s, E9 b! X3 t9 _  Q/ d0 v) {9 J3 z2 J3 D
前言

7 R5 a" j& v/ \% @3 }部分STM32 是具有空片检测功能的,以便直接进入System Memory 中执行Bootloader,方便通过某些个外设来直接进行编
+ U( A) R" L- s, Z- h: a! b程。比如STM32L011xx、STM32L021xx、STM32F04x 和STM32F09x。有看过《STM32F091 空片使用System Bootloader- q# ?! Y$ E( }
下载代码》和《STM32L011x 和STM32L021x 启动模式注意事项》的都知道这个功能。) y- [* s/ U4 v9 |

# `: A! o) T2 |: h5 w* _问题
. V3 m8 _9 l2 ~8 ]3 f! Z5 u1 z某客户在其产品的设计中,使用了STM32L011D4P6。客户工程师反映STM32L011 为空片的时候,空片检测功能不存在,
$ B/ `  j0 Z# \3 l. `! S# ~7 w9 a无法使用串口升级程序进行升级。
4 l, Y. Z3 D: E6 ?8 c& O" \' J' |  d! p; H& y
调研
  m- ?, G6 S! j: ~9 i+ O/ W1.了解问题
1 _) `# d3 O3 D; e拿到客户的用户板,使用串口工具连接STM32L011D4P6 的USART2(PA9 和PA10),使用Flash Loader Demonstrator
) @3 _: @" d% d+ m0 W2 l7 k对STM32L011D4P6 进行连接。界面如下:* v2 s+ R# `& s
11.png : {3 n$ n' D- E9 {

; l1 U  p4 y$ c& H' l当点击按钮“Next”进行连接的时候,此时弹出对话框:
5 l8 T1 @9 B6 P2 Q& _# @! h9 L 12.png ) K# X5 n: e. i" r7 Q
无法连接。0 Q7 C" p" n4 w& }. V* \( V
8 Y: a7 r3 D" a
使用STM32 ST-LINK Utility 对芯片进行连接,并点击菜单“Target → Blank Check”进行空片测试,确认芯片是擦除过的。
+ d' y( O( }) m, ?5 X' ] 13.png + m9 U6 v6 t5 g; d' G, N. v
客户认为,空片情况下应该可以进入System Memory 而使用Bootloader 进行串口烧写的,为什么就连接不上呢?3 [* K( V. x! N  p8 V4 x9 b

% |& Y' k0 c7 h$ |2.问题分析
' T2 w1 J! n# c仔细查看客户的板子,发现客户的BOOT0 脚是拉到低电平的,看起来应该是不会有问题啊。于是,继续在STM32 ST-LINK
9 u3 E6 J" o4 V  n0 K) VUtility 中点击菜单“Target → Option Bytes…”来查看一下STM32L011D4P6 的选项字节,得到如下结果:
* G1 {% G2 h# X& ^: l/ ` 14.png . Q1 \  j" H4 G9 n8 E( n
可以看到,客户在选项字节中配置:nBOOT_SEL = 1, nBOOT0 = 1,nBOOT1 = 1,来达到使用选项字节而不使用BOOT0! l: Q( }% s: Z2 R1 h; n
脚来达到从Flash program memory 启动的。也就是说,BOOT0 脚是没有被使用的。客户认为这个选项字节配置和使用
$ }6 U/ V- w; v& X6 Q) ?BOOT0 脚拉低电平来从Flash program memory 启动是一样的。( B* y/ ~: {$ Q

: t6 b8 B1 a3 K此时,再来看一下参考手册RM0037 是如何描述空检测的:
2 N5 S: O& {% [4 b 15.png
, O& s/ h1 C6 \  h+ [! g1 E7 O从这段话中,我们知道“Empty Check”是内部有一个查空标志,可用于使用Bootloader 对未编程过的芯片进行简单编程。
  J4 e7 K& O' y9 E9 a. M6 c$ k当这个标志位被置“1”的时候,此芯片被认为是空的,系统将从System memory 中启动Bootloader,以允许用户进行代码# _$ R. Y; [: F$ @2 I! }
下载,而不是从Flash program memory 启动。此标志位只在载入Option bytes 时更新:当地址0x8000 0000 读出的内容为  E( v/ K" {* d* Q. ~. e+ S
0x0000 0000 时,此标志位置“1”,否则为“0”。这意味着当烧写完一个空片后需要在系统复位后执行代码的话,是必须* w6 p3 [  O4 M6 t' d4 Q5 Q  x
要重新上电或者在FLASH_CR 寄存器中置位OBL_LAUNCH。' k9 U% A- O: o, V$ ^
- n0 t! O( M( @" [
此处,我们需要注意到这一句话:“This flag is used when BOOT0 pin is configured to select Flash program memory as
1 i% r$ t% u5 f! ]target boot area.”注意了,这里写的是BOOT0 脚!不是选项字节中的nBOOT0。所以,在选项字节配置为nBOOT_SEL =
& `: ?  b2 @/ A: P1, nBOOT0 = 1,nBOOT1 = 1 的情况下,虽然也是空片,却是不能进入System memory 中的Bootloader 的,也就导致无5 `& f, p' c, H7 j4 G
法在这个情况下使用Bootloader 进行下载代码!8 L' y7 G% z6 z+ }: o" k; U) `
  v$ `$ b$ T. G7 g/ m$ n
来看一下STM32F091 的,参考手册RM0091 的“Empty Check”也有这么一句话:“This flag is used when BOOT0 pin is4 \6 z; x% `& Y
defining Main Flash memory as target boot space.”这里说的也是BOOT0 脚!对STM32F091 进行测试,也是一样的情况。
+ k: o/ i' i, s6 @- @+ N: P+ n& D- F) X8 B. e" g) A( A! M1 r9 S
3.问题解决3 {& s3 F" U) o0 X# p
使用STM32 ST-LINK Utility 将STM32L011D4P6 选项字节中的nBOOT_SEL 位清掉,更新成功后复位,再使用Flash
  k3 a7 i! U$ t4 @  i  P1 o4 n" {Loader Demonstrator 进行连接,证实已经可以正常连接,虽然此时的BOOT0 脚拉的是低电平。
) r# b% l" D/ {* U. V7 _; P9 o/ B7 M! W
结论5 ~- U+ n. j: j# U- B- V0 N
在使用空片检测进入System Memory 中使用Bootloader 进行代码下载的时候,条件是启动配置使用的是BOOT0 脚为低电平
/ h% ^% a" ^6 t+ k5 C/ Q7 V7 c, O选择从Flash program memory 启动的情况下,而不是使用选项字节“nBOOT_SEL = 1, nBOOT0 = 1,nBOOT1 = 1”选择
* h/ t1 x* F$ V+ w& T9 F从Flash program memory 启动的情况下。+ F6 V3 V* E7 N$ b& c# s

) M( ^: H/ [4 j处理1 f, L" R' ~5 Q, w  s2 C% l+ D9 w5 j
在使用空片检测进入System Memory 中使用Bootloader 进行代码下载的时候,应该避免此选项字节情况的发生。特别是不
9 _2 N! z: _: h5 Y- C使用JTAG/SWD 接口的情况下,更要小心。9 I9 f+ v7 F2 T: d- V: `7 s0 [3 ?

8 u1 C  ~# _  q1 g2 r& A" M" d, a* l% s1 r
点击下载文档2 C' ^$ q# F$ `7 ~
查看更多实战经验- G0 u9 _' z7 P2 g6 Q0 q

# C2 u2 x2 {' x+ k
赞 收藏 评论1 发布时间:2016-9-20 15:46

举报

1个回答
feixiang20 回答时间:2017-7-1 21:42:40
讲解的很详细

所属标签

相似技术帖

官网相关资源

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