存储配置
正确的存储配置是确保编译的固件是否可刷机的最重要因素,但存储配置可能需要修改的地方较多,因此建议按照现有的工程仿写需要 Bringup 的开发板。如果现有工程没有相应存储类型,则需要切换存储类型。
选择存储设备类型
对于不同的存储设备类型,SDK 默认支持多种型号,编译之前需要确认开发板的型号被选中支持,如果不在支持列表中, 则需要参考SPINAND 移植指南进行移植。
切换存储类型
Luban-Lite 编译的固件所占内存较小,一般采用 SPI NOR 进行存储,因此 Luban-Lite 默认采用 SPI NOR 存储方案。本节介绍如何将 Luban-Lite 的默认存储方案切换为 SPI NAND 或 eMMC 存储设备。关于详细的存储配置说明和流程,可查看存储配置。
如需切换存储设备,需要清理现有的存储配置,并配置所需存储对应的 BootLoader 和 OS 参数。
配置 BootLoader
本节介绍不同存储介质类型的 BootLoader 配置步骤。
配置 SPI NOR BootLoader
-
在 SDK 根目录下执行下列命令之一,进入 BootLoader 的配置界面:
-
bm
命令 -
scons –apply-def=dxxx_xxx-nor_baremetal_bootloader
和scons –menuconfig
-
- 打开 SPI NOR
设备:
Board options ---> [*] SPI0 Devices: SPINOR ----
- 打开 SPI NOR 驱动选项:
Drivers options ---> Peripheral ---> [*] SPINOR Driver SFUD: Serial Flash Universal Driver ---- Drivers examples ---> [*] Enable MTD driver test command
注: BootLoader 和 SPL 分区一般都比较小,如开启过多的 SPI NAND 型号,会导致存储容易越界,建议仅打开需要用到的型号。 - 打开 BootLoader
相关参数:
Bootloader options ---> Commands ---> [*] spinor [*] nor boot [*] Upgrading ---> [*] Write to NOR support Drivers ---> [*] SPI NOR boot support
配置 SPI NAND BootLoader
-
在 SDK 根目录下执行下列命令之一,进入 BootLoader 的配置界面:
-
bm
命令 -
scons –apply-def=dxxx_xxx-nor_baremetal_bootloader
和scons –menuconfig
-
- 打开 SPI NAND
设备:
Board options ---> [*] SPI0 Devices: SPINAND --->
- 打开 SPI NAND 驱动选项:
Drivers options ---> Peripheral ---> [*] Support Winbond SPI NAND (NEW) //根据 SPINAND 厂商使能配置,如华邦等 [*] Aic NFTL support [*] Aic NFTL use lib
注: BootLoader 和 SPL 分区一般都比较小,如开启过多的 SPI NAND 型号,会导致存储容易越界,建议仅打开需要用到的型号。 - 打开 BootLoader
相关参数:
Bootloader options ---> Drivers ---> [*] SPI NAND boot support [*] Upgrading ---> [*] Write to NAND support Commands ---> [*] nand boot [*] 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
配置 eMMC BootLoader
-
在 SDK 根目录下执行下列命令之一,进入 BootLoader 的配置界面:
-
bm
命令 -
scons –apply-def=dxxx_xxx-nor_baremetal_bootloader
和scons –menuconfig
-
- 打开 eMMC
设备:
Board options ---> [*] Using SDMC0
- 打开 BootLoader
相关参数:
Bootloader options ---> Commands ---> [*] mmc boot
- 关闭 DE
进度条:
Board options ---> [ ] Using Wireless LAN ---- [ ] Using Display Engine (DE) //EMMC 需要关闭进度条
配置 OS
打开 OS 的配置界面,依次打开如下配置。
配置 SPI NOR OS
- 在 SDK 根目录下执行下列命令之一,进入 OS 的配置界面:
-
me
命令 -
scons –apply-def=dxxx_xxx-nor_rt-thread_helloworld
和scons –menuconfig
-
- 打开 SPI NOR
设备:
Board options ---> [*] SPI0 Devices: SPINOR --->
- 打开 Rt-Thread
中的驱动选项:
Rt-Thread options ---> RT-Thread Components ---> [*] FAL: flash abstraction layer ---- Device Drivers ---> [*] Using MTD Nor Flash device drivers [*] Using SFUD(Serial Flash Universal Driver)
- 打开 SPI NOR
的驱动选项:
Drivers options ---> Peripheral ---> [*] SPINOR Driver SFUD: Serial Flash Universal Driver ----
配置 SPI NAND OS
- 在 SDK 根目录下执行下列命令之一,进入 OS 的配置界面:
-
me
命令 -
scons –apply-def=dxxx_xxx-nor_rt-thread_helloworld
和scons –menuconfig
-
- 打开 SPI NAND
设备:
Board options ---> [*] SPI0 Devices: SPINAND --->
- 配置 FAT 文件系统:
Application options ---> [*] Using File System Image 1 ---> --- Using File System Image 1 Select File System Type (FATFS) ---> (data/) Data Directory (data.fatfs) Image Name
- 打开 SPI NAND
的驱动选项:
Drivers options ---> Peripheral ---> [*] Support Winbond SPI NAND (NEW) //根据 SPINAND 厂商使能配置,如华邦等 [*] Aic NFTL support [*] Aic NFTL use lib
-*- 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
配置 eMMC OS
- 在 SDK 根目录下执行下列命令之一,进入 OS 的配置界面:
-
me
命令 -
scons –apply-def=dxxx_xxx-nor_rt-thread_helloworld
和scons –menuconfig
-
- 打开 eMMC
设备:
Board options ---> [*] Using SDMC0
配置文件系统和分区
文件系统默认采用 FATFS。
本节仅简单介绍 Bringup 相关的分区配置。Bringup 时建议只进行介质选择,不进行复杂的分区调整。关于分区的详细说明,可查看配置分区。
SPI NOR 文件系统和分区
-
SPI NOR 默认采用 FATFS。
Application options ---> [*] Using File System Image 1 ---> --- Using File System Image 1 Select File System Type (FATFS) ---> (data/) Data Directory (data.fatfs) Image Name
-
在 target/dxxx/xxx/pack/image_cfg.json 中,可以配置 SPI NOR 的分区信息:
以 d13x demo88_nor 工程为例, 编译出来的固件为 d13x_demo88-nor_v1.0.0.img。
"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" } }, },
SPI NAND 文件系统和分区
-
SPI NAND 默认采用 FATFS,配置如下:
Application options ---> [*] Using File System Image 1 ---> --- Using File System Image 1 Select File System Type (FATFS) ---> (data/) Data Directory (data.fatfs) Image Name
-
在工程配置文件 target/dxxx/xxx/pack/image_cfg.json 中,配置分区信息。
可以从其他 SPI NOR 方案中复制 image_cfg.json 到本方案,也可以手工修改。
"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" }, "userid": { "size": "256k" }, // at least 16KB "env": { "size": "256k" }, "env_r": { "size": "256k" }, "os": { "size": "2m" }, "os_r": { "size": "2m" }, "rodata": { "size": "14m" }, "rodata_r": { "size": "14m" }, "data": { "size": "40m", "nftl": { // Volume in NFTL device "data": { "size": "-" }, }, }, "data_r": { "size": "40m", "nftl": { // Volume in NFTL device "data": { "size": "-" }, }, }, }, },
注: 调整分区后要跳到 BootLoader 配置编译,或者在 RT-Thread 配置下使用 mb 命令编译。 - 基于 SPI NOR 的 Image 信息,在 target/dxxx/xxx/pack/image_cfg.json
中设置 SPI NAND
的镜像信息:
"image": { "info": { // Header information about image "platform": "d21x", "version": "1.0.0", "media": { - "type": "spi-nor", + "type": "spi-nand", "device_id": 0, + "array_organization": [ + { "page": "2k", "block": "128k", "oob": "64" }, + // { "page": "4k", "block": "256k", "oob": "128" }, + ], } }, "updater": { // Image writer which is downloaded to RAM by USB @@ -56,8 +71,8 @@ "part": ["rodata"] }, "data": { - "file": "data.lfs", - "attr": ["mtd", "optional"], + "file": "data.fatfs", + "attr": ["block", "optional"], "part": ["data"] }, },
SDK 也支持 "page" 大小为 4K 的 SPI NAND,但使用场景较少。"media": { "type": "spi-nand", "device_id": 0, "array_organization": [ { "page": "2k", "block": "128k", "oob": "64" }, // { "page": "4k", "block": "256k", "oob": "128" }, ], } },
eMMC 文件系统和分区
-
eMMC 默认采用 FATFS。
Application options ---> [*] Using File System Image 0 ---> --- Using File System Image 0 Select File System Type (FATFS) ---> (rodata/) Data Directory (rodata.fatfs) Image Name [*] Using File System Image 1 ---> --- Using File System Image 1 Select File System Type (FATFS) ---> (data/) Data Directory (data.fatfs) Image Name
以 d21x demo88-mmc 工程为例, 编译出来的固件为 d21x_demo88_mmc_v1.0.0.img。
-
在 target/dxxx/xxx/pack/image_cfg.json 中,配置分区信息:
可以从其他 SPI NOR 方案中复制 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": "495k" }, "env": { "size": "256k" }, "env_r": { "size": "256k" }, "os": { "size": "8m" }, "os_r": { "size": "8m" }, "rodata": { "size": "12m" }, "rodata_r": { "size": "12m" }, "data": { "size": "35m" }, "data_r": { "size": "35m" }, }, },
eMMC 的接口协议固定,因此不需要进行新器件型号的移植。调整分区大小时,也需要同时调整固件的大小来和分区匹配。
- 在 target/dxxx/xxx/pack/image_cfg.json 中设置基于 eMMC 的 Image
信息:
"image": { "info": { // Header information about image "platform": "d21x", "version": "1.0.0", "media": { - "type": "spi-nor", + "type": "mmc", "device_id": 0, } }, "updater": { // Image writer which is downloaded to RAM by USB @@ -56,8 +71,8 @@ "part": ["rodata"] }, "data": { - "file": "data.lfs", - "attr": ["mtd", "optional"], + "file": "data.fatfs", + "attr": ["block", "optional"], "part": ["data"] }, },
编译和烧录固件
调整分区后,跳到 BootLoader 配置编译,或者在 RT-Thread 配置下使用 mb 命令编译。
以 d21x_demo128_nand 工程为例,编译后生成的固件名称为 d21x_demo128_nand_page_2k_block_128k_v1.0.0.img。
烧录编译好的固件到开发板上,检查设备是否能够正常启动并从存储介质读取数据。如遇到问题,可根据错误信息进行调整,并重新编译。