This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

c6678 support for modern NANDs?

Hi,

Background:

I'm fairly new to all things NAND, so please forgive me if I make a mistake in my terminology.   My question concerns c6678 support for ONFI nand devices.  The NAND which comes with the c6678 EVM is a very old (obsolete), small page nand, made by a company which no longer exists.  However, the PDK's platform library for the c6678 seems to have it's nand driver hard-coded for this particular nand (for example eccLoc[] array in evm66x_nand.c, NAND_SPARE_AREA_READ, and many more locations).   Our HW design uses a modern ONFI compliant NAND, which does not work with the platform library's nand driver as the page size, block size, number of blocks, ECC layout, and even command set are different.

Problem:

We want to boot the c6678 from NAND.  To flash the nand image, the mcsdk provides the nandwriter utility.  To boot from nand, the mcsdk provides the IBL.  It seems to me that the IBL does not uses the PDK's platform library, and can be configured to read from various nands.  however, the nandwriter utility uses the PDK platform library, and cannot write to my nand.  Because I can't write the application image to the nand, I cannot boot from nand.

Questions:

1) is the above correct?  Especially, is it true that the PDK's nand support is hard coded for non-ONFI nands?

2) is there a ONFI-compliant nand-writer/platform-library somewhere?

3) how are other people dealing with this?  do people modify the platform library and add a custom nand-driver?

Thanks,

Joel

  • The NAND interface in the C6678 takes advantage of the timing flexibility of the EMIF16 to allow for the timing to support of a wide range of devices but the EMIF16 does not provide direct support for accessing the NAND device.  This must still be achieved with a custom driver tailored to the requirements of the NAND devices itself.  The drivers provided with the PDK are examples for the device that can be found on the C6678 EVM.  The main limitation in supporting more recent NAND devices is the ECC structure of these devices.  The C6678 ECC is limited to 1-bit ECC calculation for up to 512 bytes and 4-bit ECC calculation for up to 518 bytes.  Normally the rest of the interface can be customized by creating a driver.  At this time we don't have a ONFI-compliant platform library. 

    Note that the requirement for the NAND interface capability in the C6678 was driven by the customer requirement for mass storage.  The C6678 does not support directly booting from a NAND device.  In order to boot from a NAND a primary boot devices such as an I2C memory is needed to configure the EMIF16 and to load the appropriate device drivers.

  • Thanks Bill.  Can you explain what you mean by "The C6678 ECC is limited to 1-bit ECC calculation for up to 512 bytes and 4-bit ECC calculation for up to 518 bytes."  I don't quite understand that statement.  The rest of the answer was very helpful. It looks like we may move away from NAND boot to another boot mode.

  • Joel,

    Please refer to the EMIF16 User's Guide for more detail on the ECC calculations and the use of those registers. Bill's statement is almost a quotation from section 3.7 of the EMIF16 UG. That section may help you understand this better, but if not, please reply back with your questions on what you read.

    Regards,
    RandyP

  • Hi Joel

    Did you solved the new nand flash compatibility with 6678 ?

    Did you modified the nand driver to suite your recent nand ?

    My design also uses a recent nand...

    Please help/guide me

  • Hi Mahendra,

    Fortunately we were able to remove nand from our design completely, so I did not have to investigate this issue any further.  Unfortunately that means I don't have any info for you.  Sorry.

    -Joel