OTA是固件管理,升级的主要工具,为了更方便的完成OTA升级,rt_thread官方提供了通用bootloader。
bootloader是什么?
Bootloader是嵌入式系统在加电后执行的第一段代码,通过这段小程序,进行硬件初始化,获取内存大小信息等,调整手机到适配状态。在它完成CPU和相关硬件的初始化之后,再将操作系统映像或固化的嵌入式应用程序装在到内存中然后跳转到操作系统所在的空间,启动操作系统运行 。
rt_thread提供的通用Bootloader 的主要功能是更新 app 分区中的固件。
使用通用bootloader应该注意什么?
rt_thread官方提供了非常详细的教程,参考:
https://www.rt-thread.org/document/site/#/rt-thread-version/rt-thread-standard/application-note/system/rtboot/an0028-rtboot?id=stm32-%e9%80%9a%e7%94%a8-bootloader
通用bootloader分区表包含如下三个分区。
首先我们要明确分区的位置,我们采用的STM32F429VET6系列单片机,单片机的片内FLASH(RAM)大小为512kb,
器件flash大小如图:
下载程序大小为:
约为309k,因为STM32F4系列芯片前128k默认分配给bootloader程序,能够使用的空间为384kb。所以我们选择了片外spi-flash作为download区,片内flash作为app区。
分区表的配置
使用bootloader重点是配置分区表和固件一致,bootload固件分区我们设置为:
stm32f4系列片内flash出厂分区为
/*
* Copyright (c) 2006-2018, RT-Thread Development Team
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* 2018-05-17 armink the first version
*/
#ifndef _FAL_CFG_H_
#define _FAL_CFG_H_
#include <rtconfig.h>
#include <board.h>
/* ===================== Flash device Configuration ========================= */
extern struct fal_flash_dev nor_flash0;
/* flash device table */
#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