1 概述
主控板采用Microchip 的SAMA5D27处理器。由于项目新需求,需要将NAND Flash型号(Micron,MT29F4G08ABAEAWP,4Gb)更换为旺宏-8G NAND Flash型号:MX60LF8G28AD。
需要适配修改的地方:
- PMECC重新计算;
- 修改镜像包中的 .qml文件,修改pmecc的数值;
- 修改sam-ba工具,samba扫描时将8G flash识别成了4G大小,修改文件将大小修改为固定的8G,这样在擦除时就是全盘擦除。
- 设备树NAND节点修改,修改分区大小。
2 PMECC计算
首先来看NAND Flash的相关参数
A5D2的PMECC模块可以校正每个扇区(512字节或1024字节)2,4,8,12,24 bits的错误。这里使用的NAND 为8-bit ECC per (512+32) Byte。
Page size:4096 byte
ECC Sector size:512 byte
每页扇区数:4096/512=8
空闲区域OOB:256 byte,也就是Page size(4096+256)byte里面的256。
下面是Microchip给出的校正能力对照表。
依据Microchip给出的对照表,8 bits的校正能力,512 Byte的扇区,需要13 bytes 的PMECC编码数据。
所以,每一页需要 8*13=104 bytes的PMECC编码数据。
空闲区域第一个ECC byte偏移量:256-104=152 byte (0x10011000)
根据芯片手册中,PMECC寄存器的每一位含义,计算如下。
(Datesheet Page 156)
Bits 31:28 – key[3:0]:固定值0xC (1100b);
Bits 27:未定义,为0;
Bits 26:18 – eccOffset[8:0]: 上面计算得出空闲区域第一个ECC byte偏移量:256-104=152 byte (0x98,010011000b);
Bits 17:16 – sectorSize[1:0]:这里是512 bytes,也就是0x0(00b);
Bits 15:13 – eccBitReq[2:0]:这里是8-bit ECC,也就是0x2(010b)
Bits 12:4 – spareSize[8:0]: 这里是OOB大小,256 byte,也就是0x98(100000000b)
Bits 3:1 – nbSectorPerPage[2:0]:上面计算得到每页扇区数:4096/512=8,这里是用指数形式表示,2^3=8,这里就是0x3(011b)
Bit 0 – usePMECC: 这里就是0x1(1b)
整个32bit表示为(1100 0010 0110 0000 0101 0000 0000 0111)
计算后用十六进制表示为:0xc2605007
3 烧写脚本QML script修改
4 SAM-BA工具修改
1) 路径:E:\sam-ba_3.2.1\qml\SAMBA\Applet.qml
由于samba在扫描时老是将8Gb flash识别成了4Gb大小,修改文件将NAND大小修改为固定的8G,不让这样在擦除时就是全盘擦除。
初始化时打印NAND总大小,页数和页大小:
初始化时会调用 canInitialize() 函数,在canInitialize() 函数中,直接将扫描NAND大小的函数屏蔽了。
另外,重新自定义了变量 memoryPages 和 memorySize 。等于是全局变量,固定了大小,固定了页数为 262144,固定了NAND总大小为1073741824字节。
总大小:memorySize: 1073741824字节 = 8Gb(810241024*1024/8)
页数:memorySize / pageSize = 1073741824/4096 = 262144
5 设备树修改
\linux-at91\arch\arm\boot\dts\at91-sama5d27_som1_ek.dts
设备树主要是修改分区大小,最后一个文件系统的分区大小,前面存放BOOT和内核的分区大小不变。
附:其他调试记录
使用SAM-BA读写:
8G-NAND
1)先往0x0地址写:
sam-ba -p serial -b sama5d2-ptc-ek -a nandflash -c erase::0x40000 -c writeboot:at91bootstrap.bin
2)然后从0x0地址再读出来:
读1024个字节(0:1024)
sam-ba -p serial -b sama5d2-ptc-ek -a nandflash -c read:test.bin:0:1024
通过读写操作,可以判断文件是否可以正常写入NAND并读出来。
帮助命令:sam-ba -p serial -b sama5d2-ptc-ek -a nandflash:help