学习园地
学习园地
您现在的位置: 首页 »
学习园地
新技术学习之四
更新时间:2015-04-27 点击数:
通过USB升级STM32F4开发板固件
介绍
对于大多数以Flash存储器为基础的系统,一个重要的需求是具有升级安装在终端产品上的固件的能力。本文档为STM32F4DISCOVERY开发板实现固件升级提供了常见的指导。
STM32F4系列微控制器可以运行用户定制应用程序,并可升级到微控制器内嵌Flash存储器中的固件。这个特性允许使用任何的通信协议来执行重新编程流程(例如CAN,USART,USB)。USB主设备大容量存储器是其中一个实现的方法。
使用USB主设备固件升级是一种非常优越的方式,因为它是一个脱机执行的代码,用户不需要使用主机来实现固件升级,用户仅需要一个闪盘就可以升级目标STM32设备。
文档内容:
Section 1:固件升级概览,包含了固件升级流程和示例。
Section 2:怎样使用固件升级应用,描述了用户的程序和系统软硬件要求。
相关文档:
STM32F4DISCOVERY STM32F4 high-performance discovery board (UM1472)
● STM32F405xx, STM32F407xx, STM32F415xx and STM32F417xx advanced ARMbased
32-bit MCUs reference manual (RM0090)
● STM32F405xx STM32F407xx datasheet
● STM32F415xx STM32F417xx datasheet
以上文档可在www.st.com/stm32f4-discovery获得。
1 固件升级概览
要将固件升级程序烧写进Flash存储器,需要使用STM32F4xx's嵌入式引导程序(Bootloader),或者任何在系统编程工具,就可以轻松的重编程应用。
固件升级使用USB主口来:
从闪盘上下载bin文件到STM32F4xx's内置闪存。
上载STM32F4xx's内置闪存到二进制文件。
执行用户程序
注:这个应用文档基于STM32 USB OTG主从库。更多USB主协议栈和大容量存储器示例,请参考用户手册(UM1021).
1.1 执行固件升级应用
固件升级应用包含源文件如下表:
在开发板被复位后,根据用户键(user button)状态:
1、用户键按下:固件升级应用被执行
2、用户间没被按下:用户应用起始地址的一个测试程序将被执行并一下进程将被执行:
用户向量表可用:用户应用被执行
用户向量表不可用:固件升级应用被执行
在固件升级应用执行中,将持续定时检查用户键状态。基于用户按键状态时间,以下进程将被执行。
上载命令条件校验会以蓝LED闪动来发出信号。
下图说明了固件升级应用流程图
要执行上载命令,在开发板复位,固件启动时用户键必须保持按下3秒。
1.2 LED状态
以下部分描述了固件升级应用执行期间,LED的动作:
1、红灯闪动,初始化循环:错误(USBKEY未连接,二进制文件不可用或FATFS文件系统错误)
2、红灯闪动,蓝灯亮,初始化循环:错误(没有可用的闪存空间加载二进制文件)
3、红的闪动,蓝灯亮,橙灯亮,初始化循环:(闪存擦除错误)
4、蓝灯亮:下载进行中
5、蓝灯亮,橙灯亮:下载完成,上载进行中
6、蓝灯闪:上载状态校验,用户应该松开用户键
7、橙灯亮:下载完成
8、橙灯亮,蓝灯亮,红灯闪,初始化循环:USBKEY读出保护开启
9、绿灯亮,橙灯关:下载成功,MCU等待你按下用户键来执行跳转指令
10、绿灯亮,橙灯亮:下载和上载成功,MCU等待你按下用户键来执行跳转指令
1.3 命令描述
固件升级应用命令如下表:
注:上载和下载文件的文件名最大长度必须为11个字符,FAT文件系统LFN 特性。
1.3.1下载命令
要下载二进制文件从闪盘到STM32F4xx's内置嵌入式闪存,流程图如下:
注:1、BUFFER_SIZE是用户定义变量,位于usbh_usr.h文件中,并可被更改在编译中。BUFFER_SIZE =" 512 * x;固件限制x="[1,128]
。
2、下载命令执行必须的闪存空间的擦除。然后执行预设二进制文件编程模式程序。
3、擦除操作从用户应用区起始地址开始,直到闪存结束。
1.3.2 上载命令
下图展示了如何上载内部闪存备份。
注:1、BUFFER_SIZE是用户定义变量,位于usbh_usr.h文件中,并可被更改在编译中。BUFFER_SIZE =" 512 * x;固件限制x="[1,128]
。
2、当用户选择上载模式,就的UPLOAD.BIN文件将被删除并替换为包含新的闪存数据文件。
3、要执行上载命令,在复位开发板后固件启动时,用户键必须被按下并保持3秒。
1.3.3 跳转命令
一旦新的程序以及被加载,你可以使用跳转命令来执行flash地址0.8008000开始的镜像。否则,用户必须修改固件来跳转到其他地址。下图展示了跳转指令流程。
注:一旦先前的命令执行成功,用户绿LED点亮并且MCU将等待,指导用户被按下后执行跳转命令。
2 怎样使用固件升级应用
2.1 系统要求
在运行你的应用前,你应该确认STM32F4DISCOVERY如下图所示已连接好。
要在你的STM32F4DISCOVERY开发板上运行固件升级应用,最小的要求如下:
1、Microsoft® Windows PC (2000, XP, Vista, 7)
2、USB电缆(Mini),连接电脑到开发板。
3、USB电缆(micro),连接USB key。
2.2 运行固件升级应用
要运行固件升级应用,过程如下:
1、加载用户程序的二进制镜像到一个USBkey的根目录。你可以使用已经提供的二进制镜像(STM32F4-Discovery_xxxx_0x08008000.bin),位于Project/FW_upgrade/Binary文件夹下。二进制文件应该被重命名为image.bin。
2、编程固件升级应用到内置闪存
A、用你的默认IDE打开工程(under Project/FW_upgrade)
B、编译加载工程到目标存储器并允许工程。
C、其他选项用来嵌入式Bootloader或其他在系统编程工具来轻松重烧写这个应用。
使用STM32F4-Discovery_FW_Upgrade_V1.0.0.hex,利用在系统编程工具,例如STM32 ST-LINK Utility.
使用STM32F4-Discovery_FW_Upgrade_V1.0.0.dfu,利用DFUse/DFUse Demonstration工具。
需要更多细节,请参考UM1467文档的“重编程(烧写)固件应用的二进制镜像”部分。
3、插入USBKEY到STM32F4DISCOVERY开发板MicroUSB口。
4、按照1.1执行固件升级应用(第2页),继续操作。
2.3 用户程序条件
用户应用(二进制文件)被加载进闪存,通过应用固件更新应用,遵循以下配置设定:
1、在开发环境连接文件中,设置程序加载地址,APPLICATION_ADDRESS。
2、重定位向量表到地址:APPLICATION_ADDRESS,使用NVIC_SetVectorTable功能或者system_stm32f4xx.c文件中的VECT_TAB_OFFSET宏定义。
注:1、确认APPLICATION_ADDRESS与固件升级应用重叠。例如,使用EWARM6.21,所有选项使能,程序体积最高优化的固件升级应用为17936字节(17744字节代码,192字节数据存储器)。根据以上结果,将使用两个16Kbytes扇区两个,一个存储固件升级应用,用户应用将从扇区2开始。
3 常见问答
1、怎样改变上载生成的镜像名?
USBKEY中被加载的二进制文件的文件名,可以在command.c文件的UPLOAD_FILENAME宏定义处做修改。
2、怎样改变被下载的镜像文件名?
被下载到内置闪存的二进制文件的文件名,可以在command.c文件的DOWNLOAD_FILENAME宏定义处做修改
3、如何改变用户应用起始地址?
用户应用起始地址可以在flash_if.h文件的APPLICATION_ADDRESS宏定义处做修改。
注:通过编辑用户应用起始地址,确信用户程序条件定义如本文第2部分。
4、怎样修改被上载的闪存的大小?
修改flash_if.h文件中的FLASH_SIZE和FLASH_STARTADDRESS宏定义项,可以改变被上载的闪存的大小。
5、当CPU频率为168MHz,下载指令需要消耗多少时间?
当用户应用起始地址为0x08008000(第二扇区开始),擦除操作需要7.76秒。
如果BUFFER_SIZE =" 512 * 64 = 32 Kbytes并且image size =" 25 Kbytes
,下载操作需要7.94秒(7.76秒擦除时间,0.18秒烧写时间)。
如果BUFFER_SIZE =" 512 * 64 = 32 Kbytes a并且 image size =" 990 Kbytes,下载操作需要12.7秒(7.76秒擦除时间,4.94秒烧写时间)。
6、当CPU频率为168MHz,上载指令需要消耗多少时间?
如果BUFFERSIZE =" 512 * 64 = 32 Kbytes,上载所有的闪存(1Mbytes)需要1.5秒。
4 版本历史
2011-10-24 第一版