This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
各位好:
目前在使用AM3352读取NAND FLASH时,出现读取有bit反转现象,NAND FLASH驱动无法ECC反转的bit位。
CPU:AM3352
NAND FLASH:美光MT29F32G08CBADAWP
ECC:硬件 16 bit (OMAP_ECC_BCH16_CODE_HW)
SDK:ti-processor-sdk-linux-am335x-evm-01.00.00.03-Linux-x86-Install.bin
测试方法:使用一个8M的每个字节都是0xaa的文件写入NAND FLASH,然后读取数据并打印
MTD分区信息:
dev: size erasesize name
mtd0: 01000000 00010000 "spi1.0"
mtd1: 80000000 00200000 "NAND.rootfs1"
mtd2: 80000000 00200000 "NAND.rootfs2"
MTD信息:
Count of MTD devices: 3
Present MTD devices: mtd0, mtd1, mtd2
Sysfs interface supported: yes
mtd0
Name: spi1.0
Type: nor
Eraseblock size: 65536 bytes, 64.0 KiB
Amount of eraseblocks: 256 (16777216 bytes, 16.0 MiB)
Minimum input/output unit size: 1 byte
Sub-page size: 1 byte
Character device major/minor: 90:0
Bad blocks are allowed: false
Device is writable: true
mtd1
Name: NAND.rootfs1
Type: mlc-nand
Eraseblock size: 2097152 bytes, 2.0 MiB
Amount of eraseblocks: 1024 (2147483648 bytes, 2.0 GiB)
Minimum input/output unit size: 8192 bytes
Sub-page size: 8192 bytes
OOB size: 744 bytes
Character device major/minor: 90:2
Bad blocks are allowed: true
Device is writable: true
mtd2
Name: NAND.rootfs1
Type: mlc-nand
Eraseblock size: 2097152 bytes, 2.0 MiB
Amount of eraseblocks: 1024 (2147483648 bytes, 2.0 GiB)
Minimum input/output unit size: 8192 bytes
Sub-page size: 8192 bytes
OOB size: 744 bytes
Character device major/minor: 90:4
Bad blocks are allowed: true
Device is writable: true
使用文件的方式读取MTD1,读取8K的数据,然后打印,结果如下:
root@am335x-evm:/tools# ./djmtdrwe mtd1 r 0 2000
main:argv[0]=./djmtdrwe,argv[1]=mtd1,argv[2]=r,argv[3]=0,argv[4][ 5693.471727] nand: >>>>> nand_do_read_ops1 chipnr >>>> chipnr=0
=2000
offset=0x0,len=8192
size=2048M
erasesize=2048K
writesi[ 5693.482367] nand: >>> nand_do_read_ops >>>
ze=8192
oobsize=744
regcount=0
>>> readmtd >>> offset=0x0,len[ 5693.492067] nand: col=0,from=0,readlen=8192,oob=0,realpage=0,ops->mode=0,page_shift=13
=8192,pos=0x0
[ 5693.505595] nand: eccinfo:mode=2,steps=16,size=512,bytes=26,total=416,strength=16,prepad=0,postpad=0
[ 5693.516079] nand: chipinfo:chip_delay=200,bbt_options=0x0,options=0x10000,numchips=1,chipsize=416M,pagemask=4096,pagebuf=0,subpagesize=524287,ecc_strength_ds=-1,ecc_step_ds=8192
[ 5693.531981] nand: mtdinfo:size=0,writesize=0,erasesize=1,oobsize=8192,oobavail=2097152,ecc_strength=744,subpage_sft=326
[ 5693.542823] nand: bytes=8192,aligned=1,writesize=8192,realpage=0,chip->pagebuf=-1,oob=0
reading result:
flash addr file ops
0x00000000 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00000010 : ab ab aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00000020 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00000030 : aa aa aa aa aa aa aa aa aa aa aa aa aa a2 aa aa
0x00000040 : aa aa ba aa ba aa aa aa aa aa aa aa aa aa aa aa
0x00000050 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00000060 : aa aa aa aa ea aa aa aa aa aa a2 aa aa aa aa aa
0x00000070 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa ab
0x00000080 : ba aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00000090 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x000000a0 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x000000b0 : aa aa aa aa aa aa aa aa aa aa aa aa aa a2 aa aa
0x000000c0 : aa aa aa aa b2 aa aa aa aa aa aa aa aa aa aa ea
0x000000d0 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x000000e0 : aa aa aa aa aa aa aa aa aa ae aa aa aa aa aa aa
0x000000f0 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00000100 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00000110 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00000120 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00000130 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00000140 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00000150 : aa aa ae aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00000160 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00000170 : aa aa aa aa aa aa aa aa aa a2 aa aa aa ae aa aa
0x00000180 : aa aa aa aa aa aa aa aa aa aa aa aa a8 aa aa aa
0x00000190 : aa aa aa aa ab aa aa aa aa aa aa aa aa aa aa aa
0x000001a0 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x000001b0 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x000001c0 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x000001d0 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x000001e0 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x000001f0 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa ab
0x00000200 : aa aa aa aa aa aa aa aa aa aa aa ea aa aa aa aa
0x00000210 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00000220 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00000230 : aa aa aa 2a aa aa aa aa aa aa aa aa aa a2 aa aa
0x00000240 : aa aa aa aa aa aa aa aa aa aa aa aa aa ae aa aa
0x00000250 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00000260 : aa aa aa aa aa aa aa aa aa aa aa aa aa ba aa aa
0x00000270 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00000280 : ba aa aa aa aa aa aa aa aa aa aa aa aa aa 2a ea
0x00000290 : aa ab aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x000002a0 : aa aa ab aa aa aa aa aa aa aa aa aa aa be aa aa
0x000002b0 : aa aa aa aa aa aa aa aa aa a2 aa ab aa aa aa ab
0x000002c0 : ab aa aa aa ba aa aa aa aa aa aa aa aa aa aa aa
0x000002d0 : ab aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x000002e0 : aa aa aa aa ea aa aa aa aa aa aa aa aa aa aa aa
0x000002f0 : aa aa aa aa aa aa aa aa aa aa aa aa aa a2 aa aa
0x00000300 : aa aa aa aa aa aa aa aa aa aa aa a2 aa aa aa aa
0x00000310 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00000320 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00000330 : aa aa aa aa aa aa aa aa aa aa aa aa aa a2 aa aa
0x00000340 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa ea
0x00000350 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00000360 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00000370 : aa aa aa aa aa aa aa aa aa aa aa ab aa aa aa aa
0x00000380 : aa aa aa aa aa aa aa aa aa aa aa ea aa aa aa aa
0x00000390 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x000003a0 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x000003b0 : aa aa aa aa aa aa aa aa aa a2 aa aa aa aa aa ab
0x000003c0 : aa aa aa aa ba aa aa aa a8 aa aa aa aa aa aa ea
0x000003d0 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x000003e0 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x000003f0 : aa aa aa aa aa aa aa aa aa ae aa ab aa aa aa aa
0x00000400 : ab aa aa 8a aa aa aa aa aa aa aa aa aa aa aa aa
0x00000410 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00000420 : aa aa aa aa aa aa aa aa aa aa 8a aa aa aa aa aa
0x00000430 : 8a aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00000440 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00000450 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00000460 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00000470 : aa ea aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00000480 : ab aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00000490 : aa aa aa ae aa aa aa aa aa aa aa aa aa aa aa aa
0x000004a0 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x000004b0 : aa aa aa aa aa aa aa aa aa ab aa aa aa aa aa aa
0x000004c0 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x000004d0 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x000004e0 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x000004f0 : aa aa aa aa aa aa aa aa aa ab aa aa aa aa aa aa
0x00000500 : ab aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00000510 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00000520 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00000530 : 8a aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00000540 : aa aa aa aa aa aa aa 8a aa aa aa aa aa aa aa aa
0x00000550 : ea aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00000560 : aa aa aa aa aa aa aa aa 8a aa aa aa aa aa aa aa
0x00000570 : aa ea aa aa aa aa aa aa aa ab aa aa aa aa aa aa
0x00000580 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00000590 : aa aa aa aa aa aa aa aa aa aa 2a aa aa aa aa aa
0x000005a0 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa 8a aa
0x000005b0 : aa aa aa aa 8a aa aa aa aa aa aa aa aa aa aa aa
0x000005c0 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x000005d0 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa 2a aa
0x000005e0 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x000005f0 : 8a aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00000600 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00000610 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00000620 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00000630 : aa ea aa aa aa aa aa aa aa aa aa aa ae aa aa aa
0x00000640 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00000650 : aa aa aa aa aa aa aa ae aa aa aa aa aa aa aa aa
0x00000660 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa 8a aa
0x00000670 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00000680 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00000690 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x000006a0 : aa aa aa aa aa aa a8 aa aa aa aa aa aa aa aa aa
0x000006b0 : aa aa aa aa aa ae aa aa aa aa aa aa ab aa aa aa
0x000006c0 : ab aa aa aa ab aa aa aa aa aa aa aa aa aa aa aa
0x000006d0 : aa aa aa aa aa aa aa aa aa aa 2a aa aa aa aa aa
0x000006e0 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x000006f0 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00000700 : aa aa aa aa ab aa aa aa aa aa aa aa aa aa aa aa
0x00000710 : aa aa aa ae aa aa aa aa aa aa aa aa aa aa aa aa
0x00000720 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00000730 : aa aa aa aa aa aa aa aa aa aa aa aa aa ab aa aa
0x00000740 : aa aa aa aa aa aa 2a aa aa aa aa aa aa aa aa aa
0x00000750 : aa aa aa aa aa aa aa ae aa aa aa aa aa aa 2a aa
0x00000760 : aa ab aa aa aa aa aa aa aa aa aa aa 8a aa aa aa
0x00000770 : aa aa aa aa aa ea aa aa aa ea aa aa aa aa aa aa
0x00000780 : ab aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00000790 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x000007a0 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x000007b0 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa ea
0x000007c0 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x000007d0 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x000007e0 : aa aa aa aa aa aa aa aa aa aa aa ab aa aa aa ae
0x000007f0 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00000800 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00000810 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00000820 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00000830 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00000840 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00000850 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00000860 : aa aa aa aa aa aa aa a2 aa aa aa aa aa aa aa aa
0x00000870 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00000880 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00000890 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x000008a0 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x000008b0 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x000008c0 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x000008d0 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x000008e0 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x000008f0 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00000900 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00000910 : aa aa aa aa aa ea aa aa aa aa aa aa aa aa aa aa
0x00000920 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00000930 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00000940 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00000950 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00000960 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00000970 : aa aa aa aa aa aa aa ba aa aa aa aa aa aa aa aa
0x00000980 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00000990 : aa aa aa aa aa aa a8 aa aa aa aa aa aa aa aa aa
0x000009a0 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x000009b0 : aa aa aa aa aa aa aa ba aa aa aa ae aa aa aa aa
0x000009c0 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x000009d0 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x000009e0 : aa aa aa a2 aa aa aa aa aa aa aa aa aa aa aa aa
0x000009f0 : aa aa aa ae aa aa aa aa aa aa ae aa aa aa aa aa
0x00000a00 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00000a10 : aa aa a8 aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00000a20 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00000a30 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00000a40 : aa aa 2a ae aa aa aa aa aa aa aa aa aa aa aa aa
0x00000a50 : ab aa aa aa ab aa aa aa aa aa aa aa aa aa aa aa
0x00000a60 : aa aa aa 2a aa aa aa aa aa aa aa aa aa aa aa aa
0x00000a70 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00000a80 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00000a90 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00000aa0 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00000ab0 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00000ac0 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00000ad0 : aa ea a8 aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00000ae0 : aa aa aa a2 aa aa aa aa aa aa aa aa aa aa aa ae
0x00000af0 : aa aa aa aa aa aa aa ba aa aa aa aa aa aa aa aa
0x00000b00 : aa aa aa aa aa aa aa ae aa aa aa aa aa aa aa aa
0x00000b10 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00000b20 : aa aa aa ba aa aa aa 2a aa aa aa aa aa aa aa aa
0x00000b30 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00000b40 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00000b50 : aa aa aa aa aa aa aa aa aa aa ba aa aa aa aa aa
0x00000b60 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00000b70 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00000b80 : aa aa aa aa aa aa a2 aa aa aa aa aa aa aa aa aa
0x00000b90 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00000ba0 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00000bb0 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00000bc0 : aa aa aa aa aa aa aa ae aa aa aa aa aa aa aa aa
0x00000bd0 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00000be0 : aa a2 aa aa aa aa aa aa aa aa aa aa aa aa aa ae
0x00000bf0 : aa aa aa aa aa aa aa ba aa aa aa aa aa aa aa aa
0x00000c00 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00000c10 : aa aa aa aa aa ab aa aa aa aa aa aa aa aa aa aa
0x00000c20 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00000c30 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00000c40 : aa aa aa aa aa aa aa aa aa aa aa aa 2a aa aa aa
0x00000c50 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00000c60 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00000c70 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00000c80 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00000c90 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00000ca0 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00000cb0 : aa aa aa ab aa aa aa ab aa aa aa aa aa aa aa aa
0x00000cc0 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00000cd0 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00000ce0 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00000cf0 : aa a2 aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00000d00 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00000d10 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00000d20 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00000d30 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00000d40 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00000d50 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00000d60 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00000d70 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00000d80 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00000d90 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00000da0 : aa aa aa aa aa aa aa aa aa aa aa ab aa aa aa aa
0x00000db0 : aa aa aa a2 aa aa aa aa aa aa aa aa aa aa aa aa
0x00000dc0 : aa 2a aa aa aa aa aa aa aa aa aa ea aa aa aa 2a
0x00000dd0 : aa ab aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00000de0 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00000df0 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00000e00 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00000e10 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00000e20 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00000e30 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00000e40 : aa 2a aa aa aa aa aa aa aa aa aa ea aa aa aa aa
0x00000e50 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa ea aa
0x00000e60 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00000e70 : aa a2 aa aa aa aa aa aa aa ca aa aa aa aa aa aa
0x00000e80 : aa 2a aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00000e90 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00000ea0 : aa aa aa aa aa aa a2 aa aa aa aa aa aa aa aa aa
0x00000eb0 : aa aa aa aa aa aa aa aa aa aa aa aa aa ea aa aa
0x00000ec0 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00000ed0 : aa aa aa aa aa ab aa aa aa aa aa aa aa aa aa aa
0x00000ee0 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa ab
0x00000ef0 : aa aa aa ab aa aa aa aa aa ea aa aa aa aa aa aa
0x00000f00 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa ba
0x00000f10 : aa aa aa aa aa aa aa aa aa 2a aa aa aa aa aa aa
0x00000f20 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00000f30 : aa aa aa aa aa aa aa ab aa aa aa aa aa aa aa aa
0x00000f40 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00000f50 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00000f60 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00000f70 : aa aa aa aa aa a2 aa aa aa aa aa aa aa aa aa aa
0x00000f80 : aa aa aa ae aa aa aa aa aa aa aa aa aa aa aa aa
0x00000f90 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00000fa0 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00000fb0 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00000fc0 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00000fd0 : aa aa aa aa aa aa a8 aa aa aa ea aa aa 2a ea aa
0x00000fe0 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00000ff0 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00001000 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00001010 : aa aa a8 aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00001020 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00001030 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa ae
0x00001040 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00001050 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00001060 : aa aa aa aa aa aa 8a aa aa aa aa aa aa aa aa aa
0x00001070 : a8 aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00001080 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00001090 : aa aa aa aa aa aa aa aa ab aa aa aa aa aa aa aa
0x000010a0 : aa aa 8a aa aa aa aa aa aa aa aa aa aa aa aa aa
0x000010b0 : aa aa aa aa aa aa aa aa aa aa 8a aa aa aa aa aa
0x000010c0 : aa aa aa aa aa aa aa ae aa aa aa aa aa aa aa aa
0x000010d0 : aa aa aa aa aa aa aa aa ab aa aa aa aa aa aa aa
0x000010e0 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x000010f0 : aa aa aa ab aa aa aa aa aa aa aa aa aa aa aa aa
0x00001100 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00001110 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00001120 : aa aa aa aa aa aa 8a aa aa aa aa aa aa aa aa aa
0x00001130 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00001140 : aa aa aa ae aa aa aa aa aa aa aa aa aa aa aa aa
0x00001150 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00001160 : aa aa 8a aa aa aa 88 aa aa aa aa aa aa aa aa aa
0x00001170 : aa aa aa 8a 8a aa ea aa aa aa 8a aa aa aa aa aa
0x00001180 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00001190 : aa aa aa aa aa aa aa ba aa aa aa aa aa aa aa aa
0x000011a0 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x000011b0 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x000011c0 : aa aa aa aa aa aa aa aa aa a2 aa aa aa aa aa aa
0x000011d0 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x000011e0 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x000011f0 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa 8a aa
0x00001200 : aa aa aa ae aa aa aa aa aa aa aa aa aa aa aa aa
0x00001210 : aa aa ab aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00001220 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00001230 : a8 aa aa aa aa ab aa aa aa aa aa aa aa aa aa aa
0x00001240 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00001250 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00001260 : aa aa aa aa aa aa ba aa aa aa aa aa aa aa aa aa
0x00001270 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00001280 : aa aa aa aa aa aa aa aa aa aa aa aa aa ab aa aa
0x00001290 : aa ae aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x000012a0 : aa aa aa aa aa aa 8a aa aa aa aa aa aa aa aa aa
0x000012b0 : aa aa ea aa aa aa aa aa aa aa aa aa aa aa aa aa
0x000012c0 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x000012d0 : aa aa aa aa aa aa aa aa ab aa aa aa aa ea aa aa
0x000012e0 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x000012f0 : aa aa ea aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00001300 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00001310 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00001320 : aa aa ae aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00001330 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00001340 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00001350 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00001360 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00001370 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00001380 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00001390 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x000013a0 : aa aa aa aa aa aa 8a aa aa ab aa aa aa aa aa aa
0x000013b0 : aa aa aa aa 8a aa aa aa aa aa aa aa aa aa aa aa
0x000013c0 : aa aa aa aa aa aa aa aa aa aa aa aa aa ab aa aa
0x000013d0 : aa aa ab aa aa aa a8 aa aa aa aa aa aa aa aa aa
0x000013e0 : aa aa 8a aa aa aa aa aa aa aa aa aa aa aa aa aa
0x000013f0 : aa aa ea aa aa aa aa 8a aa aa aa aa aa aa aa aa
0x00001400 : aa aa aa aa aa aa a8 aa aa aa aa aa aa aa aa aa
0x00001410 : aa ae aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00001420 : 8a aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00001430 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00001440 : aa aa a8 aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00001450 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00001460 : aa aa aa aa aa aa ae aa aa aa aa aa aa aa aa aa
0x00001470 : aa aa aa aa aa aa aa aa aa aa aa aa aa a8 aa aa
0x00001480 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00001490 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa ab
0x000014a0 : ae aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x000014b0 : aa aa aa aa aa aa ba aa aa aa aa aa aa aa aa aa
0x000014c0 : ae aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x000014d0 : aa aa aa 2a aa aa aa aa aa aa aa aa aa aa aa aa
0x000014e0 : aa aa aa aa aa aa aa aa aa aa aa 2a aa aa aa aa
0x000014f0 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00001500 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00001510 : aa aa ae aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00001520 : ea aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00001530 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00001540 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00001550 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00001560 : aa aa aa aa aa aa aa aa aa aa aa aa aa ea aa aa
0x00001570 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00001580 : ba aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00001590 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x000015a0 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x000015b0 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x000015c0 : aa aa aa aa ba aa aa aa aa aa aa aa aa aa aa aa
0x000015d0 : ba aa aa aa aa aa aa 2a aa aa aa aa aa aa aa aa
0x000015e0 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x000015f0 : aa ba aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00001600 : aa aa aa aa aa aa 2a aa aa ba aa aa aa aa aa aa
0x00001610 : ba aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00001620 : aa aa aa aa 8a aa aa aa aa aa aa aa aa aa aa aa
0x00001630 : aa aa aa aa aa aa aa aa aa a8 aa aa aa aa aa aa
0x00001640 : aa aa aa aa aa aa aa aa aa 2a aa aa aa 2a aa aa
0x00001650 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00001660 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00001670 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00001680 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00001690 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x000016a0 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x000016b0 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x000016c0 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x000016d0 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x000016e0 : aa aa aa aa aa aa aa aa aa aa aa aa a2 aa aa aa
0x000016f0 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00001700 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00001710 : aa aa aa aa ba aa aa aa aa aa aa aa aa aa aa aa
0x00001720 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00001730 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00001740 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00001750 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00001760 : aa aa aa aa aa aa ae aa aa aa aa aa aa aa aa aa
0x00001770 : aa ba aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00001780 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00001790 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x000017a0 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x000017b0 : aa aa ba aa aa aa aa aa aa aa aa aa aa aa aa aa
0x000017c0 : ba aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x000017d0 : aa aa ea aa aa aa aa aa aa aa aa aa aa aa aa aa
0x000017e0 : aa aa aa aa aa aa aa ea aa aa aa aa aa aa aa aa
0x000017f0 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00001800 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00001810 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00001820 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00001830 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa 8a aa
0x00001840 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00001850 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00001860 : aa aa aa aa aa aa aa ea aa aa aa a8 aa aa aa aa
0x00001870 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00001880 : aa aa aa aa aa aa 8a aa aa aa aa aa aa aa aa aa
0x00001890 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x000018a0 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x000018b0 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x000018c0 : aa aa 8a aa aa ae aa aa aa aa aa aa aa aa aa aa
0x000018d0 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x000018e0 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa a8
0x000018f0 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00001900 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00001910 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00001920 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00001930 : aa aa aa 8a aa aa aa ba aa aa aa aa aa aa aa aa
0x00001940 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00001950 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00001960 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00001970 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00001980 : aa ae aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00001990 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x000019a0 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x000019b0 : aa aa aa aa aa aa aa 2a aa aa aa aa aa aa aa aa
0x000019c0 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x000019d0 : aa aa aa aa aa aa aa aa aa aa aa a8 aa aa aa a2
0x000019e0 : aa aa aa aa aa aa aa ea aa aa aa aa ca aa aa aa
0x000019f0 : aa aa aa ba aa aa aa aa aa aa aa aa aa aa aa aa
0x00001a00 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00001a10 : aa aa aa aa aa aa aa aa a8 aa aa aa aa aa aa aa
0x00001a20 : aa aa aa aa aa 8a aa aa aa a8 2a aa aa aa aa aa
0x00001a30 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00001a40 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00001a50 : aa aa aa aa aa aa aa aa aa aa aa a2 aa aa aa aa
0x00001a60 : aa aa aa aa aa aa aa aa aa aa aa aa 8a a8 aa aa
0x00001a70 : aa aa aa aa aa aa aa aa ab aa aa aa aa aa aa aa
0x00001a80 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00001a90 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00001aa0 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00001ab0 : aa aa aa aa aa aa aa ba aa aa aa aa aa aa aa aa
0x00001ac0 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00001ad0 : aa aa aa aa aa aa aa aa aa aa aa aa ba aa aa aa
0x00001ae0 : aa aa aa aa aa aa aa aa aa aa aa aa 8a aa aa aa
0x00001af0 : aa aa aa aa aa ae aa ba aa aa aa aa aa aa aa aa
0x00001b00 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00001b10 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00001b20 : aa aa aa aa aa aa aa aa aa a8 aa aa aa ea aa aa
0x00001b30 : aa aa aa aa aa ae aa aa aa aa aa aa aa aa aa aa
0x00001b40 : aa aa aa aa aa ae aa aa aa aa aa aa aa aa aa aa
0x00001b50 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00001b60 : aa aa aa aa aa aa aa aa aa aa aa a8 aa aa aa aa
0x00001b70 : aa aa aa aa aa aa aa ba aa aa aa aa aa aa aa aa
0x00001b80 : aa aa aa aa aa aa ba aa aa aa aa a2 aa aa aa aa
0x00001b90 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00001ba0 : aa aa aa aa aa aa aa aa aa aa aa a8 aa aa aa aa
0x00001bb0 : aa aa aa 8a aa aa aa aa aa aa aa aa aa aa aa aa
0x00001bc0 : aa aa aa aa aa aa 8a aa aa aa aa aa aa aa aa aa
0x00001bd0 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00001be0 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00001bf0 : aa aa aa aa aa aa aa aa aa aa 8a aa aa aa aa aa
0x00001c00 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00001c10 : a2 aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00001c20 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00001c30 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00001c40 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00001c50 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00001c60 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00001c70 : aa aa aa aa aa aa aa aa aa aa aa aa ae aa aa aa
0x00001c80 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00001c90 : aa aa aa aa aa aa aa aa aa aa aa 8a aa aa aa aa
0x00001ca0 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00001cb0 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00001cc0 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00001cd0 : aa aa aa aa aa aa aa aa aa aa a2 aa aa aa aa aa
0x00001ce0 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa ae
0x00001cf0 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00001d00 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00001d10 : 8a aa aa aa ba aa aa aa aa aa aa aa aa aa aa 8a
0x00001d20 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00001d30 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00001d40 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00001d50 : aa aa aa aa aa aa aa aa aa aa aa 8a aa aa aa aa
0x00001d60 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00001d70 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00001d80 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00001d90 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa a8
0x00001da0 : aa aa aa aa aa aa aa aa ab aa aa aa aa aa aa aa
0x00001db0 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00001dc0 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00001dd0 : aa aa aa aa 8a aa aa aa aa aa aa aa aa aa aa aa
0x00001de0 : aa aa aa aa aa aa aa aa aa aa aa ae aa aa aa aa
0x00001df0 : ea aa aa aa aa aa aa aa aa 2a aa aa aa aa aa aa
0x00001e00 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00001e10 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00001e20 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa ae aa
0x00001e30 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00001e40 : aa aa aa aa aa aa aa a8 aa aa aa aa aa aa aa aa
0x00001e50 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00001e60 : aa aa aa a2 aa aa aa aa ab aa aa aa aa aa aa aa
0x00001e70 : 8a aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00001e80 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00001e90 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00001ea0 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00001eb0 : aa aa aa aa ea aa aa aa aa aa aa aa aa aa aa aa
0x00001ec0 : aa aa aa aa aa aa aa aa aa aa ab aa aa aa aa aa
0x00001ed0 : aa aa aa aa 8a aa aa aa aa aa aa aa aa aa aa aa
0x00001ee0 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa ae
0x00001ef0 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00001f00 : aa aa ba aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00001f10 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00001f20 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa ae
0x00001f30 : aa aa aa aa aa aa aa aa aa 2a aa aa aa aa aa aa
0x00001f40 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00001f50 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00001f60 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00001f70 : aa aa aa aa aa aa aa aa aa aa 2a aa aa aa aa aa
0x00001f80 : aa aa aa aa aa aa aa a8 aa aa aa aa aa aa aa aa
0x00001f90 : aa aa aa aa a2 aa aa aa aa aa aa aa aa aa aa aa
0x00001fa0 : aa aa ba aa aa aa aa aa aa aa aa ae aa aa aa ae
0x00001fb0 : ea aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00001fc0 : aa aa aa aa aa aa aa aa aa aa aa aa aa ba aa aa
0x00001fd0 : aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa aa
0x00001fe0 : aa aa aa aa aa aa ba aa aa aa aa aa aa aa ae aa
0x00001ff0 : aa aa aa aa aa aa aa aa aa aa 2a aa aa aa aa aa
read done!
read 0x2000(8192) bytes at offset=0x0 done!
附件是读取mtd的测试程序。
#include <unistd.h> #include <stdlib.h> #include <stdio.h> #include <fcntl.h> #include <time.h> #include <sys/ioctl.h> #include <sys/mount.h> #include <string.h> #include <mtd/mtd-user.h> #define MAX_BUFF_LEN 2048 typedef unsigned int uint32; int gfd = 0; int non_region_erase(int Fd, int start, int count, int unlock) { mtd_info_t meminfo; if (ioctl(Fd,MEMGETINFO,&meminfo) == 0) { erase_info_t erase; erase.start = start; erase.length = meminfo.erasesize; for (; count > 0; count--) { printf("\rPerforming Flash Erase of length %u at offset 0x%x", erase.length, erase.start); fflush(stdout); if(unlock != 0) { //Unlock the sector first. printf("\rPerforming Flash unlock at offset 0x%x",erase.start); if(ioctl(Fd, MEMUNLOCK, &erase) != 0) { perror("\nMTD Unlock failure"); close(Fd); return 8; } } if (ioctl(Fd,MEMERASE,&erase) != 0) { perror("\nMTD Erase failure"); close(Fd); return 8; } erase.start += meminfo.erasesize; } printf(" done\n"); } return 0; } void print_buffer(unsigned char* buff,int len) { int i = 0; unsigned char* pData = buff; int nCount = 0; uint32 u32Addr = 0; printf("%-10s %-10s\n","flash addr","file ops"); printf("0x%08x : ",u32Addr); for( i= 0; i < len; i++) { if(nCount == 16) { printf("\n"); nCount = 0; u32Addr += 16; printf("0x%08x : ",u32Addr); } printf("%02x ",*pData); pData++; nCount++; } printf("\n"); } void readmtd(__off_t offset,int len) { if(len <= 0 || offset < 0) { printf("readmtd : invalid param offset=0x%x,len=%d\n",offset,len); return; } int i = 0; __off_t pos = lseek(gfd,offset,SEEK_SET); if(pos == -1) { printf("seek to 0x%x failed\n",offset); return ; } printf(">>> readmtd >>> offset=0x%x,len=%d,pos=0x%x\n",offset,len,pos); uint8_t *rxbuff = malloc(len); if(rxbuff == NULL) { printf("alloc mem failed\n"); return; } memset(rxbuff,0,len); int nCount = read(gfd, rxbuff, len); printf("reading result:\n"); print_buffer(rxbuff,len); printf("read done!\n"); printf("read 0x%x(%d) bytes at offset=0x%x done!\n",nCount,nCount,offset); free(rxbuff); } void writemtd(__off_t offset,int len) { if(len <= 0 || offset < 0) { printf("writemtd : invalid param offset=0x%x,len=%d\n",offset,len); return; } int i = 0; __off_t pos = lseek(gfd,offset,SEEK_SET); if(pos == -1) { printf("seek to 0x%x failed\n",offset); return ; } printf("write data to nor flash:\n"); uint8_t *txbuff = malloc(len); uint8_t* pBuff = txbuff; for(i = 0; i < len; i++,pBuff++) { *pBuff = i; } int nCount = write(gfd, txbuff, len); printf("writen 0x%x(%d) bytes done!\n",nCount,nCount); free(txbuff); } int main(int argc, char *argv[]) { char *cmd; struct mtd_info_user info; int regcount; int ret; int res; int i = 0; char arrDevice[256]="/dev/"; __off_t offset = 0; __off_t len = 0; if(argc != 5) { printf("please usage:\ndjmtd mtdname w offset len--write data to nor flash\ndjmtd mtdname r offset len --read data from nor flash\ndjmtd mtdname e offset len--erase data from nor flash\n"); return 0; } printf("main:argv[0]=%s,argv[1]=%s,argv[2]=%s,argv[3]=%s,argv[4]=%s\n",argv[0],argv[1],argv[2],argv[3],argv[4]); //djmtd mtd0 r offset len strcat(arrDevice,argv[1]); cmd = argv[2]; offset = strtol(argv[3],NULL,16); len = strtol(argv[4],NULL,16); printf("offset=0x%x,len=%d\n",offset,len); gfd = open(arrDevice,O_RDWR); // Open the device if ( gfd < 0) { fprintf(stderr,"can't open %s\n",arrDevice); return 8; } else { ioctl(gfd,MEMGETINFO,&info); printf("size=%dM\nerasesize=%dK\nwritesize=%d\noobsize=%d\n",info.size/(1024*1024),info.erasesize/1024,info.writesize,info.oobsize); } if (ioctl(gfd,MEMGETREGIONCOUNT,®count) == 0) { printf("regcount=%d\n",regcount); } /*erase the device*/ if (strcmp(cmd, "e") == 0) { if(regcount == 0) { res = non_region_erase(gfd,0,(info.size/info.erasesize),0); } printf("erase!\n"); } /*write file to this device*/ if (strcmp(cmd, "w") == 0) { writemtd(offset,len); } if (strcmp(cmd, "r") == 0) { readmtd(offset,len); } close(gfd); return 1; }
最近也在关注着nand ecc的问题,可否帮忙在你的测试版本上,跑一下以下三条命令来测试这个ecc问题?
./runltp -f ddt/nand_mtdtests -P am335x-evm
./runltp -f ddt/nand_ecc_tests -s "NAND_S_FUNC_ECC_2K_BCH8_8ERRS_NO_OOB_ERR" -P am335x-evm
./runltp -f ddt/nandtests -s "NAND_L_STRESS_NANDTEST" -P am335x-evm
PS说明:Use LTP. It comes with our root file system in /opt/ltp.
Steven:
你好,我以前用的nand flash的page size是8KB,AM335x技术手册上说明ECC校验时最大支持page size为4KB的nand flash,我们今天更换了美光的MT29F16G08CBACAWP的FLASH,ecc校验正常。在前段时间,我内核读nand flash一次读一个page size的修改为一次读512个自己,分eccsteps次读取,校验也是对的。
补充说明,读取pagesize为8KB的,分eccsteps次读取,每次读取512个字节ECC校验也有问题,pagesize为4KB的,一次读取4KB或者分eccsteps读取,每次读取512B时ECC校验都是正常的。
另外2014.07的u-boot读取pagesize为8KB的flash,eccsteps读取,每次读取512B时ECC校验都是正常的,内核下不正常,原因不明。
答案看前面的啊。
其实就是对/dev/mtd设备读写,和读写文件一样。
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <fcntl.h>
#include <time.h>
#include <sys/ioctl.h>
#include <sys/mount.h>
#include <string.h>
#include <mtd/mtd-user.h>
#define MAX_BUFF_LEN 2048
typedef unsigned int uint32;
int gfd = 0;
int non_region_erase(int Fd, int start, int count, int unlock)
{
mtd_info_t meminfo;
if (ioctl(Fd,MEMGETINFO,&meminfo) == 0)
{
erase_info_t erase;
erase.start = start;
erase.length = meminfo.erasesize;
for (; count > 0; count--) {
printf("\rPerforming Flash Erase of length %u at offset 0x%x",
erase.length, erase.start);
fflush(stdout);
if(unlock != 0)
{
//Unlock the sector first.
printf("\rPerforming Flash unlock at offset 0x%x",erase.start);
if(ioctl(Fd, MEMUNLOCK, &erase) != 0)
{
perror("\nMTD Unlock failure");
close(Fd);
return 8;
}
}
if (ioctl(Fd,MEMERASE,&erase) != 0)
{
perror("\nMTD Erase failure");
close(Fd);
return 8;
}
erase.start += meminfo.erasesize;
}
printf(" done\n");
}
return 0;
}
void print_buffer(unsigned char* buff,int len)
{
int i = 0;
unsigned char* pData = buff;
int nCount = 0;
uint32 u32Addr = 0;
printf("%-10s %-10s\n","flash addr","file ops");
printf("0x%08x : ",u32Addr);
for( i= 0; i < len; i++)
{
if(nCount == 16)
{
printf("\n");
nCount = 0;
u32Addr += 16;
printf("0x%08x : ",u32Addr);
}
printf("%02x ",*pData);
pData++;
nCount++;
}
printf("\n");
}
void readmtd(__off_t offset,int len)
{
if(len <= 0 || offset < 0)
{
printf("readmtd : invalid param offset=0x%x,len=%d\n",offset,len);
return;
}
int i = 0;
__off_t pos = lseek(gfd,offset,SEEK_SET);
if(pos == -1)
{
printf("seek to 0x%x failed\n",offset);
return ;
}
printf(">>> readmtd >>> offset=0x%x,len=%d,pos=0x%x\n",offset,len,pos);
uint8_t *rxbuff = malloc(len);
if(rxbuff == NULL)
{
printf("alloc mem failed\n");
return;
}
memset(rxbuff,0,len);
int nCount = read(gfd, rxbuff, len);
printf("reading result:\n");
print_buffer(rxbuff,len);
printf("read done!\n");
printf("read 0x%x(%d) bytes at offset=0x%x done!\n",nCount,nCount,offset);
free(rxbuff);
}
void writemtd(__off_t offset,int len)
{
if(len <= 0 || offset < 0)
{
printf("writemtd : invalid param offset=0x%x,len=%d\n",offset,len);
return;
}
int i = 0;
__off_t pos = lseek(gfd,offset,SEEK_SET);
if(pos == -1)
{
printf("seek to 0x%x failed\n",offset);
return ;
}
printf("write data to nor flash:\n");
uint8_t *txbuff = malloc(len);
uint8_t* pBuff = txbuff;
for(i = 0; i < len; i++,pBuff++)
{
*pBuff = i;
}
int nCount = write(gfd, txbuff, len);
printf("writen 0x%x(%d) bytes done!\n",nCount,nCount);
free(txbuff);
}
int main(int argc, char *argv[])
{
char *cmd;
struct mtd_info_user info;
int regcount;
int ret;
int res;
int i = 0;
char arrDevice[256]="/dev/";
__off_t offset = 0;
__off_t len = 0;
if(argc != 5)
{
printf("please usage:\ndjmtd mtdname w offset len--write data to nor flash\ndjmtd mtdname r offset len --read data from nor flash\ndjmtd mtdname e offset len--erase data from nor flash\n");
return 0;
}
printf("main:argv[0]=%s,argv[1]=%s,argv[2]=%s,argv[3]=%s,argv[4]=%s\n",argv[0],argv[1],argv[2],argv[3],argv[4]);
//djmtd mtd0 r offset len
strcat(arrDevice,argv[1]);
cmd = argv[2];
offset = strtol(argv[3],NULL,16);
len = strtol(argv[4],NULL,16);
printf("offset=0x%x,len=%d\n",offset,len);
gfd = open(arrDevice,O_RDWR);
// Open the device
if ( gfd < 0)
{
fprintf(stderr,"can't open %s\n",arrDevice);
return 8;
}
else
{
ioctl(gfd,MEMGETINFO,&info);
printf("size=%dM\nerasesize=%dK\nwritesize=%d\noobsize=%d\n",info.size/(1024*1024),info.erasesize/1024,info.writesize,info.oobsize);
}
if (ioctl(gfd,MEMGETREGIONCOUNT,®count) == 0)
{
printf("regcount=%d\n",regcount);
}
/*erase the device*/
if (strcmp(cmd, "e") == 0)
{
if(regcount == 0)
{
res = non_region_erase(gfd,0,(info.size/info.erasesize),0);
}
printf("erase!\n");
}
/*write file to this device*/
if (strcmp(cmd, "w") == 0)
{
writemtd(offset,len);
}
if (strcmp(cmd, "r") == 0)
{
readmtd(offset,len);
}
close(gfd);
return 1;
}