rtthread stm32通用bootloader使用,在线升级
芯片型号:STM32F103VET6(100个引脚),主频 72MHz,512KB FLASH ,64KB RAM
仿真调试:J-LINK
rtthread官方文档:https://www.rt-thread.org/document/site/application-note/system/rtboot/an0028-rtboot/#ota
bootloader
制作bootloader
rtthread的stm32通用bootloader在线生成网址:http://iot.rt-thread.com/
预定bootloader分区大小64kb,app为192KB,download为128kb,剩余128kb另做他用
bootloader设置见下表:
芯片系列 | ROM | RAM |
---|---|---|
stm32f1 | 512kb | 64kb |
串口输出引脚 | 支持SPI flash | 恢复出厂按键引脚 |
PC12(UART5) | 不支持 | 无 |
app分区 | download分区 | factory分区 |
0x08010000,192kb | 0x08040000,128k | 暂无 |
加密key | 加密iv | 压缩 |
暂无 | 暂无 | fastlz |
log订制生成网址:http://www.network-science.de/ascii/ https://www.jianshu.com/p/fca56d635091
使用bootloader
软件:J-flash
下载地址: https://www.segger.com/downloads/jlink/
软件操作:
- 新建STM32F103VE工程,配置仿真器模式(JTAG/SWD),配置芯片型号,配置芯片地址
- 打开需要下载的文件,选择下载地址
- Target-Connect连接电路板,擦除并烧写程序
- 重启电路板,可以看到打印出bootloader信息
附:rtthread官方提供的bootloader不开源,如果需要自定义添加一些功能可以参考使用这位大神提供的bootloader
https://www.rt-thread.org/qa/thread-422812-1-1.html
APP
制作带有ymodem_ota功能的APP
使能Ymodem OTA功能(RT-Thread online packages → IoT - internet of things → ota_downloader)
添加BSP_Flash驱动(Kconfig文件添加下述配置,并且在menuconfig里面使能)
config BSP_USING_ON_CHIP_FLASH
bool "Enable on-chip FLASH"
default n
配置FAL分区
- 在使能Ymodem OTA功能的时候会自动选中FAL组件
- 将/packages/fal-latest/samples/porting 目录下的 fal_cfg.h 复制到/board/ports目录下,在/boart/SConscript文件中加入/board/ports目录,如已存在此目录和文件则忽略
- 修改/board/ports/ fal_cfg.h文件,修改后内容如下
#ifndef _FAL_CFG_H_
#define _FAL_CFG_H_
#include <rtthread.h>
#include <board.h>
#define RT_APP_PART_ADDR 0x08010000 //程序启动运行地址
extern const struct fal_flash_dev stm32_onchip_flash;
/* flash device table */
#define FAL_FLASH_DEV_TABLE \
{ \
&stm32_onchip_flash, \
}
/* ====================== Partition Configuration ========================== */
#ifdef FAL_PART_HAS_TABLE_CFG
/* partition table */
#define FAL_PART_TABLE \
{ \
{FAL_PART_MAGIC_WROD, "bl", "onchip_flash", 0, 64 * 1024, 0}, \
{FAL_PART_MAGIC_WROD, "app", "onchip_flash", 64*1024, 192 * 1024, 0}, \
{FAL_PART_MAGIC_WORD, "download", "onchip_flash", 256*1024, 128 * 1024, 0}, \
{FAL_PART_MAGIC_WROD, "param", "onchip_flash", 496*1024, 16 * 1024, 0}, \
}
#endif /* FAL_PART_HAS_TABLE_CFG */
#endif /* _FAL_CFG_H_ */
修改APP的链接脚本和中断向量跳转地址(此处直接参照官方文档步骤即可)
下载APP程序
打包APP固件并执行OTA
修改程序版本号,只编译而不下载
打开 packages/ota_downloader-latest/ tools/ota_packager/rt_ota_packaging_tool.exe软件,将编译后的程序打包成可被升级的rtthread.rbl文件,注意压缩算法和加密算法,如果在bootloader中使能了,需与bootloader中配置相同
在msh命令行中输入ymodem_ota指令,并用Ymodem发送rtthread.rbl文件,此处推荐使用XShell软件,传输完成后会自动重启并升级,并可以看到程序版本号已经更改
附:如果需要更改传输文件的串口,更改ymodem_ota文件的如下处即可,此处我用的是UART2,故将rt_console_get_device()函数改成了serial2设备(serial2设备已在uart初始化时打开)。
if (!rym_recv_on_device(&rctx, serial2, RT_DEVICE_OFLAG_RDWR | RT_DEVICE_FLAG_INT_RX,
ymodem_on_begin, ymodem_on_data, NULL, RT_TICK_PER_SECOND))