AnsweredAssumed Answered

Bad blocks all over the place

Question asked by mrkozmic on Nov 4, 2011
Latest reply on Nov 8, 2011 by mrkozmic

I have two types of flash on my board. 2 x 1Gb  and 8 x 8Gb from ST.

 

The 1Gb flash works fine, but I have problems with the 8Gb flash. All pages starts with 0x0F and u-boot detects all blocks as bad. Where does the 0xF0 come from?

Scrubing does not help.

 

bfin> nand dump 0    
Page 00000000 dump:
        f0 f0 f0 f0 f0 f0 f0 f0  f0 f0 f0 f0 f0 f0 f0 f0
        f0 f0 f0 f0 f0 f0 f0 f0  f0 f0 f0 f0 f0 f0 f0 f0
        f0 f0 f0 f0 f0 f0 f0 f0  f0 f0 f0 f0 f0 f0 f0 f0
        f0 f0 f0 f0 f0 f0 f0 ff  ff ff ff ff ff ff ff ff
        ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff

........

ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff
OOB:
        ff ff ff ff ff ff ff ff
        ff ff ff ff ff ff ff ff
        ff ff ff ff ff ff ff ff
        ff ff ff ff ff ff ff ff
        ff ff ff ff ff ff ff ff
        ff ff ff ff ff ff ff ff
        ff ff ff ff ff ff ff ff
        ff ff ff ff ff ff ff ff

 

I have another program that I run from VisualDSP++ to detect bad blocks by reading the spare area and checking byte 1 and 6. This program detects some bad blocks (less than 20). It also detect bad blocks after scrubing by uboot. Why doesn't scrubing erase bad block information?

 

for(k = 0; k < m_nand_array[i].nand_spec->blocks; k++)
{
                          m_nand_array[i].nand_chip->NAND_SpareRead2((k*(64*4096)) >> 1, buffer, 64);

 

                          if(buffer[0] != 0xff && buffer[5] != 0xff)
                          {
                                m_nand_array[i].bad_block_array[l++] = (short)k;
                          }
}

Outcomes