范例说明 : IAP_AP
重要
固件库 提供 Example 范例只是演示 最基础 的功能使用方法,用户需对范例理解后,自行评估产品的功能实现方法!!
HT32 LIB 固件库更新已经删除了 IAP_AP 范例,变更为使用 HT32_CodeConfig 生成 UART IAP 工程 。 以下内容可供参考IAP_AP 的实现方法。
HT32_CodeConfig IAP_AP 范例
以下使用 固件库 的 HT32F52352 KEIL5 IAP_Text 范例工程对 IAP + AP 进行说明。
关于 IAP 功能的介绍,可参考 应用说明 :HT32 自更新/烧录方法 。
联合工程的使用方法
IAP 范例工程 :
固件库\example\IAP\IAP_Text
IAP_AP 范例
IAP_Text范例工程中,分别有三个工程:IAP工程 ;
AP工程 ;
联合工程 : KEIL5 提供联合工程,可在联合工程中操作多个工程,方便联合调试。
联合工程
打开
Project_52352.uvmpw联合工程,在左侧 工程窗口 可分别操作两个工程;
警告
联合工程 里面的 IAP工程 和 AP工程 都是独立的工程,只不过放在 联合工程 一起编辑,它们的工程设置也是独立的。
联合工程 的工程配置,是当前 激活工程 的工程配置。
激活工程 :右键选择激活的工程,激活后工程名变成灰色,表示当前 激活工程 。
激活当前工程
联合工程 编译时,普通编译只能编译当前工程,如需编译多个工程,要使用 批编译
Batch xxx功能选项。
批编译
IAP_AP 框架的关联
要实现 IAP_AP 框架,需要将 IAP工程 和 AP工程 进行关联,关联主要是 固件关联 和 程序关联 。
固件关联 : MCU FLASH 划分为 IAP区域 和 AP区域 ,对应的工程生成对应的 x.hex/x.bin ,关联到对应的 MCU FLASH 区域。
程序关联 :配置 IAP程序 和 AP程序 里面跳转到对应的区域。
IAP_AP 关联
固件关联
IAP工程 和 AP工程 都会生成对应的 x.bin,烧录时,需要将两个 x.bin 合成一个 x.bin ;
在 AP工程 生成 AP.bin,使用
iap.s文件关联后, AP.bin 会将 IAP工程 生成的 IAP.bin 包含。iap.s文件配置了 IAP.bin 的地址, AP工程 生成 x.bin 时会包含 IAP.bin ,默认工程已经配置好。
iap.s
在 AP工程 将 IAP工程 生成的 IAP.bin 包含后 ,KEIL 会通过工程设置里面的
Linker.lin,将 IAP.bin 和 AP.bin 合并,生成 IAP_AP.hex 。
Linker.lin文件配置了 IAP区域 和 AP区域 的地址范围。
Linker.lin
备注
Linker.lin文件中默认配置 IAP区域 空间为 4KB ,如程序量编译后超过 4KB ,则需要进行修改。x.lin使用方法,可搜索网络资料了解。
在 AP工程 进行 烧录/仿真 时,下载的是 IAP_AP.hex,就 烧录 了 IAP & AP程序 。
AP工程 IAP_AP.hex
AP工程 的输出目录
\HT32\52352\AP\OBJ\里面是生成的 IAP.bin , AP.bin , IAP_AP.hex 档案 。
工程输出目录
\HT32\52352\AP\OBJ\IAP_AP.axf.bin\内含 IAP.bin , AP.bin ;
IAP&AP.bin
备注
因 KEIL5 原因,生成的两个BIN档案无文件类型名,需要自行加上 .bin 文件类型名。
工程输出目录
\HT32\52352\AP\OBJ\内含 IAP_AP.hex ;
IAP_AP.hex 生成文件夹
生成 IAP_AP.hex 档,可用于量产烧录,可以一次性烧录 IAP&AP程序 ,到此已经完成了 固件关联 / x.hex/x.bin 关联 。
备注
因为 AP工程 生成 IAP_AP.hex ,需要包含 IAP.bin ,所以,联合工程 中必须先编译 IAP工程 生成 IAP.bin ,否则 AP工程 会无法找到 IAP.bin 。
程序关联
在程序中,需要配置 IAP & AP程序 中的跳转地址,在
ht32_board_config.h中定义了 IAP & AP程序 的跳转参数。
ht32_board_config.h
备注
AP工程 & IAP工程 共用一个 ht32_board_config.h 参数文件,用户自行编写时,也应如此设置,避免参数文件不一致问题。
IAP程序 中,使用
IAP_Go()将 AP区域 的SP指针 和PC指针 检查正确后,IAP_GoCMD()将值赋予当前的SP指针 和PC指针,实现程序的跳转。
Program Jump Method
警告
IAP程序 使用的外设功能一定要记得要取消,不然跳转 AP程序 后,这些外设功能会一直有效,会造成功能异常。
IAP程序 中,使用
IAP_Download()接收 上位机 下发的数据,并对 AP区域 的FLASH进行擦除和写入。
IAP_Download()
IAP_AP 范例操作流程
IAP_AP 范例操作前准备:
使用仿真/烧录器,将 IAP程序 烧录到 MCU 中。
接口连接:电脑USB端口 <–> USB转UART板子 <–> MCU - UART端口。
打开串口助手 Tera Trem 进行通信,根据串口打印的提示,选择
Updata AP,然后串口一直打印出CCCC表示MCU在等待通讯。
流程 1
此时,串口助手选择 Xmodem 发送,选择 AP.bin 发送,然后按提示操作。
流程 2
流程 3
流程 4
备注
Xmodem 发送需要串口助手的支持,可用串口助手 Tera Trem 或者其他有此功能的串口助手。
当运行在 AP程序 时,需要跳转 IAP程序 进行升级:
AP程序 中,将状态变量
BOOT_MODE幅值对应的状态,作为 IAP&AP程序 中的信息交换;AP程序 中,使用 软件复位函数
NVIC_SystemReset(),复位从FLASH起始区域开始运行 IAP程序 。
AP程序 设置 BOOT_MODE 和 软件复位
IAP 判断 BOOT_MODE
备注
BOOT_MODE 变量 为了能在 IAP&AP程序 中进行信息交换,使用固定地址的定义方法 ,在 RAM address : 0x0000 0000 定义了 BOOT_MODE。
所以在 Linker.lin 文件中,配置 AP程序 的 RAM区域 从 0x2000 0010 开始。
范例说明 : IAP_AP 常见问题,请参考 FAQ 。