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.

Question about BOOT NOR FLASH

Other Parts Discussed in Thread: TMS320C6678

Hi

I've some questions about the boot NOR FLASH,

1) when we directly boot from EMIF16 NOR FLASH,the data lines should be x8 or x16 ,or both supported?

2) when we boot though IBL,the data lines of EMIF16 NOR FLASH should be x8 or x16 ,or both supported?

3) when we use x8 NOR FLASH for boot,according to SPRUGZ3A,we must connect C6678's address lines EMIF_A[22] to NOR FLASH's FLASH_A[0],EMIF_A[23] to FLASH_A[1],EMIF_A[0] to FLASH_A[2] and so on,is this correct?

4) when we use x16 NOR FLASH for boot,according to SPRUGZ3A,we must connect C6678's address lines EMIF_A[23] to NOR FLASH's A[0],EMIF_A[0] to FLASH_A[1],EMIF_A[1] to FLASH_A[2] and so on,is this correct?

Thanks very much for your answers.

  • Hi Mark,

    You will have to be more specific about which device you are attempting to use.  The EMIF16 boot code is slightly different between the Keystone devices.

  • Hi Bill

    Thanks for your reply,the DSP we used is TMS320C6678,and the NOR FLASH we used is S29GL128P.

     Looking forward to your answers.

  • Hi Mark,

    The C6678 was the first device in the Keystone I family to support  EMIF16 and it only supports a boot from a 16bit NOR flash.  Boot from 8bit NOR flash was added to later devices.  The S29GL128P can support a 16bit mode and should work if it is connected correctly. 

    First, it is a 3.3V part so a voltage translator will be needed and should be factored into all timing calculations. The EMIF16 boot will use the default settings for the EMIF16 interface.  These defaults are the longest possible setup, strobe and hold times so timing shouldn't be an issue during the initial boot.

    Secondly, EMIF16 boot for the C6678 is only supported on EMIFCE0 so connect that to the CE# of the flash. 

    Thirdly, it should be connected as a 16bit device as specified in the EMIF16 Users Guide thus A0 of the flash should be connected to A23 of the C6678, A1 of the flash connected to A0 of the C6678, A2 of the flash should be connected to A1 of the C6678, etc. 

    I don't have the answers for the software questions.  If you have specific questions on the software I suggest you either post them to a new thread or restate the question here and I'll forward it to the software support team.

    Regards, Bill

  • Hi Bill

    Thanks very much for your anwser,it's very clear for me,i've another question,if i use I2C EEPROM for IBL boot,can i use 8-bit NOR FLASH?

    Such as the EVM BOARD,it uses 8-bit NAND FLASH boot through I2C IBL.

  • Hi Mark,

    Adding an I2C EEPROM to your design always gives you the maximum flexibility to configure the device for a different boot mode.  This is certainly true of EMIF16 since the EMIF interface could be configured to talk with an 8bit NOR flash instead of the 16bit.  I've passed this post off to one of the engineers supporting the software to answer whether this is already implemented in IBL.

  • Hi Bill

    Thanks very much for your help,i‘m looking forward to his answer.

    Thanks again!

  • Hi mark,

    i am trying to conform if the NOR boot in IBL that comes with MCSDK supports 8 bit. But if you have EEPROM, you can implement you own  8 bit NOR boot and execute.

    Thanks,

    Arun.

  • Hi Bill,

    I am also interested in using S29FL128(S) with EMIF16 and have some questions that you can probably clarify :

    1) Since S29GL128 does not provide any "byte_enable" input pins, I guess that the C6678 EMIFBE(1..0) outputs are left unconnected. IS this correct ?

    2) But in that case, that also impliesthat the C6678 software should not be allowed to execute any BYTE oriented instruction. How can we be sure of that ?

    3) For the project I am working on, we need a total of 128MBytes of NOR flash which means that 4 separate components are necessary (since each CE adressing space is limited to 32MBytes). But this takes a lot of space. This is why I am wondering if a strategy as the one given below  could be OK. It would use only one 128MBytes component with a little bit of very simple decoding logic. What do you think of this approach ?

    Thank you for your help,

    best regards,

    Bruno

  • Hi Bruno,

    Nor flash doesn't use the byte enables since it doesn't support writing in a byte-by-byte mode. Writing to the NOR flash requires a special driver that sends a sequence of commands followed by a series of word accesses.  You can still read a byte since the EMIF interface will read the word and pull out the requested byte. 

    While the circuit that you've outlined will work fine for reads you need to check that you can access the devices properly for writes.  As long as you can set it up correctly and write to the entire device it should work. You'll have to do your timing analysis to be sure.

    Regards, Bill

  • If you're going with an IBL route, here's what I did:

    * create a copy of the tree C:\ti\mcsdk_2_xx_xx_xx\tools\boot_loader\ibl\src\util\ibl and make sure you can rebuild with the tools

    * call makefile to omit NOR_SPI and enable NOR_EMIF (which is in principle an "out of the box" option)

    * set width (8/16 bit) in the device config, eg.

    C:\ti\mcsdk_2_01_00_03\tools\boot_loader\ibl\src\util\iblConfig\src\device.c

    * fix src/main/iblmain.c bug with this combination as follows:

    348c382
    < #if (!defined(EXCLUDE_NOR_EMIF) && !defined(EXCLUDE_NOR_SPI))
    ---
    > #if (!defined(EXCLUDE_NOR_EMIF) || !defined(EXCLUDE_NOR_SPI))

    * separately, write a NOR driver in platform_lib, and build a norwriter application using your modified library, check that you can burn to flash.

    * burn your new i2crom.bin to EEPROM and test this IBL.  If you need to step through to debug, this can be done; there are various posts about this around.

    * if you want to optimise the device timings (EMIF CR0) there isn't a direct config setting for this.  I hacked it into

    C:\ti\mcsdk_2_01_00_03\tools\boot_loader\ibl\src\hw\emif25\emif25.c :: hwEmif25Init

    although the more "natural" place to put it would be deviceConfigureForNor(), which is currently a null define.

    Good luck,

    Gordon

  • Hi Bruno,

       i have change my norwriter,and i can write my app.bin to the EMIF-norflash.

       i want to know that how to change the IBL to make the program jump to EMIF NORFLASH(0X70000000)

    thanks.