RT-Thread Studio使用笔记(四):带片外Flash(W25Q128)的OTA(YModem)
前言
在学习OTA之前,请先参考上两篇博客写的关于SPI设备及W25Q128的使用方法,传送门:
https://blog.csdn.net/tigerots/article/details/107423633
https://blog.csdn.net/tigerots/article/details/107933991
如何使用OTA
一. 制作BootLoader
- 打开Bootloader 在线获取地址,注册,并根据RT-thread官方文档生成BootLoader,官方文档已经写的很清楚,再此不在复述。
Bootloader 在线获取地址: http://iot.rt-thread.com
此处需要格外注意三点:
第一, 要根据自己的硬件实际情况配置端口,比如,我用的是SPI2,使用PB13作为CS引脚,配置如下图所示:
第二,根据需求配置分区表,要求app分区不能小于编译完成后的固件大小,偏移地址根据提示填写,一般配置为128K即可,所以app分区的起始地址要让过开始的128K。download分区用于临时存放下载下来的固件,可以放在片内分区,也可以放在片外分区,分区大小依然要大于固件大小。配置完成后,请牢记如下地址。(我暂时没有使用出厂固件)。
第三,压缩及加密方式选择,这里需要注意的是,固件制作是,必须和此处配置的压缩和加密方式相同。
2. 下载BootLoader文件并通过下载器下载到芯片。至此BootLoader制作完成。启动板子后会有对应提示
二. 应用程序增加下载代码列表
-
在软件包中心添加ota软件包
-
在OTA详细配置中,修改升级方式
-
在fal详细配置中,选择使用SFUD驱动程序,设置FAL设备名称为SPI FLASH,我的设备名称为“w25q128”.
4. 使能片内flash -
拷贝fal_cfg.h文件,并进行修改,内容如下,重点修改
#define RT_APP_PART_ADDR 0x08020000 为app起始地址,用于设置中断向量列表
#define FAL_FLASH_DEV_TABLE 结构中增加片外flash
#define FAL_PART_TABLE 根据BootLoader中的地址配置,修改分区表,注意,分区表的起始地址,F4系列128K的分区起始地址为0x08020000,所以设置的便宜地址为0
#ifndef _FAL_CFG_H_
#define _FAL_CFG_H_
#include <rtthread.h>
#include <board.h>
#define RT_APP_PART_ADDR 0x08020000 //app begin address
#define NOR_FLASH_DEV_NAME "w25q128"
extern struct fal_flash_dev nor_flash0;
#define FLASH_SIZE_GRANULARITY_16K (4 * 16 * 1024)
#define FLASH_SIZE_GRANULARITY_64K (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)
extern struct fal_flash_dev stm32_onchip_flash_16k;
extern struct fal_flash_dev stm32_onchip_flash_64k;
extern 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, \
&nor_flash0, \
}
// &nor_flash0,
/* ====================== Partition Configuration ========================== */
#ifdef FAL_PART_HAS_TABLE_CFG
/* partition table */
#define FAL_PART_TABLE \
{ \
{FAL_PART_MAGIC_WROD, "app", "onchip_flash_128k", 0, (384 * 1024), 0},\
{FAL_PART_MAGIC_WROD, "download", "w25q128", 0, (384 * 1024), 0},\
}
#endif /* FAL_PART_HAS_TABLE_CFG */
#endif /* _FAL_CFG_H_ */
- 增加中断向量表映射函数,之后保存并编译
static int ota_app_vtor_reconfig(void)
{
#define NVIC_VTOR_MASK 0x3FFFFF80
/* Set the Vector Table base location by user application firmware definition */
SCB->VTOR = RT_APP_PART_ADDR & NVIC_VTOR_MASK;
return 0;
}
INIT_BOARD_EXPORT(ota_app_vtor_reconfig);
- 修改link文件中内存地址
三. 打包固件
按如下步骤打包,注意打包器配置要和BootLoader相同
四. 升级固件
按提示,在命令行输入升级命令,并发送升级文件,等待升级
注意: 使用片外Flash升级,升级速度相对较慢,请耐心等待
本文地址:https://blog.csdn.net/tigerots/article/details/107961967