存储配置
- 根据项目需求选择合适的存储介质型号,例如 SPINAND、SPI NOR 或 eMMC。下列步骤均以 SPINAND
的配置为例,其他存储介质类型的配置步骤与 SPINAND 类似。
SDK 默认支持多种 SPINAND,编译之前需要确认开发板的型号被选中支持,如果不在支持列表中, 则需要参考 SPINAND 移植指南 进行移植。
建议只打开需要用到的型号,避免存储越界。
- 配置 Bootloader:通过
launch
命令启动配置选项,选择Drivers -> Peripheral
中的 SPINAND 驱动选项。对于不同品牌的存储芯片,如 Dosilicon、Macronix 等,确保选中相应的驱动支持。
注: Bootloader 和 SPL 分区一般都比较小,如开启过多的 SPINAND 型号,会导致存储容易越界,因此建议只打开需要用到的型号即可。-*- 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
- 选择 RT-Thread 配置:类似于 Bootloader,通过
launch
命令启动配置选项,选择相应的Drivers -> Peripheral
中的 SPINAND 驱动选项。 - 配置文件系统:默认采用 FATFS 文件系统。
对于 SPINAND,可以在工程配置文件 target/d21x/demo128_nand/image_cfg.json 中进行 page size 的配置。
关于 page size 以及其他存储类型的文件系统的详细配置说明,可查看配置文件系统和分区。
- 配置分区信息:在target/d21x/demo128_nand/image_cfg.json
文件中设置各分区的大小,例如:
"spi-nand": { "size": "128m", "partitions": { "spl": {"size": "1m"}, "env": {"size": "256k"}, "env_r": {"size": "256k"}, "os": {"size": "8m"}, "rodata": {"size": "12m"}, "data": {"size": "50m", "nftl": {"data": {"size": "-"}}}, } }
关于其他存储类型的分区配置详细说明,可查看配置文件系统和分区。
- 编译固件:调整分区后,跳到 Bootloader 配置编译,或者在 RT-Thread 配置下使用
mb
命令编译。以 d21x_demo128_nand 工程为例,编译后生成的固件名称为 d21x_demo128_nand_page_2k_block_128k_v1.0.0.img。
- 烧录编译好的固件到开发板上,检查设备是否能够正常启动并从存储介质读取数据。如果遇到问题,根据错误信息进行调整和重新编译。
配置文件系统和分区
- SPINAND 文件系统:默认采用 FATFS。
-
在工程配置文件 target/d21x/demo128_nand/image_cfg.json 中,可以配置 page size。
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" }, ], } },
-
在 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": "-" }, }, }, }, },
分区说明如下:-
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 文件系统:默认采用 FATFS。
以 d13x demo88_nor 工程为例, 编译出来的固件为 d13x_demo88-nor_v1.0.0.img
在 target/d13x/demo88_nor/pack/image_cfg.json 中,可以配置 SPINOR 的分区信息:"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" } }, },
- 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" }, }, },