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

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

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


前言

部分STM32 是具有空片检测功能的,以便直接进入System Memory 中执行Bootloader,方便通过某些个外设来直接进行编
程。比如STM32L011xx、STM32L021xx、STM32F04x 和STM32F09x。有看过《STM32F091 空片使用System Bootloader
下载代码》和《STM32L011x 和STM32L021x 启动模式注意事项》的都知道这个功能。

问题
某客户在其产品的设计中,使用了STM32L011D4P6。客户工程师反映STM32L011 为空片的时候,空片检测功能不存在,
无法使用串口升级程序进行升级。

调研
1.了解问题
拿到客户的用户板,使用串口工具连接STM32L011D4P6 的USART2(PA9 和PA10),使用Flash Loader Demonstrator
对STM32L011D4P6 进行连接。界面如下:
11.png

当点击按钮“Next”进行连接的时候,此时弹出对话框:
12.png
无法连接。

使用STM32 ST-LINK Utility 对芯片进行连接,并点击菜单“Target → Blank Check”进行空片测试,确认芯片是擦除过的。
13.png
客户认为,空片情况下应该可以进入System Memory 而使用Bootloader 进行串口烧写的,为什么就连接不上呢?

2.问题分析
仔细查看客户的板子,发现客户的BOOT0 脚是拉到低电平的,看起来应该是不会有问题啊。于是,继续在STM32 ST-LINK
Utility 中点击菜单“Target → Option Bytes…”来查看一下STM32L011D4P6 的选项字节,得到如下结果:
14.png
可以看到,客户在选项字节中配置:nBOOT_SEL = 1, nBOOT0 = 1,nBOOT1 = 1,来达到使用选项字节而不使用BOOT0
脚来达到从Flash program memory 启动的。也就是说,BOOT0 脚是没有被使用的。客户认为这个选项字节配置和使用
BOOT0 脚拉低电平来从Flash program memory 启动是一样的。

此时,再来看一下参考手册RM0037 是如何描述空检测的:
15.png
从这段话中,我们知道“Empty Check”是内部有一个查空标志,可用于使用Bootloader 对未编程过的芯片进行简单编程。
当这个标志位被置“1”的时候,此芯片被认为是空的,系统将从System memory 中启动Bootloader,以允许用户进行代码
下载,而不是从Flash program memory 启动。此标志位只在载入Option bytes 时更新:当地址0x8000 0000 读出的内容为
0x0000 0000 时,此标志位置“1”,否则为“0”。这意味着当烧写完一个空片后需要在系统复位后执行代码的话,是必须
要重新上电或者在FLASH_CR 寄存器中置位OBL_LAUNCH。

此处,我们需要注意到这一句话:“This flag is used when BOOT0 pin is configured to select Flash program memory as
target boot area.”注意了,这里写的是BOOT0 脚!不是选项字节中的nBOOT0。所以,在选项字节配置为nBOOT_SEL =
1, nBOOT0 = 1,nBOOT1 = 1 的情况下,虽然也是空片,却是不能进入System memory 中的Bootloader 的,也就导致无
法在这个情况下使用Bootloader 进行下载代码!

来看一下STM32F091 的,参考手册RM0091 的“Empty Check”也有这么一句话:“This flag is used when BOOT0 pin is
defining Main Flash memory as target boot space.”这里说的也是BOOT0 脚!对STM32F091 进行测试,也是一样的情况。

3.问题解决
使用STM32 ST-LINK Utility 将STM32L011D4P6 选项字节中的nBOOT_SEL 位清掉,更新成功后复位,再使用Flash
Loader Demonstrator 进行连接,证实已经可以正常连接,虽然此时的BOOT0 脚拉的是低电平。

结论
在使用空片检测进入System Memory 中使用Bootloader 进行代码下载的时候,条件是启动配置使用的是BOOT0 脚为低电平
选择从Flash program memory 启动的情况下,而不是使用选项字节“nBOOT_SEL = 1, nBOOT0 = 1,nBOOT1 = 1”选择
从Flash program memory 启动的情况下。

处理
在使用空片检测进入System Memory 中使用Bootloader 进行代码下载的时候,应该避免此选项字节情况的发生。特别是不
使用JTAG/SWD 接口的情况下,更要小心。


点击下载文档
查看更多实战经验

收藏 评论1 发布时间:2016-9-20 15:46

举报

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

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版