日期:2014-05-16  浏览次数:20732 次

reboot使用fis erase擦除命令出错
1.使用RedBoot引导程序.

2.RedBoot>fis list
Name FLASH addr Mem addr Length Entry point
RedBoot 0x60000000 0x60000000 0x00040000 0x00000000
RedBoot config 0x60FC0000 0x60FC0000 0x00001000 0x00000000
FIS directory 0x60FE0000 0x60FE0000 0x00020000 0x00000000
ramdisk 0x60040000 0x00800000 0x00300000 0x00080000
zImage 0x60340000 0x00080000 0x00100000 0x00080000
jffs2fs 0x60440000 0x01000000 0x00B00000 0x00080000

2.RedBoot> fis erase -f 0x60640000 -l 0x0F
... Erase from 0x60640000-0x6064000f: . ->擦除成功

3.RedBoot> fis erase -f 0x606400E0 -l 0x0F
Invalid FLASH address: 0x606400e0 ->擦除失败
  must be 0x20000 aligned

问题:
为什么擦除失败.
因为需要0x20000对齐,这难道说一次必须擦除掉0x20000(128K)数据吗???否则地址如果在落128K则不能从中间擦除?
那应该怎么办才能擦除0x606400E0之后的15个字节而其他数据不变呢.

------解决方案--------------------
因为需要0x20000对齐,这难道说一次必须擦除掉0x20000(128K)数据吗???否则地址如果在落128K则不能从中间擦除?
那应该怎么办才能擦除0x606400E0之后的15个字节而其他数据不变呢.

如果是NOR FLASH,擦除必须以sector为单位。看具体型号,如果你的FLASH一个sector是128K的,那你必须每次擦除128K。这是由FLASH的硬件特性决定的,没有办法。擦除15个字节的办法就是先把这个sector的数据拷到内存,把这15字节内容改写,擦sector,再把内存里的数据写回去。