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.

BOOT from NAND FLASH with TMDXEVM6678L EVM


I'm trying to do the NAND flash I2C example as depicted in the following file :
C:\Program Files\Texas Instruments\mcsdk_2_00_05_17\tools\boot_loader\examples\i2c\nand\docs\README.txt: NAND boot over I2C example

The steps to built and run the example succeed :

 NAND Boot Over I2C Example Version 01.00.00.00

 Booting Hello World image from NAND flash via IBL over I2C 0x51 ...IBL: PLL and DDR Initialization Complete

I passed the steps to program the EEPROM and the NAND

Unfortunately, the result of the boot is not the "Hello world" I expected !!!


 IBL Result code 00
 IBL: Booting from NAND
 Linux version 2.6.34-evmc6678.el-20110504 (a0868495@gtcs13.gt.design.ti.com) (gcc version 4.5.1 (Sourcery G++ Lite 4.5-109) ) #1 Wed May 4 11:14:47 EDT 2011
 Designed for the EVMC6678 board, Texas Instruments.
 CPU0: C66x rev 0x0, 1.2 volts, 1000MHz
 Initializing kernel
 Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 130048
 Kernel command line: console=ttyS0,115200 initrd=0x80400000,0x300000 ip=dhcp rw
 PID hash table entries: 2048 (order: 1, 8192 bytes)
 ..............

 IP-Config: Auto-configuration of network failed.
 Freeing unused kernel memory: 140K freed
 starting pid 17, tty '': '/etc/rc.sysinit'

 Starting system...

 Mounting proc filesystem: done.
 Mounting other filesystems: done.
 Starting mdev
 Setting hostname localhost: done.
 Bringing up loopback interface: done.
 Starting inetd: done.

 eth0      Link encap:Ethernet  HWaddr 90:D7:EB:95:49:2B
     BROADCAST ALLMULTI MULTICAST  MTU:1500  Metric:1
     RX packets:0 errors:0 dropped:0 overruns:0 frame:0
     TX packets:12 errors:0 dropped:0 overruns:0 carrier:0
     collisions:0 txqueuelen:1000
     RX bytes:0 (0.0 B)  TX bytes:7080 (6.9 KiB)
     Interrupt:48

 System started.

 starting pid 54, tty '/dev/console': '/bin/sh'
 / #


It seems that the instructions given in the README.txt file, changing "tools\boot_loader\ibl\src\make\bin\i2cConfig.gel" to ibl_BOOT_FORMAT_ELF
doesn't take effect.

I read the following topic on forum : http://e2e.ti.com/support/dsp/c6000_multi-core_dsps/f/639/t/113883.aspx
=> I identify a Configure IBL step that is not depicted in the readme.txt file :


 Configure IBL
  Terminate previous debug session (load IBL session)
  Power-down EVM
  Power-up EVM
  Boot pins still set to little endian "No Boot"
  Launch the EVM6678 target configuration
  Load the evm6678l.gel file that accompanied the CCSv5.02 patch
  Wait for memory map setup to complete

  Connect to Core 0
   Wait for GEL initialization sequence to finish
  Load Core 0 with <MCSDK_beta2>\tools\boot_loader\ibl\src\util\i2cConfig\i2cparam_c661x_le.out
  Load GEL file <MCSDK_beta2>\tools\boot_loader\ibl\src\util\i2cConfig\i2cConfig.gel
  Run the i2cparam_c661x_le.out program
  Run the EVM c6678 IBL -> setConfig_c6678_main GEL script
  Press "Enter"
  ===Program states that the I2C table write completed


Is it necessary ?
If yes, how to load a gel file with CCV5 : only when associated with core on target configuration ?

Other question : Where "tools\boot_loader\ibl\src\make\bin\i2cConfig.gel" is it taken into account ? by the make evm_c6678_i2c CTRL or somewhere else ?

