SSD_Flash母片制作


1. Spinand母片制作

SPINAND因为会存在坏块的属性,所以不能直接从Flash Dump下来再烧录,需要使用公版提供的工具,按照以下步骤执行生成。

1.1. 获取母片制作工具包

点击下载:母片制作工具


1.2. 基本工具文件介绍

  1. 可执行程序 SstarMakeBin(SstarMakeBin_dual_env)

  2. 初始化文件SPINAND.INI(spinand)

    SPINAND.INI中的nandid需要根据实际flash的datasheet来填写, image_directory为对应需要打包的image路径:

  3. 烧录器的配置文件leap.def & snchk.def(leap烧录器用leap.def,其他烧录器一般用snchk.def)

  4. 用来制作母片的image文件以及对应的烧录脚本,统一放在images文件夹下:

    images文件夹是从project\image\output\images下面的images拷贝过来的

  5. 配置分区和image路径的脚本auto_update_spinand.txt

    auto_update_spinand.txt下dynpart这行的分区信息必须跟uboot下的mtdparts保持一致:

  6. 针对ubi文件格式需要额外的空间来存ubi的信息,所以ubi分区不能全部用完,需要预留如下大小的空间用来存放ubi信息:

    常见的1G bit,2G bit,4G bit NAND的预留量算出来为9MB,17MB,34MB

    否则在制作母片的时候会报如下peb不够的error:

    Eg: 公版spinand 128M的flash,ubi分区总的大小903个block,需要预留的大小为>= 903*2*4k + 4*4k

    所以在project\image\configs\i2m\spinand.ubifs.p2.partition.config中,ubi分区总的大小不能超过 0X070E0000 - 903*2*4k + 4*4k

  7. 默认是从images目录下面去读取SPINANDINFO.sni & PARTINFO.pni文件,所以在制作母片前需要把images\boot下面的SPINANDINFO.sni & PARTINFO.pni拷贝到images下面,不然会报如下错误:


1.3. 执行SstarMakeBin_dual_env (SstarMakeBin)生成nand.bin

SstarMakeBin 跟 SstarMakeBin_dual_env是相同作用的bin,但是版本不一样,请注意使用版本,使用错误,可能会出现烧录后再uboot提示ENV CRC ERROR。

