Hi, everyone.

 

First of all, we chose 8Gb MLC in our board, because the price (MLC) and the
capacity (8Gb is enough. 4Gb can be used.)

But, we met a big problem. We cannot use our memory, then I asked a question
below and get an answer.

In u-boot(2009.01), it started to work, but had many problem in our
application.

Some people recommended us to buy the latest version through TI. (version
5.x ?)

 

"How to use NAND 8Gbit (K9G8G08U0A, MLC, Samsung) in DM355"

That looks good to me! I normally see these ECC failures on the bad block 

tables, there is something wrong with u-boot's handling of ECC in the
supplied 

1.2.0 version. However, everything else seems to work.. touch wood!

I am currently trying to port DM355 to current u-boot (2009.01) which might
go 

some way to fixing this error.

 

Now, we start to review the nand programmer.

 

These are the memories we tried to attach in our board. Only SLC memories
work.

MT29F16G08FAA (SLC, 16Gb) -> Flash NAND Memory in the DM355 EVM Board ->
Absolutely, succeed.

K9G4G08U0A (MLC, 4Gb)

K9G8G08U0A (MLC, 8Gb)

K9GAG08U0M (MLC, 16Gb)

K9WAG08U1A (SLC, 16Gb) -> succeed.

 

In Nand.c, gNANDDevInfo [] has three defines of Micron memories. 

{0xDC, 64,  2048+64,22,         5},  /* Micron  MT29F4G08AAA */ -> SLC

            {0xD3, 64,  2048+64,22,         5},  /* Micron  MT29F16G08FAA */
-> SLC

{0xD3, 128, 2048+64,23,         5}   /* Micron  MT29F16G08QAA */ -> MLC

 

