前言
买了小熊派的开发板,将demo code验证完成之后就放下了。刚好最近工作也在做OTA相关的开发,发现自己对于升级的功能还不够了解,在码云找到了一位大神基于RTThread的RT-FOTA代码,基本与RTThread的BootLoader功能一致,闲来无事,将这个移植适配到小熊派开发板。
一、RT-FOTA介绍
码云仓库中的地址为 https://gitee.com/Aladdin-Wang/RT-FOTA-STM32L431
摘抄自仓库的readme:
为了能让开发者快速掌握 OTA 升级这把利器,RT-Thread 开发团队提供了通用的Bootloader。开发者通过该 Bootloader 即可直接使用 RT-Thread OTA 功能,轻松实现对设备端固件的管理、升级与维护。
下图展示了 RT-Thread 通用 Bootloader 的软件框架:
RT-Thread 开发团队的官方Bootloader以bin文件形式提供, 在线获取地址: http://iot.rt-thread.com
RT-FOTA功能介绍:
- 支持RTT官方的RBL打包软件,使用方式也一致。目前支持包括CRC32、AES256、quicklz和fastlz功能;
- 支持命令行模式(FINSH组件)和出厂固件恢复;
- 支持FLASH分区(FAL组件);
- 增加fota和ymdown命令;
- 其他功能可自行方便扩展;
关于RT-FOTA的基本移植操作请参看代码仓库的readme
二、适配驱动外设的代码
下载源码之后,里面包括了stm32f429和stm32l431的两个boot工程和一个stm32f429的app工程。
由于小熊派开发板使用的stm32L431,我们基于stm32L431的工程进行代码适配移植。
2.1 修改signal_led的配置
在rtconfig.h中配置小熊派开发板LED
#define RT_FOTA_SIGNAL_LED
#define RT_FOTA_SIGNAL_LED_GPIOX GPIOC
#define RT_FOTA_SIGNAL_LED_GPIO_PIN GPIO_PIN_13
#define RT_FOTA_SIGNAL_LED_ON_LEVEL GPIO_PIN_RESET
2.2 修改按键的配置
在rtconfig.h中配置小熊派开发板KEY1
#define RT_FOTA_DEFAULT_KEY
#define RT_FOTA_DEFAULT_KEY_CHK_TIME 10
#define RT_FOTA_DEFAULT_KEY_GPIOX GPIOB
#define RT_FOTA_DEFAULT_KEY_GPIO_PIN GPIO_PIN_2