跳转至

Flash List新增Flash SOP


REVISION HISTORY

Revision No.
Description
Date
1.0
  • Initial release
  • 04/18/2023
    1.1
  • Add version message and adjust document format
  • 04/11/2025
    1.2
  • Add sni yaml describe
  • 04/28/2026

    1. 总体思路

    找一已添加的相近型号,先按相近型号的参数配置新增的flash,然后再根据新flash的datasheet做相应的修改。各参数的含义详见下文。

    使用SDK包中提供的NandInfoEditor软件打开flash_list配置文件。

    路径:

    nor flash:project/board/mehra/boot/nor/partition/flash_list.nri

    spinand flash:project/board/mehra/boot/spinand/partition/flash_list.sni

    修改并保存后,再重新编译打包image,之后使用烧录工具进行空片烧录。

    注意:nor flash列表中的都是已支持的型号,spinand flash需要判断其flags和maxWaitTime两个参数是否有值,只有有值(非0)才表示是已支持的spinand flash的型号。

    2. sni / nri yaml 文本化

    2.1. 文本化目的

    为了更方便、直观修改flash sni文件,引入了yaml文件,可通过文本编辑直接修改flash信息,同时也方便4k page、2 plane flash的rom sni信息修改。

    flash driver最终使用的仍然是打包到cis.bin里的flash_list.sni / flash_list.nri ,编辑flash信息的方式由flash editor变成了文本yaml编辑。

    当新增flash时,可以找一款接近型号的flash yaml进行复制,然后修改有差异部分的参数。

    目前这套流程支持的chip有pcupid、ifackel、ifliegen、ihalo、mhera。

    2.2. 结构说明

    2.2.1 路径:

    spinand flash:

        `project/board/mehra/boot/spinand/partition/sni_yaml/common/*`    (非快启单颗flash信息的集合)
        `project/board/mehra/boot/spinand/partition/flash_list.txt`         (生成flash_list.sni, 配合common目录使用,决定使用哪些flash)
    
        `project/board/mehra/boot/spinand/partition/sni_yaml/fb/*`          (快启单颗flash信息的集合)
        `project/board/mehra/boot/spinand/partition/flash_list-fb.txt`    (生成flash_list-fb.sni,配合fb目录使用,决定使用哪些flash)
    

    nor flash:

        `project/board/mehra/boot/nor/partition/nri_yaml/common/*`          (非快启单颗flash信息的集合)
        `project/board/mehra/boot/nor/partition/flash_list.txt`               (生成flash_list.nri, 配合common目录使用,决定使用哪些flash)
    
        `project/board/mehra/boot/nor/partition/nri_yaml/fb/*`                (快启单颗flash信息的集合)
        `project/board/mehra/boot/nor/partition/flash_list-fb.txt`          (生成flash_list-fb.nri,配合fb目录使用,决定使用哪些flash)
    

    2.2.2 yaml内容说明:

    rom sni:

    具体为yaml文件开头部分的 spinor_basic_info 和 spinand_basic_info,在之前的editor为透明状态。

    主要针对一些特殊要求的flash,比如4k page, 2 plane flash的参数配置,供rom使用,一般情况下无需适配 & 修改。

    sni / nri:

    具体的数据结构为 spinor_info 和 spinand_sni ,各个字段的含义与之前editor的描述一致,未发生改动。

    2.2.3 生成原理:

    在project目录下make image时,调用对应的tool去解析 flash_list.txt 里的内容,

    按顺序取出对应的yaml文件内容并生成对应flash信息,最终拼接成完整的 flash_list.sni。

    spinor flash同理。

    3. nor flash

    3.1. 新增flash

    3.2. 基础参数(flags)

    Figure 3-2: Flash_2

    参数含义:

    • PageByteCnt:flash 一个page的大小

    • SectorByteCnt:flash一个sector的大小

    • BlkByteCnt:flash一个block的大小

    • Capacity:flash的容量 = BlkByteCnt * block的个数

    3.3. 保护状态参数

    Figure 3-3: Flash_3

    3.4. 读/写状态寄存器

    Figure 3-4: Flash_4

    3.5. quad mode 寄存器

    Figure 3-5: Flash_5

    3.6. 读/写命令

    Figure 3-6: Flash_6

    4. nand flash

    4.1. 新增flash

    Figure 4-1: Flash_7

    4.2. 基础参数

    Figure 4-2: Flash_8

    参数含义:

    • Spare Size

      • flash oob区的大小
    • Page Size

      • flash 一个page的大小
    • Page Cnt

      • flash中一个block有几个page
    • Blk Cnt

      • flash总共有几个block,flash的总大小=page size * page cnt * blk cnt
    • Sector Size

      • flash一个sector的大小

    4.3. flags

    Figure 4-3: Flash_9

    4.4. 状态寄存器

    Figure 4-4: Flash_10

    4.5. 读/写参数

    Figure 4-5: Flash_11

    4.6. CR MODE (continue read)——none buffer mode

    除特殊要求外,一般不需要点cr mode, 较复杂,只用于IPL。

    Figure 4-6: Flash_12

    4.7. CR MODE (continue read)——buffer mode

    除特殊要求外,一般不需要点cr mode, 较复杂,只用于IPL。

    Figure 4-7: Flash_13