在执行打包命令前,需要将SpinandPackBinTool\images\scripts_bin\[[set_partition.es下这行屏蔽掉:

然后在linux执行

  1. 执行 ./SstarMakeBin_dual_env -n SPINAND.INI (TAKOYAKI_DLS00V008之后(不包含)使用)

  2. 或者 ./SstarMakeBin -n SPINAND.INI (TAKOYAKI_DLS00V008以前(包含)使用)

这样会生成一个nand.bin

这个bin就是烧录程序,然后使用烧录器烧录即可。


1.3. 制作母片出错检查

  1. 如果是执行生成bin时有报错,先检查一下是否所执行的命令不支持,比如sd的升级脚本需要改为tftp的脚本形式

  2. 是否执行了一些save命令,重新保存了分区信息,导致分区信息与在auto_update_spinand.txt中指定的分区不一致

  3. 如果是烧录到板子上跑不起来,首先根据分区信息,检查生成的bin文件对应偏移地址处的文件信息是否正确,比如IPL的分区偏移为0x140000,则检查生成的bin文件地址0x140000位置处的文件内容是否为IPL文件的内容

  4. 检查烧录器烧录时oob区是否disable

  5. 用flash tool工具分别dump出板子上flash开始处、IPL分区偏移处、IPL_CUST分区偏移处、UBOOT分区偏移处、kernel分区偏移处的部分文件对比是否与烧录的bin文件一致


1.5. 支持的FLASH 列表

目前支持的flash列表参考SSD_FLASH支持列表


1.6. 烧录器参考配置(分区配置文件)


1.6.1. snchk.def分区配置文件说明(常用于非leap烧录器)

如下图:def格式是大端存储的

  1. 使用二进制打开文件,每一行代表一个分区的描述

  2. 红框中的分区描述:

    1. 红框1中,4个字节描述分区的起始block,如第一行00 00 00 00,代表的是起始位置为第0个block

    2. 红框2中,4个字节描述分区的结束block,如第一行09 00 00 00,代表的是结束位置为第9个block(包含第9block)

    3. 红框3中,4个字节描述分区的实际有效数据占用的block数,如第一行0A 00 00 00,代表的是占用了10个block

    结束block – 起始block >= 有效数据block


1.6.2. leap.def分区配置文件说明(针对leap烧录器)

如下图:def格式是大端存储的

  1. 除去第一行跟最后一行,每一行就是代表一个分区的描述

  2. 第一行是leap的头信息,烧录器厂商可以自行判断是否需要,不需要可去掉(因烧录器而异)

  3. 每行的前4个字节为特有标记,各烧录器厂家自行判断是否需要,不需要可去掉(因烧录器而异)

  4. 红框中的分区描述:

    1. 红框1中,4个字节描述分区的起始block,如第一行00 00 00 00,代表的是起始位置为第0个block

    2. 红框2中,4个字节描述分区的结束block,如第一行09 00 00 00,代表的是结束位置为第9个block(包含第9block)

    3. 红框3中,4个字节描述分区的实际有效数据占用的block数,如第一行0A 00 00 00,代表的是占用了10个block

    结束block – 起始block >= 有效数据block


1.6.3. 烧录器配置信息

  • 应用产品信息

    CPU品牌/型号 软件系统
    Sigmastar Linux
  • 镜像文件中是否包含Spare(OOB)数据:

    ☐ 有Spare(OOB)数据: _____字节

    √ 无Spare(OOB)数据

  • 坏块管理模式(是否有分区)

    ☐ 跳过方式: Skip IB

    √ 分区方式: Multiple Partitions (with skip IB)

    需要提供分区表文件(分区文件参考1.6.2说明)

  • 是否使用On-chip ECC(仅带有片内ECC功能的Flash)

    ☐ 不使用On-chip ECC

    最大允许错误位参数: _____(bits) / _____(bytes)

    镜像文件中必须包含Spare(OOB)数据

    √ 使用On-chip ECC

  • 坏块标记

    标记位置(地址): 800h

    坏块标记数据: 00h


1.6.4. 烧录器配置参考

本章节内容仅供参考,不同烧录器配置可能不同。

使用针对GD5F1GQ4UBYIG的flash配置,参考如下:


2. SPINOR母片制作

因为SPINOR Flash不存在坏块的情况,所以SPINOR Flash可以直接从一个确认完整的Flash中完整dump下来直接做二次烧录,母片制作较SPINAND简单很多,这里使用Flash_Tool去dump并烧录说明(实际使用过程中可自行使用烧录器也可)


2.1. 获取SSD对应的Flash_Tool.exe


2.2. 准备一个干净的Flash

假设是在用的Flash,则接用Flash_Tool去做全chip擦除,擦除操作如下:

a. 开机进入uboot控制台(如果可以),在uboot控制台输入”debug”,并断开串口终端工具,如下图:

b. 使用Flash_Tool擦除整个Flash,如下图Flash_Tool连接成功后切到Erase界面,填写好Start-End Addr擦除范围后(按全Flash大小算),点击Erase等待ok即可


2.3. 烧录image

参照烧录文档,选择适合的方式将image烧录到干净的这块NorFlash上(烧录步骤这里省略,如有需要参考烧录相关文档即可)


2.4. Dump flash

使用Flash_Tool工具dump在干净状态烧录成功的Flash,生成的bin即可作为母片使用,dump操作如下,等待dump成功即可(注意dump的地址要填全flash范围)


2.5. 验证母片的正确性

验证母片的正确性,可以使用Flash_Tool从Flash的0地址按顺序烧录(烧录时间可能比较久),烧录成功后开机看看是否正常即可