Any other idea to solve my problem ?

  • Hi,

    The gel file i2cConfig.gel is needed to change the IBL boot params table stored in EEPROM 0x51 address directory and it works along with i2cparam_c661x_le.out executable. The idea is param table can be changed to the settings as per the gel file settings by executing i2cparam_c661x_le.out program.

    You can refer to "Loading and Setting up the EVM with the Gel file" section of the BIOS MCSDK user guide which describes an example gel file to load on to the EVM . http://processors.wiki.ti.com/index.php/BIOS_MCSDK_2.0_Getting_Started_Guide#Use_JTAG_to_Load_the_Application . Similar method can be used to load the i2cConfig.gel file  located under "tools\boot_loader\ibl\src\make\bin\i2cConfig.gel".

    -Thanks,

    Aravind

  • Hi,

    finally, I have succeed more easily to change the configuration of the IBL by changing the /ibl/src/util/iblconfig/src/device.c file and compiling the IBL, flashing the EEPROM.
    => No need of the gel file, one less operation with CCV5.

    But I didn't succeed to boot from NAND the Hello world example.


    I have added traces with "uart_write_string (...)" calls on the iblmain.c and dload.c file:
    => I go to the iblBootElf(...) function from elfwrap.c
    => I go to the DLOAD_load(...) function from dload.c
    => but the (!dload_headers(fd, dyn_module)) returns FALSE.

    => I suppose that THE HELLO WORLD flashing in the NAND FLASH is not at the right place or not at the right format  ?
    I have followed the example : 
    - Copying the .out into app.bin.
    - loading the file on 0x80000000 DDR2 memory adresse.

    As the .map file of the Hello world example give the memory for the program to be 0x0082000 :


      OUTPUT FILE NAME:   <../bin/i2cnandboot_evm6678l.out>
      ENTRY POINT SYMBOL: "_c_int00"  address: 0086cda0


      MEMORY CONFIGURATION

         name            origin    length      used     unused   attr    fill
      ----------------------  --------  ---------  --------  --------  ----  --------
        L2SRAM                00820000   000e0000  000573b6  00088c4a  RW X
        L1PSRAM               00e00000   00007fff  00000000  00007fff  RW X
        L1DSRAM               00f00000   00007fff  00000000  00007fff  RW X
        MSMCSRAM              0c000000   00200000  00000000  00200000  RW X
        DDR3                  80000000   10000000  00000000  10000000  RW X


    , I put this value in the nand_writer_input.txt file :

     file_name  = app.bin
     start_addr = 8519680

    The Nand Writer help file refers to a start_addr 16384. What is the right value ?

    Does somebody really try this example with the EVM 6678 ?

  • Hi,

    After a rough effort to make a code composer project of the Boot program, I finally find the trouble : It was a confusion with the start adress in the nandwriter_input.txt.

    => The start adress must be 0x4000 (It is 0x000 for NOR  writer).

  • Hi,

    Good to hear that your problem is resolved.

    regarding the change of i2cparams there are multiple ways.

    1. change the device.c source file itself and rebuild IBL (like you did here, you need to have the IBL build environment).

    2. Use the i2cConfig.gel along with a DSP executable (Advantage is you don't need IBL build environment and the change happens in the target itself).

    3. We would be providing a configuration tool which would change the configuration parameters of the ibl image (either released/rebuilt). Later you can use the program_evm script to flash the image to eeprom 0x51. (Currently release 2.0.5 has an issue, where this tool is not prebuilt).

    -Aravind

  • Hello GAUTHIER Jean-Michel,

    I was trying to work the same in windows environment. I have provided the screen shot of the output here.

    My boot switch are 

    Switch   1   2   3   4   

    sw3      off off on off

    sw4       off off on on        (if i change this setting to  on off on on, as provided in the readme.txt, then no output).

    sw5       on on on off 

    sw6       on on on on

    Since you have already tried this and succeed, kindly provide me with some inputs.