硬件环境:通用开发板 ATC-LINK软件环境:keil5.23 CMSIS1.0.8
软件分为boot和app
flash总共256K,划分为4个部分
0x08000000~0x08003800 作为boot代码区域
0x08003800~0x08004000 用于保存一些信息
0x08004000~0x08022000 APP部分代码区域
0x08022000~0x08040000 APP代码备份区域
地址配置信息在代码的IAP_cfg.h中,boot和app的代码此处内容必须完全同步(中文注释乱码)
#define IAP_BOOTLOAD_ADDRESS 0x8000000 /* define bootload start address */
#define CONFIG_ADDRESS 0x08003800 /* Ô¤ÁôÒ»¸öÒ³ÓÃÓÚ´æ·ÅÅäÖÃÐÅÏ¢ */
#define APP_ADDRESS 0x8004000 /* define app start address */
#define EFLASH_PAGE_SIZE_INIT 2048 /* define one-page size */
#define EFLASH_PAGE_NUM_INIT 60 /* define APP page num, size=2048*60=120K */
#define APP_ADDRESS_END ((uint32_t)(APP_ADDRESS + EFLASH_PAGE_SIZE_INIT * EFLASH_PAGE_NUM_INIT))
#define APP_BKP_ADDRESS APP_ADDRESS_END
#define APP_BKP_ADDRESS_END ((uint32_t)(APP_BKP_ADDRESS + EFLASH_PAGE_SIZE_INIT * EFLASH_PAGE_NUM_INIT))
#define APP_BKP_SIZE (APP_BKP_ADDRESS_END - APP_BKP_ADDRESS)
通信默认采用的UART1,协议设计的很简单,附件里面也会提供,就不多说了。
app里面同时集成了测试程序。
升级的理论大概就是:
1,app接收到升级bin文件,将升级文件存放在备份区域,在传输结束后,会收到对应升级文件的crc16值,然后app要对备份bin文件进行crc16校验,校验成功后返回校验结果,并设置升级标志。
2,boot启动时判断升级标志有请求后,同样要校验备份区域的crc16值是否正确,如果正确,则将备份区代码copy至app区域,然后启动app,否则不进行copy动作。
使用时需要根据自己芯片的存储大小,适当的修改flash划分,目前boot编译的代码大概有十几K,app也大概十多K的样子,如果flash较小的,可以减小app和备份区域的大小。
IAP.rar
(1.91 MB)
|