背景:
适应与现在大部分的工业产品在产品发布后,固件出现问题需要修复,但是返厂重新烧录,增加了产品的维护成本,固件增加bootloader升级功能,维护人员就可以现场为客户进行固件升级。
获取资源:
本篇文件主要是使用官方提供的bootloader固件升级包,如何移植到自己的项目中去。
固件升级包获取方式:
从官网中获取,或者从以下链接获取:
Hercules bootloader
bootloader如何使用:
解压上面压缩包后,请详细阅读readme, 我选用的是Uart 升级方式,软件中使用Ymodel 协议通讯下载,常用的Uart调试工具都带有该协议.
用户程序编写过程注意事项:
关于TMS570LS3137的片上flash的结构图如下:
由上图可知,flash有三块,bank0,bank1,bank7.
其中只有bank7能使用FEE的功能。
bank0,bank1只能按扇区进行擦写。
因此,flash的内存分配,我做了以下分配:
bank0分为两部分,一部分存储bootloader,一部分存储应用程序。
bank1用于存储升级代码。
bank7用于存储用户数据(经常会读写操作),
1.bootloader 需要注意的地方。
1)保持bootloader区和用户升级区的debug串口波特率保持一致,我选择的是9600
2)选择好程序跳转的地方,如果升级完毕后,程序会跳转到用户区
3)修改跳转地址,打开文件“sys_intvecs.asm”,做如下修改。
修改后面有注释。
修改文件“bl_config.h”中的用户程序开始地址
4)修改完毕后,然后需要修改用户程序APP中的,起始地址
打开,用户程序工程中的“sys_link.cmd”文件,做如下修改
MEMORY
{
VECTORS (X) : origin=0x00020000 length=0x00000020
FLASH0 (RX) : origin=0x00020020 length=0x0015FFE0
FLASH1 (RX) : origin=0x00180000 length=0x00180000
STACKS (RW) : origin=0x08000000 length=0x00001500
RAM (RW) : origin=0x08001500 length=0x0003EB00
/* USER CODE BEGIN (2) */
/* USER CODE END */
}
以上修改完毕后,都进行编译生产.out文件,用官方自带的nowflash工具进行烧录。
根据两块烧录地址不同,分别将文件烧录在各自的flash中。烧录完毕后,打开串口观察现象。如下图所示。
从打印信息可以看出,程序成功的从boot区跳转到用户区,实验成功。