存储配置
存储是编译的固件是否可刷机的最重要的原因,但存储的更换要修改的地方比较多,因此我们建议的方案就是按照现存的工程仿写需要 Bringup 的开发板。
SPINAND
型号选择
SDK 默认支持了几种 SPINAND,编译之前需要确认开发板的型号被选中支持,如果不在支持列表中,则需要参考 SPINAND 移植指南进行移植。
Bootloader 和 SPL 分区一般都比较小,开启的 SPINAND 型号过多的话存储容易越界,因此建议只打开需要用到的型号即可。
Bootloader
通过 launch 到对应的 Bootloader 配置,me –> Drivers –> Peripheral 选择:
-*- SPINAND Driver library
[*] Support Dosilicon SPI NAND
[*] Support Etron SPI NAND
[*] Support Micron SPI NAND
[*] Support Macronix SPI NAND
[*] Support Winbond SPI NAND
[*] Support GigaDevice SPI NAND
[*] Support Toshiba SPI NAND
[*] Support Foresee SPI NAND
[*] Support Xtx SPI NAND
[*] Support Zetta SPI NAND
[ ] Support Zbit SPI NAND
[ ] Support ESMT SPI NAND
[ ] Support UMTEK SPI NAND
[ ] Support QUANXING SPI NAND
2
3
4
5
6
7
8
9
10
11
12
13
14
15
RT-Thread
RT-Thread 同 Bootloader 类似,launch 对应的 RT-Thread 配置,me –> Drivers –> Peripheral 选择对应的厂商。
文件系统
SPINAND 文件系统默认采用 FATFS,以 d21x demo128_nand 工程为例,编译后生成固件的名称为:
d21x_demo128_nand_page_2k_block_128k_v1.0.0.img。
SDK 也支持 page size 为 4K(很少用到)的 SPINAND,需要在工程的配置文件 target/d21x/demo128_nand/image_cfg.json 进行配置。
"info": { // Header information about image
"platform": "d21x",
"product": "demo128_nand",
"version": "1.0.0",
"media": {
"type": "spi-nand",
"device_id": 0,
"array_organization": [
{ "page": "2k", "block": "128k", "oob": "64" },
// { "page": "4k", "block": "256k", "oob": "128" },
],
}
},
2
3
4
5
6
7
8
9
10
11
12
13
分区
分区信息在 target/d21x/demo128_nand/pack/image_cfg.json 中。注意调整分区后要跳到 Bootloader 配置编译,或者在 RT-Thread 配置下使用 mb 命令编译。
"spi-nand": { // Device, The name should be the same with string in image:info:media:type
"size": "128m", // Size of SPI NAND
"partitions": {
"spl": { "size": "1m" },
"env": { "size": "256k" },
"env_r": { "size": "256k" },
"os": { "size": "8m" },
"rodata": { "size": "12m" },
"data": {
"size": "50m",
"nftl": { // Volume in NFTL device
"data": { "size": "-" },
},
},
},
},
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
分区简述
spl分区: 存放启动文件,默认设置即可。
env分区: 存放环境变量,默认设置即可。
env_r分区: 存放环境变量备份,默认设置即可。
os分区: 存放操作系统和应用程序代码,默认设置即可,当编译提示空间不足时,可以适当调整大小。
rodata分区: 对应 menuconfig–>Application options–>Using File System Image 0–>Date Directory 指向的资源文件,该分区只读,大小大于资源文件大小。
data分区: 对应 menuconfig–>Application options–>Using File System Image 1–>Data Directory 指向的资源文件,该分区可读写,大小根据需求调整。
SPINOR
SPINOR 采用 fatfs 文件系统,以 d13x demo88_nor 工程为例, 编译出来的固件为 d13x_demo88-nor_v1.0.0.img。
SPINOR 的分区信息在 target/d13x/demo88_nor/pack/image_cfg.json 中。
"spi-nor": { // Device, The name should be the same with string in image:info:media:type
"size": "16m", // Size of SPI NOR
"partitions": {
"spl": { "size": "256k" },
"env": { "size": "128k" },
"env_r": { "size": "128k" },
"os": { "size": "1m" },
"os_r": { "size": "1m" },
"rodata": { "size": "3m" },
"rodata_r": { "size": "3m" },
"data": { "size": "7m" }
},
},
2
3
4
5
6
7
8
9
10
11
12
13
eMMC
eMMC 采用 fatfs,以 d21x demo88-mmc 工程为例,编译出来的固件为 d21x_demo88_mmc_v1.0.0.img。
eMMC 的接口协议固定,因此不需要进行新器件型号的移植。
注释
调整分区大小时,也需要同时调整固件的大小来和分区匹配。
分区
分区信息在 target/d21x/demo88-mmc/pack/image_cfg.json 中。
"mmc": { // Device, The name should be the same with string in image:info:media:type
"size": "8G", // Size of SD/eMMC
"partitions": { // Partition table apply to device
"spl": { "offset": "0x4400", "size": "256k" },
"os": { "size": "8m" },
"rodata": { "size": "12m" },
"data": { "size": "35m" },
},
},
2
3
4
5
6
7
8
9
小技巧
Bringup 的时候建议只进行介质选择,不进行复杂的分区调整。
成果
正确的存储配置应该能够成功支持固件烧录。