CX32L003 IAP应用编程
一、什么是IAP编程?
- IAP是 In Application Programming 的首字母缩写,IAP是用户自己的程序在运行过程中对User Flash的部分区域进行烧写,目的是为了在产品发布后可以方便地通过预留的通信口对产品中的固件程序进行更新升级。
- CX32L003F8具有64K Flash ROM,完全具备了IAP应用编程的内存大小,且透传模块会将UART进行引出,故可以选择添加此功能,实现固件更新。
二、软件及其硬件的准备
1. 内存结构介绍
- CX32L003F8 用户可编程内存空间为 64K ,其内存结构如下所示:
- 对于不包含 IAP 应用编程的工程,开发者通常会从0x0000 0000开始编写程序,即未包含 IAP boot 区域;
- 对于包含 IAP 应用编程的工程,开发者则会预留一个 IAP boot 的区域,该部分代码主要用于引导程序进入User Program 或者修改 User Program。
2. UART 接口
- IAP Boot 也需要用户根据自己的需求进行编写程序,用户需要在 IAP Boot 中指明数据接口(例如I2C、SPI 或 UART 等接口),此文将重点以 UART接口 进行编写。
- UART 主要有以下几个重要的参数:
波特率会直接影响数据的传输速度,建议使用较高的波特率,避免下载速度缓慢。
UART参数 | 参考设定值 |
---|---|
波特率 | 115200 bps |
数据位 | 8 bit |
校验位 | 无校验 |
停止位 | 1 bit |
- 但是 UART 无法跟 PC 直接建立连接,需要将 UART 虚拟化为 COM 口,才能和 PC 进行通讯。此处建议使用 CP2102 或 CH341进行虚拟化为 COM 口,可打开 PC 的 设备管理器 的 端口 进行查询。
3. 为何使用 .bin 文件进行固件升级?
- 通常下 CX32L003 会使用 .hex 文件进行代码烧录,但 IAP 应用编程中却不是使用 .hex 而选择了 .bin文件,其主要原因是:
.bin文件下载时传输效率高,其次因起始地址和长度在已知,所以只需要擦除实际代码大小的Flash,缩短了擦除 Flash的时间,同时也减小了 Flash损耗。
.hex文件传输的是ASCII码,ASCII码传输效率低,其次 .hex文件无法得知文件大小,需要进行全部擦除。
4. 为何要使用 Ymodem 协议?
- Ymodem 是 Xmodem 的改进版协议,具有传输快速稳定的优点,能自动校验数据。它可以一次传输1024字节的信息块,同时还支持传输多个文件。
- YModem-1K 用 1024 字节信息块传输取代标准的 128 字节传输,数据的发送回使用 CRC 校验,保证数据传输的正确性。它每传输一个信息块数据时,就会等待接收端回应 ACK 信号,接收到回应后,才会继续传输下一个信息块,保证数据已经全部接收。
5. APP的编译设置
- 设置中断向量位置偏移:
system_cx32l003.c文件中的宏定义 VECT_TAB_OFFSET 设置如下
#define VECT_TAB_OFFSET 0x00002000U
)
6. IAR环境下的编译设定
-
IAR option 设置:Option -> Linker -> Edit -> .intvec start : 0x0000 2000
-
设置编译输出格式:
AR option 设置:Option -> Output Converter -> Output format : Raw binary -> project.bin
-
设置完以上操作后,需要进行编译,并找到相应的 .bin 文件,位置和与之前的 .hex 相同。
7. Keil5 环境下的编译设定
- Keil5 设置:option -> Target -> IROM1: 0x2000
- Keil5 设置:option -> Linker -> R/O base: 0x0000 2000
- Keil5 设置:option -> Debug-> Flash Download -> start:0x0000 2000
- Keil5设置编译输出格式:option -> User -> Run #2 修改为下列所示:
fromelf --bin --output .\Project\project.bin .\Project\project.axf
参考链接:MDK(KEIL5)如何生成.bin文件
- 设置完以上操作后,需要进行编译,并找到相应的 .bin 文件,位置和与之前的 .hex 相同。
三、安装secure CRT
- 之前有提及的 Ymodem 协议需要在secure CRT 下才能进行传输任务,故需要安装Secure CRT。
- 下载地址:百度云下载链接
- 提取码:40xe
- 破解教程:secure CRT破解教程
- 下载完成后目录:
四、IAP 下载
-
打开 secure CRT,新建一个会话 session,会话接口选择 Serial(串口),点击下一步;
-
选中需要连接的串口设备,并补全 UART 参数,点击下一步,点击完成。
-
将 CX32L003 MCU 预先烧录 IAP 程序,并连接电源,串口会输出如图所示数据:
-
开发板上电后打印如下,在5秒内按回车则可进入IAP下载模式,否则直接跳转到APP执行;
-
5秒内按回车后打印如下,当打印出字符“C”时可以下载APP文件;
-
选择工具栏中Transfer->Send Ymodem,如下图;
-
按下图选择要下载的 APP 的 .bin 格式的生成文件,注意一定要在红色“A”处看到你选择的文件,然后点击OK;
-
可以看到如下图的下载结果并跳转到APP并运行。