spinandinfo编辑工具使用说明
1. 工具总体介绍¶
-
工具用途
a. 往spinandinfo.sni里添加新的spinand flash信息或修改flash信息
b. 往spinorinfo.nri里添加新的spi nor flash信息或修改flash信息
c. 编辑partinfo.pni分区信息
-
界面说明

图1-1
1)加载SPINANDINFO.sni、SPINORINFO.nri 或 PARTINFO.pni文件
2)保存编辑后的文件
3)将编辑后的文件重命名保存或是保存到其他路径
4)添加新的spinand、spinor flash信息或partinfo分区信息
5)删除选中的spinand、spinor flash信息或partinfo分区信息
6)退出工具
2. 编辑SPINANDINFO.sni¶
-
加载SPINANDINFO.sni文件
要添加新的spinand flash信息,首先得打开一个已存在的SPINANDINFO.sni文件
步骤: load --> Binary SpiNandInfo Files(*.sni),(此处根据不同选择可以打开.sni、nri或.pni文件)
打开文件界面如下:

图2-1
-
添加一个新的spinand flash 信息
步骤: add --> 输入flash的part number名字,然后确定。 partnumber一般填写flash的型号名字

图2-2
-
填写flash内容信息
添加一颗flash之后,就会在左侧列表框中新增一颗flash型号,但是右侧列表中的数据都为0,这时需要参考flash的datasheet填写相关内容,以下选项为必须填写内容。

图2-3
1)flash ID的长度
2)flash ID号
3)flash oob区的大小
4)flash 一个page的大小
5)flash中一个block有几个page
6)flash总共有几个block,flash的总大小=page size * page cnt * blk cnt
7)flash一个sector的大小
8)flash由几个plane构成,此处要注意,如果是2plane的flash,此处没写读写会错误
9)flash的最大速度频率
10)flash厂商的名字缩写
11)flash型号
注意,在特殊情况下,有些平台需要根据SPINANDINFO.sni中的flash信息来确定从哪个位置加载IPL、IPL_CUST和UBOOT,要确认目前使用的平台是否存在这种特殊情况,最好是用flash编辑工具(SpiNandInfoEditor.exe)打开SPINANDINFO.sni文件,查看目前正在使用的flash下面几个栏位是否填值,如果是那在新添加flash信息时这几个栏位也要相应填上对应的值。

图2-4
1)UBOOT在flash中的位置,开始block号
2)IPL在flash中的位置,开始block号
3)IPL_CUST在flash中的位置,开始block号
-
调整flash在SPINANDINFO.sni中的位置
新添加了flash后,为了让某个厂商的flash信息能够存放在一起以方便查看,可以选中对应flash,然后点击按钮“Move Up”或“Move Down”调整flash的上下位置
-
SPINANDINFO.sni的版本控制
每个SPINANDINFO.sni的第一项用于版本控制,主要是为了区分SPINANDINFO.sni是哪个版本的,此项的ID长度固定为5,ID的前两个byte固定为0xEE,后三个byte是版本号,这些信息在flash tool中会被用到

图2-5
-
保存SPINANDINFO.sni文件
新添加了flash信息或是修改了flash信息,一定要记得点击按钮“save”保存文件。
3. 编辑SPINORINFO.nri信息¶
添加SpiNor信息和添加SpiNand 信息步骤基本相同,此处只介绍一些不同点
-
加载SPINORINFO.nri文件
要添加新的spinor flash信息,首先得打开一个已存在的SPINORINFO.nri文件
步骤: load --> Binary SpiNorInfo Files(*.nri),此处选择的后缀名和编辑spinand信息的不同
打开文件界面如下:

图3-1
-
填写flash信息

图3-2
1)flash ID的长度
2)flash ID号
3)flash 容量总大小,此处不需要填,会自动根据block size和block cnt计算
4)flash 一个block的大小,需填16进制值,前面不加0x
5)flash总共有几个block,flash的总大小=page size * page cnt * blk cnt
6)flash 一个page的大小
7)flash一个sector的大小
8)flash地址是否为4byte地址,只有flash容量大于16M的时候需要填1, 其他情况填0
9)flash厂商的名字缩写
10)flash型号
-
flash版本控制、保存等与添加spinand相同,此处不再介绍
4. 编辑PARTINFO.pni信息¶
-
PARTINFO.pni用途 PARTINFO.pni保存着分区信息,在uboot启动的时候,会根据PARTINFO.pni里的信息创建mtdparts环境变量,找到环境变量分区的位置,现在一般在升级的时候会在脚本中重新设置mtdparts环境变量,但是一般情况下还是希望PARTINFO.pni中保存的分区信息能够与自己实际的分区相同,以免有时候会导致一些奇怪错误
-
加载PARTINFO.pni文件
首先打开一个已存在的PARTINFO.pni文件
步骤: load --> Binary PartitionInfo Files (*.pni) ,选择文件时注意后缀,

