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

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

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

& y& o7 R, P  ^5 F# V/ X( M  L( }& q3 u9 V, X) I) g5 E- U
前言
6 h9 O+ X4 k. A* g$ a7 {- `
部分STM32 是具有空片检测功能的,以便直接进入System Memory 中执行Bootloader,方便通过某些个外设来直接进行编
1 _  b0 F* B  V程。比如STM32L011xx、STM32L021xx、STM32F04x 和STM32F09x。有看过《STM32F091 空片使用System Bootloader5 S$ \/ F0 {6 O/ A0 [8 G7 E
下载代码》和《STM32L011x 和STM32L021x 启动模式注意事项》的都知道这个功能。
$ G( r2 M& Z! t( U3 I4 l
% A. q, l( f$ X$ r  R  @' p  m问题
! y" l7 c9 n  d7 p某客户在其产品的设计中,使用了STM32L011D4P6。客户工程师反映STM32L011 为空片的时候,空片检测功能不存在,$ C! u( V! H. }
无法使用串口升级程序进行升级。
5 y' d& W% ~; h9 u* Q6 n) x- |8 J; B& p
调研. U3 R3 X! q( c8 ~0 b' I% j
1.了解问题
3 m  {; @0 h5 a  V- l) A8 n" S拿到客户的用户板,使用串口工具连接STM32L011D4P6 的USART2(PA9 和PA10),使用Flash Loader Demonstrator/ u  G. I8 E! P, P( I7 ?
对STM32L011D4P6 进行连接。界面如下:
2 K4 {/ `3 [, v2 O! {3 j1 m 11.png 1 T  Z, Q0 U' q8 S9 e  m' W8 y

4 j) s- @. q! m当点击按钮“Next”进行连接的时候,此时弹出对话框:
. s. |+ {& D) D5 E* Y9 Z 12.png 3 [+ o3 i2 Z+ Z* m, S: h. a4 h
无法连接。
  J: {0 _) X1 x  K/ l& H, K8 K+ j+ V9 d  l: V0 m" q5 n  [- [1 a
使用STM32 ST-LINK Utility 对芯片进行连接,并点击菜单“Target → Blank Check”进行空片测试,确认芯片是擦除过的。. m; J; ]8 r( o; H
13.png 6 P/ }6 T+ }7 }3 f8 }. o6 {( x
客户认为,空片情况下应该可以进入System Memory 而使用Bootloader 进行串口烧写的,为什么就连接不上呢?1 M7 G& B0 z1 M" n; K! d, O6 m4 w
# S$ f" F* @" s: K$ u1 N2 f
2.问题分析
6 a1 L( x) i  ?& z仔细查看客户的板子,发现客户的BOOT0 脚是拉到低电平的,看起来应该是不会有问题啊。于是,继续在STM32 ST-LINK
# v7 i( s+ m) qUtility 中点击菜单“Target → Option Bytes…”来查看一下STM32L011D4P6 的选项字节,得到如下结果:
& t# W7 r2 e7 j1 o7 U 14.png 6 a7 K6 B# r' e( Z7 v" n! r
可以看到,客户在选项字节中配置:nBOOT_SEL = 1, nBOOT0 = 1,nBOOT1 = 1,来达到使用选项字节而不使用BOOT0
! a! d4 Y8 J" u# }* o3 g脚来达到从Flash program memory 启动的。也就是说,BOOT0 脚是没有被使用的。客户认为这个选项字节配置和使用
, a7 n1 U5 [* S+ uBOOT0 脚拉低电平来从Flash program memory 启动是一样的。
' H- W$ X+ a0 S- D, B# i. L; r$ f8 Q) p+ f, Z- ~) Q# `+ Y
此时,再来看一下参考手册RM0037 是如何描述空检测的:
1 i; f- g+ J$ U, q& g8 S 15.png
. F+ m9 A" {, y从这段话中,我们知道“Empty Check”是内部有一个查空标志,可用于使用Bootloader 对未编程过的芯片进行简单编程。
+ q% ]6 X- ?5 ^: v% }% D$ F2 ~1 ?当这个标志位被置“1”的时候,此芯片被认为是空的,系统将从System memory 中启动Bootloader,以允许用户进行代码
# }0 K5 _- Y9 v3 B0 P( s" Z5 c下载,而不是从Flash program memory 启动。此标志位只在载入Option bytes 时更新:当地址0x8000 0000 读出的内容为6 m4 C$ ?7 \5 x
0x0000 0000 时,此标志位置“1”,否则为“0”。这意味着当烧写完一个空片后需要在系统复位后执行代码的话,是必须' V  ~3 R! i( T$ Y
要重新上电或者在FLASH_CR 寄存器中置位OBL_LAUNCH。- G4 J/ b3 {( s0 {% C9 H$ u

' r# p6 w6 ?) d$ y! v此处,我们需要注意到这一句话:“This flag is used when BOOT0 pin is configured to select Flash program memory as" f: _9 i( o. i7 k  I
target boot area.”注意了,这里写的是BOOT0 脚!不是选项字节中的nBOOT0。所以,在选项字节配置为nBOOT_SEL =
) s* j  n! U7 o- P1, nBOOT0 = 1,nBOOT1 = 1 的情况下,虽然也是空片,却是不能进入System memory 中的Bootloader 的,也就导致无  b+ I7 u4 H8 ]
法在这个情况下使用Bootloader 进行下载代码!
6 h' B! A& d3 j5 a0 c6 u% }! D
来看一下STM32F091 的,参考手册RM0091 的“Empty Check”也有这么一句话:“This flag is used when BOOT0 pin is
; X2 N2 Z3 y* Cdefining Main Flash memory as target boot space.”这里说的也是BOOT0 脚!对STM32F091 进行测试,也是一样的情况。
+ Q( E- |0 n0 n3 g; V0 d# s5 G3 g- I7 q$ {* ^& y+ d
3.问题解决
% S% N  v4 T- G) s使用STM32 ST-LINK Utility 将STM32L011D4P6 选项字节中的nBOOT_SEL 位清掉,更新成功后复位,再使用Flash4 E% J& T) j5 M+ z/ S
Loader Demonstrator 进行连接,证实已经可以正常连接,虽然此时的BOOT0 脚拉的是低电平。0 @! I4 d- P7 {  ?
8 M, g& a2 x. E! ?7 p' `- o
结论" j) C; m) }7 A( v
在使用空片检测进入System Memory 中使用Bootloader 进行代码下载的时候,条件是启动配置使用的是BOOT0 脚为低电平
0 u2 a( D3 e" K2 v选择从Flash program memory 启动的情况下,而不是使用选项字节“nBOOT_SEL = 1, nBOOT0 = 1,nBOOT1 = 1”选择% z; l2 N) P$ J& G% E( I' i
从Flash program memory 启动的情况下。+ z8 ]- R! R, R& j! s5 E; A# n* B
* N& R6 m. t+ z4 ?1 v& j; A
处理
6 I' M- E6 h* I6 X在使用空片检测进入System Memory 中使用Bootloader 进行代码下载的时候,应该避免此选项字节情况的发生。特别是不
4 x0 o& W$ a# d- l, P/ h  e使用JTAG/SWD 接口的情况下,更要小心。. @9 ^( Q  Q3 B  d
' d% x/ G5 q! v

% c' s3 U) X8 j0 Q) e: _4 G3 ~点击下载文档4 i6 t0 M( R& _* V
查看更多实战经验
9 Y! q0 o8 f, x0 j8 ^; x" W
% Z$ t9 E& b6 i. P" }
收藏 评论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 手机版