应用笔记(四)| 在CW32F030上实现IAP功能

前言
iap 是 in application programing 的首字母缩写,在应用编程,即在程序运行的过程中进行编程(升级程序, 更新固件)。iap 是用户自己的程序在运行过程中对 flash 部分区域进行烧写,目的是为了在产品发布后可以方便地通过 预留的通信口对产品中的固件程序进行更新升级。
1
功能实现
iap 功能的实现,一般将程序分为两个部分,即:bootloader 和 app。bootloader 程序用于上电时判断程 序是进入 iap 升级流程还是进入 app 应用程序执行过程。其一般放置在 flash 的开始部分,如下图示:
cw32f030 的 flash 起始地址为 0x00000000,划分 0x00000000 ~ 0x00001ffff 这 8kbyte 的空间用于存放 bootloader 程序,app 的起始地址选择为 0x00002000。 
cw32f030 采用 arm® cortex®-m0+ 内核,具有向量表偏移寄存器 vtor,故其从 bootloader 中实现向 app 中跳转较为简单,仅设置向量表偏移即可。 
本应用中 bootloader 采用 uart1 作为 iap 的通讯接口,以 ymodem 协议进行文件的传输。app 程序通过 systick 定时器计时,并通过中断的方式每 200ms 对口线 pb09 翻转一次,驱动 led1 闪烁。
2
bootloader 程序设计
2.1 参考代码
2.2 程序编译
以 mdk-arm 为例,编译时注意如下选项:
 1. 设 置 bootloader 程 序 的 起 始 地 址 和 占 用 rom(flash) 空 间 的 大 小, 本 例 中 bootloader 从 地 址 0x00000000 处执行,占用 7.46kbyte 的空间,故分配 8kbyte(size=0x2000)的 flash 空间保留给 bootloader。如下图:
2. 链接时,使用 ide 的对话框配置,如下图:
3
app 程序设计
app 程序可以先按正常程序的设计流程进行设计和调试,等调试测试通过后,需要进行如下的修改: 
1. 在对系统初始化时,修改中断向量表的偏移地址 
如下图将 vect_tab_offset 修改为 0x00002000,这个偏移量就是用户的程序准备在 flash 中存放 的地址,本例设置为 0x00002000。这样用户程序的中断向量表就被重定位到 0x00002000 处,与 arm® cortex®-m0+ 内核默认的中断向量表地址 0x00000000 相区分。
2. 修改编译配置
如下图,start 填入的值,即为 app 程序在 flash 中存放的起始地址,也是中断向量表需要偏移的位置。
3. 链接时,使用 ide 的对话框配置,如下图:
4
演示
上 位 机 采 用 windows 的 超 级 终 端, 设 置 串 口 波 特 率 为 115200bps,8 位 数 据 位,1 位 停 止 位。下 位 机 cw32f030c8t6 starkit 复位后,按下 key1 后,超级终端将有如下显示:
屏幕不断显示字符“c”,提示下位机准备接受文件。选择“传送”-“发送文件”,如下图:
在出现的对话框中选取用户的 app 文件,并将协议选择为“ymodem”,并点击“发送”,如下图:
程序传输完成后,屏幕将有如下提示:
此时,cw32f030c8t6 starkit 板上的 led1 将以 200ms 的间隔闪烁,说明用户程序已正常运行。

血库中怎样借助rfid技术
万亿蓝海市场,国产电子元器件产业的春天来了
C/C++语言为何备受开发人员喜欢?
端子线可靠性测试项目有哪些?
关于可穿戴设备的各种形态
应用笔记(四)| 在CW32F030上实现IAP功能
移远通信如何推动配电系统的智慧升级
加密数字货币交易平台INCX介绍
广西移动采用华为5G网络打通了首个跨国越洋5G电话
小功率充电器适配器电源管理ic方案SM7022易过CE/UL国际认证
区块链技术将从根本上重塑商业和日常生活
小米、乐视陷入两难境地 调低供应链订单量
高压看门狗定时器提高汽车系统安全性
曝苹果将在新一代iPhone中启用新的屏幕技术 手机重量将更轻
大疆御MavicPro电池/充电器评测 还带有一定的线损补偿能力
简单聊一聊高频电磁场仿真学习(上)
关于国产工控机的简介,它的种类有哪些
电动汽车充电应用测试解决方案
魏少军:推动半导体产业实现再全球化
CEBus标准,什么是CEBus标准