For, other memories such as SAMSUNG/RENESAS and other, 

 

             if(foundNAND == NAND_NOT_FOUND) {

                          /* Default configuration */

                          /* For SAMSUNG/RENESAS and other. We dont support
Toshiba */

                          gNandInfo.dev_code                    =
UNKNOWN_NAND;

                          gNandInfo.page_cnt                     = 64;

                          gNandInfo.page_size      = 2112;

                          gNandInfo.blk_shift    = 22;

                          gNandInfo.big_block        = 1;

                          gNandInfo.addr_cycles   = 5;

                          gNandInfo.page_shift       = 16;

 

For MLC, gNandInfo.page_cnt = 128 and for SLC, gNandInfo.page_cnt = 64.

But, I don't know the meaning of gNandInfo.blk_shift.

In nandProg.c, in case of deviceID == 0xD3, there are two cases of Micron
SLC and Micron MLC.

We try to use Samsung MLC 16Gb, the DM355 read the deviceID = 0xD3 but the
capacity is 4Mb. I don't know the reason.

Also, we try to Samsung MLC 4Gb, deviceID = 0xdc, but in the table of
gNANDDevInfo [], MLC 512MB is not defined.

Therefore, we try to change gNandInfo.page_cnt    = 128;, the device is not
booting. Booting failure message.

 

{0xDC, 64,          2048+64,22,                     5},         /* 512 MB -
Big Block */

--> {0xDC, 128,           2048+64,22,               5},      /* 512 MB - Big
Block */ for Samsung MLC 512MB (4Gb)

 

Then, I conclude that this program is set only for the Micron 16Gb SLC and
MLC + Micron 4Gb SLC.

Therefore, we are changing the u-boot and nand programmer.

 

If someone knows the solution of the similar or the same issue, please let
me know the path to the success.

Thank you.

 

Billy

 

[nandProg.c]

if ( deviceID == 0xD3 )

            {

                if ((extID >>= 4) & 2 )

                {

                    /* this is MT29F16G08QAA with block size as 216KB */


                    printf(" this is MT29F16G08QAA device \n");

                    gNandInfo.page_cnt  = 128;

                    gNandInfo.blk_shift = 23;

                }

                else

                {

                    gTotalBlocks = 8192;

                    printf(" this is MT29F16G08FAA device \n");

                }

            }

 

if ( gNandInfo.dev_code == 0xD3 && gNandInfo.page_cnt == 128 )

    {

        printf("This is MT29F16G08QAA NAND. Change the blocksize!\n");

        /* RBL doesn't support this device. Let's pretend the block size is 

           2KB for writing UBL

         */

        gNandInfo.blk_shift = 22;

        gNandInfo.page_cnt  = 64;

        bSwitched = TRUE;

    }

 

if ( bSwitched ) // bSwitched = TRUE

    {

        printf("This is MT29F16G08QAA NAND. Change the blocksize back!\n");

        /* RBL doesn't support this device. Let's pretend the block size is 

           2KB for writing UBL

         */

        gNandInfo.blk_shift = 23;

        gNandInfo.page_cnt  = 128;

        /* keep the first block from being erased */

        NANDSetBadBlock(0);

    }

 

[NAND.c]

/* Details of NAND device sizes supported */

const NAND_DEVICE_INFO   gNandDevInfo[] = {

/*  devid,p_cnt,p_byte1,blk_shift, addr_cycles */

    {0xE3, 16,     512+16, 12,                      3},         /* 4 MB */

    {0xE5, 16,     512+16, 12,                      3},         /* 4 MB */

    {0xE6, 16,     512+16, 12,                      3},         /* 8 MB */

    {0x39, 16,     512+16, 12,                      3},         /* 8 MB */

    {0x6B, 16,    512+16, 12,                      3},         /* 8 MB */


    {0x73, 32,     512+16, 13,                      3},         /* 16 MB */

    {0x33, 32,     512+16, 13,                      3},         /* 16 MB */

    {0x75, 32,     512+16, 13,                      3},         /* 32 MB */

    {0x35, 32,     512+16, 13,                      3},         /* 32 MB */

             {0x43, 32,           512+16, 12,                      3},  /*
16 MB 0x1243 */

             {0x45, 32,           512+16, 12,                      3},  /*
32 MB 0x1245 */

             {0x53, 32,           512+16, 12,                      3},  /*
16 MB 0x1253 */

             {0x55, 32,           512+16, 12,                      3},  /*
32 MB 0x1255 */

    {0x76, 32,     512+16, 13,                      4},         /* 64 MB */

    {0x36, 32,     512+16, 13,                      4},         /* 64 MB */

    {0x79, 32,     512+16, 13,                      4},         /* 128 MB */

            {0x71, 32,           512+16, 13,                      4},
/* 256 MB */

             {0x46, 32,           512+16, 13,                      4},  /*
64 MB 0x1346 */

             {0x56, 32,           512+16, 13,                      4},  /*
64 MB 0x1356 */

             {0x74, 32,           512+16, 13,                      4},  /*
128 MB 0x1374 */   

    {0xF1, 64,     2048+64,22,                     4},  /* 128 MB - Big
Block */

    {0xA1, 64,     2048+64,22,                     4},         /* 128 MB -
Big Block */

             {0xAA, 64,          2048+64,22,                     5},
/* 256 MB - Big Block */

             {0xDA, 64,          2048+64,22,                     5},
/* 256 MB - Big Block */

             {0xAC, 64,          2048+64,22,                     5},  /* 512
MB - Big Block */

             {0xDC, 64,          2048+64,22,                     5},
/* 512 MB - Big Block */

             {0xB1, 64,          2048+64,22,                     4},  /* 128
MB - Big Block 0x22B1 */

            {0xC1, 64,          2048+64,22,                     4},  /* 128
MB - Big Block 0x22C1 */

    {0xDC, 64,  2048+64,22,         5},  /* Micron  MT29F4G08AAA */

    {0xD3, 64,  2048+64,22,         5},  /* Micron  MT29F16G08FAA */

    {0xD3, 128, 2048+64,23,         5}   /* Micron  MT29F16G08QAA */

 

};

 

 

_______________________________________________
Davinci-linux-open-source mailing list
[email protected]
http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source

Reply via email to