Edit online

存储配置

Read time: 13 minute(s)

正确的存储配置是确保编译的固件是否可刷机的最重要因素,但存储配置可能需要修改的地方较多,因此建议按照现有的工程仿写需要 Bringup 的开发板。如果现有工程没有相应存储类型,则需要切换存储类型

Edit online

选择存储设备类型

Read time: 13 minute(s)

根据项目需求,选择合适的存储设备类型:

对于不同的存储设备类型,SDK 默认支持多种型号,编译之前需要确认开发板的型号被选中支持,如果不在支持列表中, 则需要参考SPINAND 移植指南进行移植。

Edit online

切换存储类型

7 Apr 2025
Read time: 13 minute(s)

Luban-Lite 编译的固件所占内存较小,一般采用 SPI NOR 进行存储,因此 Luban-Lite 默认采用 SPI NOR 存储方案。本节介绍如何将 Luban-Lite 的默认存储方案切换为 SPI NAND 或 eMMC 存储设备。关于详细的存储配置说明和流程,可查看存储配置

如需切换存储设备,需要清理现有的存储配置,并配置所需存储对应的 BootLoader 和 OS 参数。

Edit online

配置 BootLoader

8 Apr 2025
Read time: 13 minute(s)

本节介绍不同存储介质类型的 BootLoader 配置步骤。

配置 SPI NOR BootLoader

  1. 在 SDK 根目录下执行下列命令之一,进入 BootLoader 的配置界面:
    • bm 命令

    • scons –apply-def=dxxx_xxx-nor_baremetal_bootloaderscons –menuconfig

  2. 打开 SPI NOR 设备:
    Board options  --->
        [*] SPI0 Devices: SPINOR  ----
  3. 打开 SPI NOR 驱动选项:
    Drivers options  --->
        Peripheral  --->
            [*] SPINOR Driver SFUD: Serial Flash Universal Driver  ----
        Drivers examples  --->
                    [*] Enable MTD driver test command
    注: BootLoader 和 SPL 分区一般都比较小,如开启过多的 SPI NAND 型号,会导致存储容易越界,建议仅打开需要用到的型号。
  4. 打开 BootLoader 相关参数:
    Bootloader options  --->
        Commands  --->
            [*] spinor
            [*] nor boot
        [*] Upgrading  --->
            [*]   Write to NOR support
        Drivers  --->
            [*] SPI NOR boot support

配置 SPI NAND BootLoader

  1. 在 SDK 根目录下执行下列命令之一,进入 BootLoader 的配置界面:
    • bm 命令

    • scons –apply-def=dxxx_xxx-nor_baremetal_bootloaderscons –menuconfig

  2. 打开 SPI NAND 设备:
    Board options  --->
        [*] SPI0 Devices: SPINAND  --->
  3. 打开 SPI NAND 驱动选项:
    Drivers options  --->
        Peripheral  --->
            [*]   Support Winbond SPI NAND (NEW)        //根据 SPINAND 厂商使能配置,如华邦等
            [*] Aic NFTL support
            [*]   Aic NFTL use lib
    注: BootLoader 和 SPL 分区一般都比较小,如开启过多的 SPI NAND 型号,会导致存储容易越界,建议仅打开需要用到的型号。
  4. 打开 BootLoader 相关参数:
    Bootloader options  --->
        Drivers  --->
            [*] SPI NAND boot support
        [*] Upgrading  --->
            [*]   Write to NAND support
        Commands  --->
            [*] nand boot
            [*] spinand
SPINAND Driver library 中会列示不同品牌的存储芯片,如 Dosilicon 和 Macronix,确保选中相应的驱动支持:
-*- 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

  1. 在 SDK 根目录下执行下列命令之一,进入 BootLoader 的配置界面:
    • bm 命令

    • scons –apply-def=dxxx_xxx-nor_baremetal_bootloaderscons –menuconfig

  2. 打开 eMMC 设备:
    Board options  --->
        [*] Using SDMC0
  3. 打开 BootLoader 相关参数:
    Bootloader options  --->
        Commands  --->
            [*] mmc boot
  4. 关闭 DE 进度条:
    Board options  --->
        [ ] Using Wireless LAN  ----
        [ ] Using Display Engine (DE)   //EMMC 需要关闭进度条
Edit online

配置 OS

Read time: 13 minute(s)

打开 OS 的配置界面,依次打开如下配置。

配置 SPI NOR OS

  1. 在 SDK 根目录下执行下列命令之一,进入 OS 的配置界面:
    • me 命令

    • scons –apply-def=dxxx_xxx-nor_rt-thread_helloworldscons –menuconfig

  2. 打开 SPI NOR 设备:
    Board options  --->
        [*] SPI0 Devices: SPINOR  --->
  3. 打开 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)
  4. 打开 SPI NOR 的驱动选项:
    Drivers options  --->
        Peripheral  --->
            [*] SPINOR Driver SFUD: Serial Flash Universal Driver  ----

配置 SPI NAND OS

  1. 在 SDK 根目录下执行下列命令之一,进入 OS 的配置界面:
    • me 命令

    • scons –apply-def=dxxx_xxx-nor_rt-thread_helloworldscons –menuconfig

  2. 打开 SPI NAND 设备:
    Board options  --->
        [*] SPI0 Devices: SPINAND  --->
  3. 配置 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
  4. 打开 SPI NAND 的驱动选项:
    Drivers options  --->
        Peripheral  --->
            [*]   Support Winbond SPI NAND (NEW)        //根据 SPINAND 厂商使能配置,如华邦等
            [*] Aic NFTL support
            [*]   Aic NFTL use lib
SPINAND Driver library 中会列示不同品牌的存储芯片,如 Dosilicon 和 Macronix,确保选中相应的驱动支持:
-*- 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

  1. 在 SDK 根目录下执行下列命令之一,进入 OS 的配置界面:
    • me 命令

    • scons –apply-def=dxxx_xxx-nor_rt-thread_helloworldscons –menuconfig

  2. 打开 eMMC 设备:
    Board options  --->
        [*] Using SDMC0
Edit online

配置文件系统和分区

Read time: 13 minute(s)

文件系统默认采用 FATFS。

本节仅简单介绍 Bringup 相关的分区配置。Bringup 时建议只进行介质选择,不进行复杂的分区调整。关于分区的详细说明,可查看配置分区

SPI NOR 文件系统和分区

  1. 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
  2. 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 文件系统和分区

  1. 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
  2. 在工程配置文件 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 命令编译。
  3. 基于 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 文件系统和分区

  1. 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

  2. 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 的接口协议固定,因此不需要进行新器件型号的移植。调整分区大小时,也需要同时调整固件的大小来和分区匹配。

  3. 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"]
                },
            },
Edit online

编译和烧录固件

Read time: 13 minute(s)

调整分区后,跳到 BootLoader 配置编译,或者在 RT-Thread 配置下使用 mb 命令编译。

d21x_demo128_nand 工程为例,编译后生成的固件名称为 d21x_demo128_nand_page_2k_block_128k_v1.0.0.img

烧录编译好的固件到开发板上,检查设备是否能够正常启动并从存储介质读取数据。如遇到问题,可根据错误信息进行调整,并重新编译。