图4-1
打开文件界面如下:

图4-2
-
PARTINFO.pni 界面信息介绍

图4-3
1)打开的partinfo文件
2、3、4、5)此四项是flash的相关信息,但此文件不涉及flash,所以按默认值即可
6)分区的个数
7)某个分区的开始位置block号
8)分区的大小,以kbytes和block数表示大小
9)分区类型
10)备份分区数,一般用于防止出现坏块
-
增加一个或多个分区
要增加一个或多个分区,通过修改分区数来添加,如下图红框所示位置

图4-4
增加的分区会在原来最后一个分区的后面,此时要注意修改原来最后一个分区的类型,0xC000表示分区结束,现在这个标志往后移,则原来最后一个分区的类型变为unknow

图4-5
1)原来最后一个分区,分区类型变为unknow
2)新增加的分区,类型变为PART_END
3)分区结束标志,类型码0xC000,PART_END
-
减少一个或多个分区
减少一个或多个分区也是通过修改分区数来实现,修改分区数后原来最后面的分区将被去掉
-
移动分区的位置
当增加了新的分区,想调整这个分区的位置,或是改变原来分区的位置,可以先选定要调整的分区,然后点击按钮“Move Up”或“Move Down”进行调整, 如下要调整"IPL_CUST"这个分区,先选中“Partition 3 Info”这个分区(IPL_CUST), 然后点击按钮“Move Up”或“Move Down”进行调整

图4-6
-
插入,删除某个分区
如果想要在某个分区前面插入一个分区,或是删除中间的一个分区,则在这个分区上点击右键,选中“insert part” 插入一个新的分区,或“delete part”删除这个分区。
如在上图中的“IPL_CUST"分区前插入一个分区,则在”Partition 3 Info“上点击右键,选中”insert part“就会在“IPL_CUST"前插入一个新的分区,选中“delete part”则“IPL_CUST"这个分区会被删掉。
-
修改分区信息
修改分区的信息直接修改下图中红色框中的数值即可

图4-7
- 分区起始位置的block号,可直接修改
-
分区大小,以kbytes或block表示,如果是修改kbytes,则数值必须是block大小的整数倍,否则修改无效
-
分区的类型,可以从PARTTYPE.ini中查询,可直接修改
-
分区的备份block数,根据需要修改,如果不需要备份block,则填0
-
自动计算最后一个分区的大小
在最后一个分区的block cnt栏位输入-1按回车键,会自动的将剩下的空间计算出来作为最后一个分区的大小
-
编辑分区时的提示信息
编辑分区时,如果有错误,会在底下的框中有红色字体提示

Overlap:(p2-p3) :说明第二和第三个分区有重复覆盖
PartGap:(p3-p4) :说明第三和第四个分区之间有间隔
PartCnt Zero:(p3) :说明第三个分区的数据都是0
total block size mismatch:(1024-2074) :说明总的block大小和所有的分区的block大小加起来不匹配,一般通过自动算出最后一个分区的大小来解决根据分区信息生成的mtdparts:
mtdparts=nand0:0x60000\@0x140000(IPL0),0x60000(IPL1),0x60000(IPL_CUST),0x0(UNKNOW),0x60000(IPL_CUST),0xc0000(UBOOT0),0xc0000(UBOOT1),0x60000(ENV),0x340000(KERNEL),0x340000(RECOVERY),-(UBI)分区信息:
PartInfo:
0x00140000-0x001a0000 : "IPL0"
0x001a0000-0x00200000 : "IPL1"
0x00200000-0x00260000 : "IPL_CUST"
0x00000000-0x00000000 : "UNKNOW"
0x00260000-0x002c0000 : "IPL_CUST"
0x002c0000-0x00380000 : "UBOOT0"
0x00380000-0x00440000 : "UBOOT1"
0x00440000-0x004a0000 : "ENV"
0x004a0000-0x007e0000 : "KERNEL"
0x007e0000-0x00b20000 : "RECOVERY"
0x00b20000-0x10340000 : "UBI" -
”add“和”delete“按钮
“add”按钮用来添加一个新的partition文档,“delete”按钮用来删除一个partition按钮,但是现在一般都是打开一个已经存在的文档来修改,所以这两个按钮基本上不会用到
-
“save”和“save as”按钮
对partition文档进行修改后,一定要点击“save”或“save as”按钮保存文件,否则文件不会被修改
-
与PARTINFO.pni一起工作的文件PARTTYPE.ini
PARTTYPE.ini里面保存了分区类型的信息,PARTINFO.pni被加载时,如果同目录下PARTTYPE.ini存在,则PARTTYPE.ini也会被一起加载。
主要用于显示分区的名字,不存在也不会出错,PARTTYPE.ini里面定义的分区类型为目前使用的类型,可以在里面自行添加分区类型。
建议不做修改。