这是最新(主)开发分支的文档。如果您正在查找以前版本的文档,使用左侧的下拉菜单选择所需的版本。

固件格式

固件可分为单个 .img 文件 和 多个 .img 文件组成的 .fls文件:

  • .img 文件为最小的烧录单元,一个 .img 文件可以被烧录至 flash 的某一地址

  • .fls 为完整固件包,由多个 .img 文件平铺组成,并不要求 .img 之间的顺序

一般而言,烧录时推荐使用 .fls 文件,使用简单。

.img 文件格式

Image 由 Header, Body 和数字签名三部分组成(如图)。

图3

Image Header

W800 Image Header 包含信息:魔术字,Image 属性,Image 启动地址,Image 长度,Image Header 头位置,Image 升级地址,Image CRC 校验,Image 解密信息,数字签名,压缩信息。

图3-1

Image Header 各字段描述

字段

描述

magic_no

魔术字,固定值 0xA0FFFF9F

img_attr

Img_Attr_Type,IMAGE Attribute

img_addr

Image area 在 flash 中的运行位置

img_len

Image area 的字节数长度

img_header_addr

IMAGE header 在 flash 中的位置

upgrade_img_addr

升级区地址,升级 IMAGE header 在 flash 中存放位置

org_checksum

Image body 的 crc32 结果

upd_no

升级版本号,值较大的表示版本较新; 当版本号为 0xFFFFFFFF 时,可升级任意版本号固件

ver

Image 版本号,字符串

next

下一个 image header 在 flash 中的位置(可选)

hd_checksum

Image header 的以上字段的 crc32 的值

Image Attribute

字段

Bit

描述

img_type

4

0x0:Bootloader; 0x1:User Image; 0xE:ft 测试程序; 其它值:用户自定义

code_encrypt

1

0:固件明文存储; 1:固件由客户加密后存储

pricey_sel

3

芯片内置 8 组 RSA 私钥用于解密固件加密的秘钥, 用户可任选一组使用,取值范围 0~7

signature

1

0:IMAGE 不包含签名部分; 1:IMAGE 包含 128bytes 签名

reserved

7

保留

gzip_enable

1

0:不使能 GZIP 压缩; 1:image area 部分为 GZIP 压缩档;(当前不支持 GZIP,仅支持压缩率更高的 XZ)

erase_block_en

1

0:不支持 64KB Block 擦除; 1:支持 Block 擦除

erase_always

1

0:Sector 或 Block 擦除前检查 flash 是否全 F, 全 F 的 Sector 或 Block 不进行擦除操作; 1:总是先擦后写

compress_type

2

0:不压缩 1:image area 部分为 XZ 压缩档;(目前仅支持压缩率更高的 XZ)

reserved

10

保留

Image Body

加密

压缩

Image Body 内容

用途

X

X

原始 Image 内容

Bootloader,User Image

X

原始 Image 压缩后的内容

User Image

X

原始 Image 加密的内容+加密信息

Bootloader

原始 Image 加密后压缩的内容+加密信息

User Image

数字签名

如果 Image Header 的属性里的 signature 被置位了,则说明固件带有数字签名。

数字签名是针对 Image Header 和 Image Body 组成的文件。

.fls 文件格式

图5-1

SoC 会依据 Header 来区分当前烧录的位置。