欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

RT-Thread Studio使用笔记(四):带片外Flash(W25Q128)的OTA(YModem)

程序员文章站 2022-07-03 09:05:40
前言在学习OTA之前,请先参考上两篇博客写的关于SPI设备及W25Q128的使用方法,传送门:https://blog.csdn.net/tigerots/article/details/107423633https://blog.csdn.net/tigerots/article/details/107933991如何使用OTA一. 制作BootLoader打开Bootloader 在线获取地址,注册,并根据RT-thread官方文档生成BootLoader,官方文档已经写的很清楚,再此...

前言

在学习OTA之前,请先参考上两篇博客写的关于SPI设备及W25Q128的使用方法,传送门:

https://blog.csdn.net/tigerots/article/details/107423633
https://blog.csdn.net/tigerots/article/details/107933991

如何使用OTA

一. 制作BootLoader

  1. 打开Bootloader 在线获取地址,注册,并根据RT-thread官方文档生成BootLoader,官方文档已经写的很清楚,再此不在复述。

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

此处需要格外注意三点:
第一, 要根据自己的硬件实际情况配置端口,比如,我用的是SPI2,使用PB13作为CS引脚,配置如下图所示:

RT-Thread Studio使用笔记(四):带片外Flash(W25Q128)的OTA(YModem)
第二,根据需求配置分区表,要求app分区不能小于编译完成后的固件大小,偏移地址根据提示填写,一般配置为128K即可,所以app分区的起始地址要让过开始的128K。download分区用于临时存放下载下来的固件,可以放在片内分区,也可以放在片外分区,分区大小依然要大于固件大小。配置完成后,请牢记如下地址。(我暂时没有使用出厂固件)。

RT-Thread Studio使用笔记(四):带片外Flash(W25Q128)的OTA(YModem)第三,压缩及加密方式选择,这里需要注意的是,固件制作是,必须和此处配置的压缩和加密方式相同。
RT-Thread Studio使用笔记(四):带片外Flash(W25Q128)的OTA(YModem)2. 下载BootLoader文件并通过下载器下载到芯片。至此BootLoader制作完成。启动板子后会有对应提示
RT-Thread Studio使用笔记(四):带片外Flash(W25Q128)的OTA(YModem)

二. 应用程序增加下载代码列表

  1. 在软件包中心添加ota软件包
    RT-Thread Studio使用笔记(四):带片外Flash(W25Q128)的OTA(YModem)

  2. 在OTA详细配置中,修改升级方式
    RT-Thread Studio使用笔记(四):带片外Flash(W25Q128)的OTA(YModem)

  3. 在fal详细配置中,选择使用SFUD驱动程序,设置FAL设备名称为SPI FLASH,我的设备名称为“w25q128”.
    RT-Thread Studio使用笔记(四):带片外Flash(W25Q128)的OTA(YModem)4. 使能片内flash
    RT-Thread Studio使用笔记(四):带片外Flash(W25Q128)的OTA(YModem)
    RT-Thread Studio使用笔记(四):带片外Flash(W25Q128)的OTA(YModem)

  4. 拷贝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_ */
  1. 增加中断向量表映射函数,之后保存并编译
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);
  1. 修改link文件中内存地址
    RT-Thread Studio使用笔记(四):带片外Flash(W25Q128)的OTA(YModem)

三. 打包固件

按如下步骤打包,注意打包器配置要和BootLoader相同

RT-Thread Studio使用笔记(四):带片外Flash(W25Q128)的OTA(YModem)RT-Thread Studio使用笔记(四):带片外Flash(W25Q128)的OTA(YModem)RT-Thread Studio使用笔记(四):带片外Flash(W25Q128)的OTA(YModem)RT-Thread Studio使用笔记(四):带片外Flash(W25Q128)的OTA(YModem)

四. 升级固件

按提示,在命令行输入升级命令,并发送升级文件,等待升级
注意: 使用片外Flash升级,升级速度相对较慢,请耐心等待

本文地址:https://blog.csdn.net/tigerots/article/details/107961967