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.

Select IBL NAND boot image error

Hi.

We use the IBL NAND boot options in TMDSEVM6678L board.


Place the two written in NAND applications, there is a problem in attempting to use by selecting according to the boot option.
Boot option IBL NAND boot on image 0 is normal, IBL NAND boot on image 1 does not execute the application
In iblNandBoot function it does not execute a jump to the address written on the NAND. (In the IBL NAND boot on image 1)

Is there anything in addition to selecting the boot mode you need more? Advice please.

  • Please make sure that you were written the correct OFFSET address for image 1.
    Have you rebuild the IBL code or just configured to ELF mode via i2cconfig gel ?

    You can try to rebuild the IBL with required configurations for both NAND images.
    C:\ti\mcsdk_2_01_02_06\tools\boot_loader - Copy\ibl\src\util\iblConfig\src\device.c

    ibl.bootModes[1].u.nandBoot.bootFormat = ibl_BOOT_FORMAT_BBLOB;
    ibl.bootModes[1].u.nandBoot.bootAddress[0][0] = 0x4000; /* Image 0 NAND offset address (block 1) in LE mode */
    ibl.bootModes[1].u.nandBoot.bootAddress[0][1] = 0x2000000; /* Image 1 NAND offset address (block 2048) in LE mode */
    ibl.bootModes[1].u.nandBoot.bootAddress[1][0] = 0x4000; /* Image 0 NAND offset address (block 1) in BE mode */
    ibl.bootModes[1].u.nandBoot.bootAddress[1][1] = 0x2000000; /* Image 1 NAND offset address (block 2048) in BE mode */
    ibl.bootModes[1].u.nandBoot.interface = ibl_PMEM_IF_CHIPSEL_2;

    ibl.bootModes[1].u.nandBoot.blob[0][0].startAddress = 0x80000000; /* Image 0 load start address in LE mode */
    ibl.bootModes[1].u.nandBoot.blob[0][0].sizeBytes = 0xFFC000; /* Image 0 size in LE mode */
    ibl.bootModes[1].u.nandBoot.blob[0][0].branchAddress = 0x80000000; /* Image 0 branch address after loading in LE mode */
    ibl.bootModes[1].u.nandBoot.blob[0][1].startAddress = 0x80000000; /* Image 1 load start address in LE mode */
    ibl.bootModes[1].u.nandBoot.blob[0][1].sizeBytes = 0xFFC000; /* Image 1 size in LE mode */
    ibl.bootModes[1].u.nandBoot.blob[0][1].branchAddress = 0x80000000; /* Image 1 branch address after loading in LE mode */
    ibl.bootModes[1].u.nandBoot.blob[1][0].startAddress = 0x80000000; /* Image 0 load start address in BE mode */
    ibl.bootModes[1].u.nandBoot.blob[1][0].sizeBytes = 0xFFC000; /* Image 0 size in BE mode */
    ibl.bootModes[1].u.nandBoot.blob[1][0].branchAddress = 0x80000000; /* Image 0 branch address after loading in BE mode */
    ibl.bootModes[1].u.nandBoot.blob[1][1].startAddress = 0x80000000; /* Image 1 load start address in BE mode */
    ibl.bootModes[1].u.nandBoot.blob[1][1].sizeBytes = 0xFFC000; /* Image 1 size in BE mode */
    ibl.bootModes[1].u.nandBoot.blob[1][1].branchAddress = 0x80000000; /* Image 1 branch address after loading in BE mode */


    Please refer to the following e2e posts.
    e2e.ti.com/.../913995
    e2e.ti.com/.../942701
  • Thank you for your reply!

    TMDSEVM6678L works NAND boot image 0, but not work NAND boot image 1 (Only IBL NAND image 1)


    I used MCSDK 2.1.2.6. Modified contents is :ibl.bootModes[1].u.nandBoot.bootFormat = ibl_BOOT_FORMAT_ELF;" for NAND boot.

    The remaining details are as same above contents. (IBL configuration table data)

    TMDSEVM66786678L ver is 3B.  Beta 1 is maybe not? (Not support in Beta-1 release.)

    IBL version: 1.0.0.16

    I used "Nand writer" and "HUA demo", but same both result that not jump readed address.to nand. (  In iblNandBoot()  )

    So modify IBL configuration table test follow

    >> Image 0 and Image 1 address exchange test.

        ibl.bootModes[1].u.nandBoot.bootAddress[0][0]   = 0x2000000;      /* Image 1 NAND offset address (block 2048) in LE mode */     << Not execute area
        ibl.bootModes[1].u.nandBoot.bootAddress[0][1]   = 0x4000;         /* Image 0 NAND offset address (block 1) in LE mode */              

    Test result is "Not execute area" symbol address is don't run ....  (0x2000000), IBL nand boot on image 0 is don't running, IBL nand boot on image 1 is running.

    (Address test is don't running ... 0x2000000, 0x1000000, 0x3000000 ... Only read ELF format information, jump fail  

    One application is running address 0x4000, but 0x2000000 address is not running.

    //***************************************************************************

    void iblNandBoot (int32 eIdx)
    {
        Uint32 entry;
        Int32  ret;
        void   (*exit)();

        /* Perform any device specific configurations */
     if (deviceConfigureForNand() < 0){
            return;
     }

        /* Open the nand driver */
     if ((*nand_boot_module.open) ((void *)&ibl.bootModes[eIdx].u.nandBoot, NULL)){
            return;
     }

        entry = iblBoot (&nand_boot_module, ibl.bootModes[eIdx].u.nandBoot.bootFormat, &ibl.bootModes[eIdx].u.nandBoot.blob[iblEndianIdx][iblImageIdx]);
        (*nand_boot_module.close)();

        if (entry != 0)  {                                                                   <<<  Entry information address is verify (writted image file information), but Not execute
            iblStatus.exitAddress = entry;
      exit = (void (*)())entry;
            (*exit)();
               
        }
     
    }

    What check more item??

    MCSDK user guide document content... "NAND boot supports multiple images booting1" ->  "1. Not supported in Beta-1 release"   

    My TMDSEVM6678L boared version is 3b.

  • Hi,

     

    >> Image 0 and Image 1 address exchange test.

        ibl.bootModes[1].u.nandBoot.bootAddress[0][0]   = 0x2000000;      /* Image 1 NAND offset address (block 2048) in LE mode */     << Not execute area
        ibl.bootModes[1].u.nandBoot.bootAddress[0][1]   = 0x4000;         /* Image 0 NAND offset address (block 1) in LE mode */              

    Test result is "Not execute area" symbol address is don't run ....  (0x2000000), IBL nand boot on image 0 is don't running, IBL nand boot on image 1 is running.

    Not sure what are you doing or exchange test mean. If you would like to boot from Image1, write the image at 0x2000000 using nandwriter. Then set the boot mode dip settings to boot from image1 "IBL NAND boot on image 1".

    Thank you.

  •  Hi!~~

    As above used nandwriter to flash NAND for nand boot image 1.

    NAND writer setting is write start_addr = 33554432(nand 2048 block) and file_name  = app.bin. ("nand_writer_input.txt").

    HUA demo of MCSDK confirm write data and block location, Header information read into IBL.( nand 2048 block)

    Reason for the test as above, dip switch confirm and address test.etc

    I also do not understand. Whether there is an item you need more confirmation? I wonder whether a mistake?

    //----------------------------------------------------------------------------------------------------

    I solved the problem that EVM board is bad.  @.@

    Other EVM board is execute nand image 0 and 1.

    It is hard.... The problem I find....    same version EVM, One board 9 block bad block.

    thandk you.   Have a nice weekend!~~

  • We are glad that you have solved the issue. We never had such issues in the past. Thank you.