分类:
2009-03-26 18:21:40
1,NAND Flash 读erase过的block会返回一个error值,但是要是烧一个全ff的文件在那个block上,就会没事。
SWDownloader和JTAG erase过的block都会返回-10的错误。但是blob erase就没事。
返回-10是因为Nand flashe driver读到一个page后,会用ecc算法去算这个page的值,然后与这个page的spare area的值进行比较,如果不一样,则NDSR寄存器的DFC_SR_DBERR位会被set 1。spare area的ECC值是写flash的时候算出来然后写到spare area里的。可能是JTAG和SWD erase的时候,并没有算ECC的值写入spare area,可能是直接给擦掉了。但是如果忽略这个错误的话,blob运行无异常,也就是说load blob在的区域是没问题的,但是读blob后的空白部分就会有这个错误。
而且NandFlash对于坏块表的处理没有用Flash硬件
design的方法,Flash硬件design是把坏块表存在每个page的spare
area里,但是软件目前design是将坏块表存在Block 0里,从block
0的最后一个page里开始存,从后向前存。每次读写的时候都首先查找坏块表,然后看访问的block是否被映射,如果被映射,则取映射后的地址去访问。
这样的话,在每次configure flash的时候,首先要check怀快表,看是否合法,非法则重建快怀表。
2,OneNand DMA问题,load image,如果开cache会影响DMA模式,导致读出的东西不对。而且开cache的话,会影响security 硬件算hash值也会错误。关cache会没问题。