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))

参考链接:https://blog.csdn.net/ylzmm/article/details/104234099

posted @ 2020-03-31 17:59  princepeng  阅读(4735)  评论(4编辑  收藏  举报