Edit online

存储配置

8 Nov 2024
Read time: 5 minute(s)
正确的存储配置是确保编译的固件是否可刷机的最重要因素,但存储配置可能需要修改的地方较多,因此建议按照现有的工程仿写需要 Bringup 的开发板。具体流程如下:
  1. 根据项目需求选择合适的存储介质型号,例如 SPINAND、SPI NOR 或 eMMC。下列步骤均以 SPINAND 的配置为例,其他存储介质类型的配置步骤与 SPINAND 类似。

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

    建议只打开需要用到的型号,避免存储越界。

  2. 配置 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
  3. 选择 RT-Thread 配置:类似于 Bootloader,通过 launch 命令启动配置选项,选择相应的 Drivers -> Peripheral 中的 SPINAND 驱动选项。
  4. 配置文件系统:默认采用 FATFS 文件系统。

    对于 SPINAND,可以在工程配置文件 target/d21x/demo128_nand/image_cfg.json 中进行 page size 的配置。

    关于 page size 以及其他存储类型的文件系统的详细配置说明,可查看配置文件系统和分区

  5. 配置分区信息:在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": "-"}}},
      }
    }
    

    关于其他存储类型的分区配置详细说明,可查看配置文件系统和分区

  6. 编译固件:调整分区后,跳到 Bootloader 配置编译,或者在 RT-Thread 配置下使用 mb 命令编译。

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

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

配置文件系统和分区

注: Bringup 时建议只进行介质选择,不进行复杂的分区调整。
  • 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" },
        },
    },