本帖最后由 vt2017 于 2022-8-26 19:37 编辑
AT32WB415 OTA Application Note
前言
这篇应用笔记描述了如何通过WB415的蓝牙模块来进行OTA升级。
支持型号列表:
AT32WB415
概述
OTA(Over-The-Air Technology)即空中下载技术,利用OTA 技术可以在不接触(接线)的情况下
对芯片程序进行升级。AT32WB415 的OTA 是通过蓝牙的方式实现的,利用芯片中的蓝牙模块
(BLE)接收上位机发送的升级命令和程序代码。OTA 分为两个部分,用户可以选择OTA 升级BLE
模块APP,也可以选择OTA 升级MCU 端。对于MCU 端的升级参考了IAP 功能的实现,需要在设
计固件程序时编写两个项目代码,第一个项目程序不执行正常的功能操作,而只是通过串口接收程序
或数据,执行对第二部分代码的更新;第二个项目代码才是真正的功能代码。
AT32WB415 OTA 程序设计
地址分布
表1. 地址分布
注:mcu bootloader区域最后一个扇区,用于存放防止升级过程掉电的flag,用户编译修改bootloader时,要保证不覆
盖flag的地址。
上位机软件设计
为了方便用户开发,本应用指南提供了可用于AT32WB415 升级的上位机OTA 软件,其主要包括扫
描、连接蓝牙设备,获取设备信息,打开并下载OTA 文件等。软件流程如下:
1) 扫描并连接设备
2) 调用FFC0 服务中的FFC1 特征,发送0x00,等待BLE 端回复设备信息数据,共10 bytes,包
括2 bytes app 版本号,2 bytes app 长度,4 bytes uid,2 bytes rom 版本号;
3) 选择下载的bin 文件,再次调用FFC1 特征,发送bin 文件头部信息,共16 bytes,等待BLE
端接收该信息,并返回2 bytes 数据,返回值为0x0000;
4) 调用FFC2特征,开始发送bin文件,每次发送18 bytes,包括2 bytes block number和16 byts bin
文件数据,当block number等于bin文件头部信息中的bit[6:7] / 4时,传输完成
5) 调用FFC1特征发送0x5AA5,请求BLE返回OTA结果,如果返回0,则持续发送0x5AA5,如果返
回非0值,则发送0xA55A提示BLE进行复位。BLE端返回值含义:
— 0x0000:正在进行OTA
— 0xFFF0:成功
— 0xFFF1:错误
— 0xFFF2:超时
— 其他值:返回值错误
程序执行整体流程框图如下:
图1. 上位机程序执行流程
BLE 模块软件设计
对于BLE 模块部分的软件设计,boot&stack code 部分无需修改,软件设计都在app code。主要包
含了以下内容:
1) 接收上位机蓝牙数据
2) 对蓝牙接收到的bin 文件进行分析,在bin 档头部包含了app 版本、rom 版本、uid 等内容
3) 判断app 版本号,app_version > 0x8000,则用于MCU app 升级,否则用于BLE 模块 app 升
级
4) MCU app 升级时,先发送0xa55a5aa5 到MCU,提示其复位芯片,进入bootloader 程序,然
后通过串口将接收到的蓝牙数据发送给MCU
5) BLE 模块 app 升级时,直接将接收到的数据写入flash 中OTA 数据存放区域
6) 等待发送完成,复位BLE 模块
程序执行整体流程框图如下:
图2. BLE 程序执行流程
MCU 软件设计
MCU 软件设计分为Bootloader 和App 两部分,应用在App 中执行,升级过程在bootloader 中执
行。
Bootloader 功能包含:
1) 读取flash 中的标志判断是否需要更新app
2) 如果无需更新则直接跳转app 执行,需要更新则继续执行下面的操作
3) 接收BLE 模块发送的串口数据,将数据保存至mcu ota code 区域
4) 数据接收完成后将OTA 数据搬运至mcu app code 区域并跳转至app 执行
App 功能包含:
1) 清除flash 中的OTA 更新标志
2) 运行app 功能代码(IO 翻转)
3) 串口持续监测是否收到OTA 升级命令(0xa55a5aa5)
程序执行整体流程框图如下:
图3. MCU 程序执行流程
bootloader project 设置
1) Keil设置
图4. bootloader project 中address 4 在Keil 设置
2) bootloader源程序修改Iap.h文件中
图5. bootloader project 中address 5 在程序中设置
app project 设置
IAP demo 提供了2 个app 程序供测试用,皆以address 5(0x800 4000)为起始地址。app1 LED3
闪烁,app2 LED4 闪烁。以app2 为例,设计步骤如下:
1) Keil工程设置
图6. app project 中address 5 在Keil 设置
2) app1 源程序设置
图7. app project 向量表偏移在程序中设置
3) 编辑generate_app.bat批处理文件
文件中的“-v 0x8002”为app程序版本号,可配置为0x8000-0Xffff范围内的任意值。
4) 编译生成bin文件
通过User 选项卡,设置编译后调用fromelf.exe,根据axf 文件生成bin 文件,然后设置调用
encrypt_app.bat 批处理文件,生成OTA 升级所需的bin 文件。
通过以上3 个步骤,我们就可以得到一个APP 程序,将bin 文件添加到OTA 上位机软件即可实现
app 程序的更新。
如果在设计app code 过程中需要对app project 进行单独调试,请按照以下操作
a) 先下载bootloader工程
b) 再调试app工程
OTA 案例使用
本案例将展示如何通过BLE 模块完成对AT32WB415 的OTA 升级操作,包括BLE 模块应用层程序
升级和MCU 端应用层程序升级。
硬件资源
1) 指示灯LED2/LED3/LED4
2) AT-START-WB415实验板
3) 具有蓝牙设备的电脑
软件资源
1) ICP Programmer Tool,可在官网下载最新版本
2) Artery BLE OTA Tool,可在官网下载最新版本
3) BLE模块源码
ble_app_gatt,BLE源程序,用于BLE模块app程序,工程路径位于:
SourceCode\wb415_ble_ota_2.0.0\projects\ble_app_gatt
4) MCU端源码
bootloader,bootloader源程序,运行LED2闪烁,工程路径位于:
SourceCode\wb415_mcu_ota_2.0.0\project\wb415_mcu_project\bootloader
app_led3_toggle,app1源程序,运行LED3闪烁,工程路径位于:
SourceCode\wb415_mcu_ota_2.0.0\project\wb415_mcu_project\app_led3_toggle
app_led4_toggle,app2源程序,运行LED4闪烁,工程路径位于:
SourceCode\wb415_mcu_ota_2.0.0\project\wb415_mcu_project\app_led4_toggle
注:BLE模块工程仅提供Keil v5版本工程,MCU端工程基于keil v5和IAR8.2建立,若用户需要在其他编译环境上使
用,请参考AT32WB415_Firmware_Library_V2.x.x\project\at_start_wb415\templates中各种编译环境(例如
IAR6/7/8,keil 4/5, eclipse_gcc)进行对应修改即可。
BLE 模块OTA 升级
在OTA 升级之前需要在蓝牙芯片中烧录支持OTA 的源码,步骤如下:
1) 打开ble_app_gatt源程序
2) 编译后会生成一系列bin文件,位于ble_app_gatt\output\app路径,其中
wb415_ble_app_merge.bin,融合了底层蓝牙协议栈和上层应用程序
wb415_ble_app_app.bin,用于蓝牙OTA升级所用的上层应用程序
3) 打开ICP工具下载上述路径中的wb415_ble_app_merge.bin至BLE模块,如下图
4) 下载后会看到BLE模块(P16)串口打印数据,如下图
接下来就可以通过上位机软件BLE OTA Tool来进行OTA升级操作了,步骤如下:
1) 为了便于演示,修改ble_app_gatt源程序中的打印信息为“BLE app version 2.0”
2) 软件版本号的修改,可以打开工程/output/encrypt_app.bat文件,修改其中-v 0x000c部分,然后
重新编译工程即可得到待更新 OTA firmware;关于ROM版本号的查看,查看其中-rom_v
0x0001部分。
注意:OTA过程中会进行版本的校验,由于蓝牙芯片仅支持部分升级,所以一定要保证待更新的firmware的rom
版本号与芯片flash中的应用程序一致,且软件版本号必须与芯片flash中应用部分的软件版本号不一致才会执行
升级过程。
注意:用户千万不要随意修改ROM版本号,如果底层有改动,原厂会重新更新底层bin文件。
3) 打开Artery BLE OTA Tool 上位机软件
图11. Artery BLE OTA Tool
4) 点击“Scan”按钮扫描BLE设备
图12. 扫描BLE 设备
5) 点击WB415_OTA设备,再点击“Connect”按钮进行连接,连接成功后会显示出所选设备的软
件版本号及ROM版本号等设备信息
图13. BLE 设备详情页
6) 点击“Add”按钮,选择步骤2中得到的待更新OTA firmware文件wb415_ble_app_app.bin,选
中升级文件后会显示出所选OTA文件的软件版本号及ROM版本号信息
图14. 选择OTA 文件
7) 点击“Start OTA”按钮开始升级
图15. 开始OTA
8) 等待OTA升级成功后,设备会断开与上位机的连接,并提示下载成功
图16. BLE 模块OTA 完成
9) OTA完成后复位,会看到BLE模块(P16)串口打印数据如下图,则表示BLE模块OTA升级成功
更多详细内容请参考附件:
AN0144_AT32WB415_OTA_Application_Note_V2.0.0.zip
(3.04 MB)
|