我们这个例子是基于MCUBoot和蓝牙BLE连接实现的升级管理。关于MCUboot,您可以从如下链接获取更多信息:
https://github.com/mcu-tools/mcuboot
它的主要功能是负责代码的签名验证,代码镜像的搬移/回滚,引导应用程序等。
CYW0829 Bluetooth® LE battery server with OTA例子集成了标准的battery server,以及基于蓝牙的OTA功能,它可以通过蓝牙接收应用程序镜像并放到secondary slot。复位后,下次MCUboot会把新的镜像从secondary slot搬移到primary slot并加载。详细信息参考例子的readme文件,github上也有在线的readme:
https://github.com/Infineon/mtb- ... -battery-server-ota
为了简化流程,我把上述readme文件中的关键步骤总结如下,按照下面的步骤可以把MCUboot+BLE OTA跑起来。更多信息请参考上述工程的readme文件。
一, 创建MCUboot工程。
打开modus shell命令行窗口。这个工具集成在ModusToolbox中,安装ModusToolbox后在路径C:\Users\SunLei\ModusToolbox\tools_3.2\modus-shell下,双击Cygwin.bat即可打开。或者在Windows开始菜单搜索 modus shell也可以找到。这里的命令行语法和Linux系统一致。打开后,进入自己的工程目录,
安装并设置python路径。附件是我使用的python版本。安装后确认在系统环境变量里设置了正确的python路径:
这里路径和你的安装路径一致即可。在命令行输入命令确认python功能和版本:
执行如下命令获取MCUboot:
git clone https://github.com/mcu-tools/mcuboot
进入MCUboot路径,选择版本,分别执行:
cd mcuboot
git checkout v1.9.1-cypress
git submodule update --init –recursive
安装必备的插件:
cd scripts
pip install -r requirements.txt
这里看log都成功即可。如果有提示某些插件版本需要更新,可以按照提示进行更新。
调用如下命令检查cysecuretools 版本:
cysecuretools version
必须使用5.1.0以上版本。如果版本低,则执行如下命令更新版本:
pip install --upgrade --force-reinstall cysecuretools
二, 编译并下载MCUboot:
进入路径: cd mcuboot/boot/cypress
从Bluetooth_LE_Battery_Server_with_OTA\flash_map_json路径下复制cyw20829_xip_swap_single.json文件,粘贴到\mcuboot\boot\cypress路径下。
保持命令行在上述路径,调用如下命令编译:
make clean app APP_NAME=MCUBootApp PLATFORM=CYW20829 USE_CUSTOM_DEBUG_UART=1 USE_EXTERNAL_FLASH=1 USE_XIP=1 FLASH_MAP=./cyw20829_xip_swap_single.json TOOLCHAIN_PATH=c:/Users/SunLei/ModusToolbox/tools_3.2/gcc
建议你把上面的内容复制到notepad++,整理好空格,消除掉换行,再复制到命令行。上面TOOLCHAIN_PATH=c:/Users/SunLei/ModusToolbox/tools_3.2/gcc对应修改为你自己的工具实际路径。
编译得到的hex文件位于:MCUBootApp/out/CYW20829/Debug/MCUBootApp.hex 使用ModusToolbox programmer将其下载的板子中。下载完毕后可以一看到MCUboot的启动log。
三, 创建Bluetooth® LE battery server with OTA工程
使用ModusToolbox创建上述工程,然后在ModusToolbox里面编译工程。
命令行进入上述工程目录,设置工具路径:
export OPENOCD=C:/Users/SunLei/ModusToolbox/tools_3.2/openocd
请注意,上述路径需要调整为你的电脑上实际工具路径。
调用如下命令下载工程到板子中:
${OPENOCD}/bin/openocd -s "$OPENOCD/scripts" -f "$OPENOCD/scripts/interface/kitprog3.cfg" -c "set ENABLE_ACQUIRE 0" -c "set SMIF_BANKS { 0 {addr 0x60000000 size 0x100000 psize 0x100 esize 0x1000} }" -f $OPENOCD/scripts/target/cyw20829.cfg -c "init; reset init; flash write_image "build/APP_CYW920829M2EVK-02/Release/mtb-example-btstack-freertos-cyw20829-battery-server-ota.final.hex"; init; reset init; reset run; shutdown"
同样,为了避免错误,建议你把上面的内容复制到notepad++,整理好空格,消除掉换行,再复制到命令行执行。
上述命令执行完毕后,板子会重启,MCUboot会检测到写入的应用程序镜像,做校验并引导运行。
四, OTA功能演示
我们提供了基于安卓,IOS和Windows的OTA上位机工具如附件。以Windows上的工具(WsOtaUpgrade.exe)为例:
打开文件夹,进入路径:\Bluetooth_LE_Battery_Server_with_OTA\build\APP_CYW920829M2EVK-02\Release,找到OTA升级文件:
mtb-example-btstack-freertos-cyw20829-battery-server-ota.update.signed.bin
将其复制,拷贝到WsOtaUpgrade.exe同一个文件夹中。
打开modus shell命令行,进入WsOtaUpgrade.exe和bin文件所在路径,执行如下命令:
./WsOtaUpgrade.exe mtb-example-btstack-freertos-cyw20829-battery-server-ota.update.signed.bin
这个命令会启动Windows升级工具。
复位开发板,让程序重新发送广播。然后再工具中选择搜索到的BLE设备:
点击ok,在弹出的窗口上点击start开始程序升级,可以看到工具和开发板的升级log如下:
传输完毕后上位机提示完成,MCUboot会进行代码搬运:
最后程序会运行。
如果你遇到编译错误,大部分都是和python版本以及cysecure tool版本有关
|