范例说明 : IAP_AP

重要

  • 固件库 提供 Example 范例只是演示 最基础 的功能使用方法,用户需对范例理解后,自行评估产品的功能实现方法!!

  • HT32 LIB 固件库更新已经删除了 IAP_AP 范例,变更为使用 HT32_CodeConfig 生成 UART IAP 工程 。 以下内容可供参考IAP_AP 的实现方法。

    HT32_CodeConfig IAP_AP 范例

    HT32_CodeConfig IAP_AP 范例

以下使用 固件库HT32F52352 KEIL5 IAP_Text 范例工程对 IAP + AP 进行说明。

关于 IAP 功能的介绍,可参考 应用说明 :HT32 自更新/烧录方法

联合工程的使用方法

  1. IAP 范例工程 : 固件库\example\IAP\IAP_Text

IAP_AP 范例

IAP_AP 范例

  1. IAP_Text 范例工程中,分别有三个工程:

    • IAP工程

    • AP工程

    • 联合工程 : KEIL5 提供联合工程,可在联合工程中操作多个工程,方便联合调试。

联合工程

联合工程

  1. 打开 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 关联

固件关联

  1. IAP工程AP工程 都会生成对应的 x.bin,烧录时,需要将两个 x.bin 合成一个 x.bin ;

  2. AP工程 生成 AP.bin,使用 iap.s 文件关联后, AP.bin 会将 IAP工程 生成的 IAP.bin 包含。

    • iap.s 文件配置了 IAP.bin 的地址, AP工程 生成 x.bin 时会包含 IAP.bin ,默认工程已经配置好。

iap.s

iap.s

  1. AP工程IAP工程 生成的 IAP.bin 包含后 ,KEIL 会通过工程设置里面的 Linker.lin ,将 IAP.binAP.bin 合并,生成 IAP_AP.hex

  • Linker.lin 文件配置了 IAP区域AP区域 的地址范围。

Linker.lin

Linker.lin

备注

  • Linker.lin 文件中默认配置 IAP区域 空间为 4KB ,如程序量编译后超过 4KB ,则需要进行修改。

  • x.lin 使用方法,可搜索网络资料了解。

  1. AP工程 进行 烧录/仿真 时,下载的是 IAP_AP.hex,就 烧录IAP & AP程序

AP工程 IAP_AP.hex

AP工程 IAP_AP.hex

  1. 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 生成文件夹

IAP&AP.bin

备注

因 KEIL5 原因,生成的两个BIN档案无文件类型名,需要自行加上 .bin 文件类型名。

  • 工程输出目录 \HT32\52352\AP\OBJ\ 内含 IAP_AP.hex ;

IAP_AP.hex 生成文件夹

IAP_AP.hex 生成文件夹

  1. 生成 IAP_AP.hex 档,可用于量产烧录,可以一次性烧录 IAP&AP程序 ,到此已经完成了 固件关联 / x.hex/x.bin 关联 。

备注

因为 AP工程 生成 IAP_AP.hex ,需要包含 IAP.bin ,所以,联合工程 中必须先编译 IAP工程 生成 IAP.bin ,否则 AP工程 会无法找到 IAP.bin

程序关联

  1. 在程序中,需要配置 IAP & AP程序 中的跳转地址,在 ht32_board_config.h 中定义了 IAP & AP程序 的跳转参数。

ht32_board_config.h

ht32_board_config.h

备注

AP工程 & IAP工程 共用一个 ht32_board_config.h 参数文件,用户自行编写时,也应如此设置,避免参数文件不一致问题。

  1. IAP程序 中,使用 IAP_Go()AP区域SP 指针 和 PC 指针 检查正确后, IAP_GoCMD() 将值赋予当前的 SP 指针 和 PC 指针,实现程序的跳转。

Program Jump Method

Program Jump Method

警告

IAP程序 使用的外设功能一定要记得要取消,不然跳转 AP程序 后,这些外设功能会一直有效,会造成功能异常。

  1. IAP程序 中,使用 IAP_Download() 接收 上位机 下发的数据,并对 AP区域FLASH 进行擦除和写入。

IAP_Download()

IAP_Download()

IAP_AP 范例操作流程

  1. IAP_AP 范例操作前准备:

  • 使用仿真/烧录器,将 IAP程序 烧录到 MCU 中。

  • 接口连接:电脑USB端口 <–> USB转UART板子 <–> MCU - UART端口。

  1. 打开串口助手 Tera Trem 进行通信,根据串口打印的提示,选择 Updata AP ,然后串口一直打印出 CCCC 表示MCU在等待通讯。

流程 1

流程 1

  1. 此时,串口助手选择 Xmodem 发送,选择 AP.bin 发送,然后按提示操作。

流程 2

流程 2

流程 3

流程 3

流程 4

流程 4

备注

Xmodem 发送需要串口助手的支持,可用串口助手 Tera Trem 或者其他有此功能的串口助手。

  1. 当运行在 AP程序 时,需要跳转 IAP程序 进行升级:

    • AP程序 中,将状态变量 BOOT_MODE 幅值对应的状态,作为 IAP&AP程序 中的信息交换;

    • AP程序 中,使用 软件复位函数 NVIC_SystemReset() ,复位从FLASH起始区域开始运行 IAP程序

AP程序 设置 BOOT_MODE 和 软件复位

AP程序 设置 BOOT_MODE 和 软件复位

IAP 判断 BOOT_MODE

IAP 判断 BOOT_MODE

备注

BOOT_MODE 变量 为了能在 IAP&AP程序 中进行信息交换,使用固定地址的定义方法 ,在 RAM address : 0x0000 0000 定义了 BOOT_MODE。 所以在 Linker.lin 文件中,配置 AP程序RAM区域0x2000 0010 开始。

范例说明 : IAP_AP 常见问题,请参考 FAQ