Archive for September, 2009

Detekcja bad blocków za pomocą U-Boot

Najpierw proponuję sprawdzić tablicę partycji czy testujemy porządny obszar.

qq2440 # mtdparts
device nand0 <nandflash0>, # parts = 3
 #: name			size		offset		mask_flags
 0: kernel              0x00200000	0x00000000	0
 1: jffs2               0x00800000	0x00200000	0
 2: yaffs               0x03600000	0x00a00000	0
active partition: nand0,0 - (kernel) 0x00200000 @ 0x00000000
defaults:
mtdids  : nand0=qq2440-nand
mtdparts: <NULL>

Oto prosty snippet do wykrywania bad blocków w pamięci NAND flash za pomocą U-Boota.

mw 0x32000000 55aa55aa 20000
nand write 0x32000000 0x00a00000 0x80000
nand read 0x32080000 0x00a00000 0x80000
cmp.l 0x32000000 0x32080000 0x20000

Objaśnienia po kolei:

  1. do ramu (0×3200000) wpisujemy jakieś bajty testowe (0x550xaa0x550xaa) i to razy 0×20000. Rozmiar jaki chcemy przetestować podzielony przez 4
  2. potem zapisujemy to do flasha (0xa00000) na testowany obszar
  3. odczytujemy do innego obszaru pamięci
  4. testujemy

Wyniki mogą być takie (adresy w przykładzie są z innego testu):

word at 0x32180000 (0x55aa55aa) != word at 0x32200000 (0x00000000)
Total of 393216 words were the same

Jeżeli znajdziemy jakiegoś babola wypada go odznaczyć, offset w pamięci flash trzeba obliczyć ręcznie, ale to chyba nie problem:

nand markbad 0xa00000

, , , ,

2 Comments