1、文档简介
此文档从较为宏观的角度来说明
XR806 SDK的flash所使用的布局情况,主要介绍整个image和sysinfo以及OTA区域之间的位置关系。
2、概述
2.1 背景说明
XR806 SDK将编译生成的bin文件按照固定的结构进行打包生成image文件,然后用户再将其烧写到flash上启动运行。Flash资源有限,为了腾出更多的flash空间,合理地分配image和OTA等区域很重要。
2.2 规格特性
Flash布局支持以下功能特性。
规格类型 | 支持规格 | 规格描述 |
文件布局 | 手动布局 | 可以使用maxjen设置bin文件的最大占用空间来确认 其存储位置,亦可使用flash_offs字段设置bin文件的 flash偏移地址来确认其储位置 推荐使用maxjen字段进行布局 |
自动布局 | 不对bin文件的flash偏移和最大占用空间作限制,软 件会自动进行排布 |
OTA布局 | OTA address | 自定义设置OTA区域的flash偏移地址 |
OTA size | 自定义设置OTA区域的占用大小 |
OTA升级方式 | Ping-pong 方式 | 两个image区域都保存完整固件,轮流进行升级 |
压缩方式 | 仅第一个image区域保存完整固件,第二个区域保存压 缩固件,升级时将其解压至第一个区域进行使用 |
2.3 文件位置
以 SDK 包为根目录,flash 布局涉及到的主要文件位置如下。
Flash
layout 配置文件 ./project/image_cfg/
关键文件说明如下:
image.cfg Flash 布局的通用配置文件
image_img_xz.cfg 压缩模式的 OTA 升级方式所使用的 flash 布局配置文件
3、技术说明
3.1 整体布局
整个 flash 的布局和 OTA 升级的模式有关,ping pong 模式下,flash 占用会比在压缩模式下大。 两种模式下 flash 的布局如下图所示。
由上图可知,整个flash可以划分为image1、sysinfo、OTA area、image2(compressed image)四个区域, 其中image1、image2是有多个bin组成,每个bin又由头部信息(header)、bin文件数据(body)以及证书文件(tailer)组成。下面详细介绍每个区域的意义和使用。
3.1.1 Image 1
Image 1 是一个完整的镜像,里面包含了 boot.bin、app.bin...xxx.bin,从 flash 的 0 地址开始。
Image 1 区域之后一般都会有一部分 padding 区域,该区域是后期给 OTA 升级预留的空间。后期代码增 加,功能扩展,会导致 image 大小增加,所以需要给后期升级扩展预留一定的空间。 padding 的最大值需要在项目开发前确定好,即需要先确定好 image 的最大值,否则容易出现后期开发 扩展时,image 超过最大值而覆盖 sysinfo 数据。假设正常编译的 image 是 900K(包含 bootloader),则 可定义 image 的最大值为 1020K,后期开发的 image 就不能超过 1020K。
3.1.2 Sysinfo 区域
Sysinfo 是一段用于存储用户自定义数据的区域,其大小默认被设置为 4K,位置被设置为 1020K(1024K - 4K)的地址,默认是放在 OTA 区域之前的位置。Sysinfo 的位置和大小是被定义在工程目录下的 prj_config.h 文件中,用户可根据需求进行修改,但是需要注意不能与 image 区域和 OTA 区域重叠。
/* sysinfo start address */
#define PRJCONF_SYSINFO_ADDR ((1024 - 4) * 1024)
/* sysinfo size */
#define PRJCONF_SYSINFO_SIZE (4 * 1024)
更多详细内容请下载附件查看