rtthread 通用Bootloader+stm32f407+rtstudio的OTA升级

前言

  • 硬件平台:stm32f407discovery。
  • 分区定义:
    通用bootloader包含三个分区,本次实验中按如下规则定义:
分区名起始地址分区大小分区位置介绍
app0x8040000128k片内 Flash存储 app 固件
download0x8020000128k片内 Flash存储待升级固件
factory0x8060000128k片内 Flash存储出厂固件

获取bootloader

Bootloader 在线获取地址: http://iot.rt-thread.com

  • 登录
    在这里插入图片描述

  • 新建产品
    在这里插入图片描述

  • 进入固件升级模块
    在这里插入图片描述

  • 生成bootloader
    a.根据芯片及板子参数填写硬件配置。
    在这里插入图片描述
    b.根据分区定义填写分区配置表。
    在这里插入图片描述
    c.配置加密加密和压缩,点击生成按钮,等待下载完成。
    在这里插入图片描述

烧录bootloader

使用STM32 ST-LINK Utility。

  • 打开bootloader文件

在这里插入图片描述

  • 连接

在这里插入图片描述

  • 烧录

在这里插入图片描述
在这里插入图片描述

  • 验证
    使用xshell,新建串口会话。
    在这里插入图片描述
    复位板子,可以看到串口日志,到此bootloader烧录完成。
    在这里插入图片描述

APP生成

  • 新建rtthread项目
    在这里插入图片描述
  • 添加相关功能
    在这里插入图片描述
    在这里插入图片描述
    a.添加OTA软件包,使用Ymodem下载方式。
    在这里插入图片描述
    在这里插入图片描述
    b.添加 BSP Flash 驱动。
    默认没有找到Enable on-chip flash选项,根据参考资料,编辑F4_APP_Demo\rt-thread\components\drivers下的kconfig文件,添加如下代码:
config BSP_USING_ON_CHIP_FLASH
        bool "Enable on-chip FLASH"
        default n

在这里插入图片描述
c.重新启动Settings。
在这里插入图片描述
d.添加 BSP Flash 驱动。
在这里插入图片描述

  • 编译工程
    报错:没有fal_cfg.h。
    在这里插入图片描述
    添加fal_cfg.h至工程,复制packages\fal-v0.5.0\samples\porting下的fla_cfg.h至\packages\fal-v0.5.0\inc下.重新编译,报错如下,需修改fal_cfg.h。
    在这里插入图片描述
    修改后如下:

    #ifndef _FAL_CFG_H_
    #define _FAL_CFG_H_
    
    #include <rtconfig.h>
    #include <board.h>
    
    #define RT_APP_PART_ADDR 0x08040000
    
    #define FLASH_SIZE_GRANULARITY_16K   (4 * 16 * 1024)
    #define FLASH_SIZE_GRANULARITY_64K   (1 * 64 * 1024)
    #define FLASH_SIZE_GRANULARITY_128K  (7 * 128 * 1024)
    
    #define STM32_FLASH_START_ADRESS_16K  STM32_FLASH_START_ADRESS
    #define STM32_FLASH_START_ADRESS_64K  (STM32_FLASH_START_ADRESS_16K + FLASH_SIZE_GRANULARITY_16K)
    #define STM32_FLASH_START_ADRESS_128K (STM32_FLASH_START_ADRESS_64K + FLASH_SIZE_GRANULARITY_64K)
    
    
    /* ===================== Flash device Configuration ========================= */
    extern const struct fal_flash_dev stm32_onchip_flash_16k;
    extern const struct fal_flash_dev stm32_onchip_flash_64k;
    extern const struct fal_flash_dev stm32_onchip_flash_128k;
    
    /* flash device table */
    #define FAL_FLASH_DEV_TABLE                                          \
    {                                                                    \
    	&stm32_onchip_flash_16k,                                         \
    	&stm32_onchip_flash_64k,                                         \
    	&stm32_onchip_flash_128k,                                        \
    }
    /* ====================== Partition Configuration ========================== */
    #ifdef FAL_PART_HAS_TABLE_CFG
    /* partition table */
    #define FAL_PART_TABLE                                                               \
    {                                                                                    \
    	{FAL_PART_MAGIC_WORD, "download",     "onchip_flash_128k",   0,  128*1024, 0}, \
    	{FAL_PART_MAGIC_WORD,       "app",    "onchip_flash_128k",   1*128*1024,  FLASH_SIZE_GRANULARITY_128K - 128*1024, 0}, \
    }
    #endif /* FAL_PART_HAS_TABLE_CFG */
    
    #endif /* _FAL_CFG_H_ */
    
    
  • 初始化 FAL及携带版本信息
    在这里插入图片描述

  • 修改 app 固件配置
    由于 app 分区的起始地址为 0x08040000,app 固件如果想运行在该地址,就需要修改链接脚本和中断向量的跳转地址。
    a.修改链接脚本。
    在这里插入图片描述
    在这里插入图片描述
    b.修改中断向量表的跳转基地址为 0x8040000。
    在 main.c 文件中添加如下代码,这段代码的功能是重新设定中断向量跳转地址为 app 分区的地址。
    在这里插入图片描述

    static int ota_app_vtor_reconfig(void)
    {
    	#define NVIC_VTOR_MASK 0x3fffff80
    	SCB->VTOR = RT_APP_PART_ADDR & NVIC_VTOR_MASK;
    	return 0;
    }
    INIT_BOARD_EXPORT(ota_app_vtor_reconfig);
    
  • 下载运行APP
    串口打印出了版本信息,至此APP烧录至MCU完成。
    在这里插入图片描述

打包固件

  • 修改软件版本为2.0.0
    	#define APP_VER "2.0.0"
    
  • 打包
    打包器“rt_ota_packaging_tool.Exe”位于packages\ota_downloader-latest\tools\ota_packager下。
    在这里插入图片描述

使用Ymodem进行OTA升级

使用xshell工具进行Ymodem。

  • 配置Ymodem命令
    首次使用需要配置Ymodem命令为”ymodem_ota”
    在这里插入图片描述
    在这里插入图片描述
  • 传输文件
    传输刚才打包完成的rtthread.rbl文件。
    在这里插入图片描述
  • OTA成功
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值