Edit online

存储配置

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

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

  2. 配置 BootLoader,以 SPINAND 的配置为例,其他存储介质类型的配置步骤与 SPINAND 类似。

    通过 lunch 命令启动配置选项,选择 me > Drivers > Peripheral 中的 SPINAND 驱动选项。

    注: BootLoader 和 SPL 分区一般都比较小,如开启过多的 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
  3. 选择 RT-Thread 配置:类似于 BootLoader,通过 launch 命令启动配置选项,选择 me > Drivers > Peripheral 中的 SPINAND 驱动选项。
  4. 配置文件系统:默认采用 FATFS 文件系统。

    关于 “page” 参数以及文件系统的详细配置说明,可查看配置文件系统和分区

  5. 配置分区信息

    关于不同存储类型的分区配置,可查看配置文件系统和分区

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

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

  7. 烧录编译好的固件到开发板上,检查设备是否能够正常启动并从存储介质读取数据。

    如遇到问题,可根据错误信息进行调整,并重新编译。

配置文件系统和分区

本节仅简单介绍 Bringup 相关的分区配置。
注: Bringup 时建议只进行介质选择,不进行复杂的分区调整。关于分区的详细说明,可查看配置分区
  • SPINAND 文件系统:默认采用 FATFS。
    • 在工程配置文件 target/d21x/demo128_nand/image_cfg.json 中,配置 "page" 大小。

      SDK 也支持 "page" 大小为 4K 的 SPINAND,但使用场景较少。
      
              "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 中,配置分区信息。

      "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": "-" },
                  },
              },
          },
      },
      注: 调整分区后要跳到 BootLoader 配置编译,或者在 RT-Thread 配置下使用 mb 命令编译。
  • 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" },
        },
    },