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.

RTOS/AM4376: MLO debug for custom board boot

Part Number: AM4376

Tool/software: TI-RTOS

Hello,

I am trying to boot a custom board with a SD card but it is not working. Therefore I stepped the code. The execution is going well untill a loop in the function BOARDGetDeviceCtrlModInstNum(...) (board.c) ==>

The next step is going at the adress 0x00030010 and after a few more steps the execution gets stuck at 0x0003008c. I can't find why.

The file that I am debugging is : bootloader_boot_mmcsd_a9host_debug.bin (Which I renamed MLO for the sd card and loaded at the address 0x402f4000)

Does someone have an idea on how to solve this problem ?

I am using :

CCS 8.3

sdk rtos 5.03.00.07

regards, Gilles.

  • Gilles,

    Can you please indicate if you have ported the board library to your custom platform. We typically recommend comparing your custom board design with TI evaluation platform identify similarity and major differences and update board library and GEL files prior to boot loader porting.

    Board library is the only component in the software stack where we have consolidated majority of the board initialization and SOC initialization functions. The process of porting the board library is explained here:

    http://software-dl.ti.com/processor-sdk-rtos/esd/docs/latest/rtos/index_board.html#custom-board-addition

    Please pay close attention to TI board ID detect mechanism and IO configuration steps and make sure that you have made the corresponding updates. BAsed on the screenshot and the symptoms, it appears that your custom board doesn`t contain a EEPROM with boardID programmed which probably causes the boot code to not find instance information. (your BoardData structure is 0x0 or NULL).

    Hope this helps.

    Regards,

    Rahul 

     

  • Hello Rahul,

    Thank you for your answer.

    Our board is inspired by the IDK AM437x. Hence, I updated the IDK AM437x library with the configurations of our board (pinmux + PRCM). The GEL files were also updated and validated.

    Indeed, our board doesn't have any EEPROM with a BoardID programmed inside. In that case, the documentation states that I should remove the code coresponding to the Board_getIDInfo() API. What does that mean exactly ? I tried to comment out the definition of Board_getIDInfo() located in idkAM437x_info.c (then I rebuilt the libraries + bootloader and loaded on a SD card) but I didn't see any changes in the execution. What else could I do ?

    Also, in board_cfg.h there are some lines that define what is related to this EEPROM. Should I also remove those lines ?

    Thank you in advance,

    regards, Gilles

  • Gilles,

    Please look at the board_am437x.c and board_am437x.h where the board detect mechanism is built into the bootloader mechanism

    pdk_am437x_1_0_10\packages\ti\starterware\board\am43xx

    The bootloader finds the board related information by reading BoardID From EEPROM and then locating the configuration structure using the following structure  gpBoardAm43xxData [BOARD_MAX + 1U]

    Since you don`t have a EEPROM, I am guessing that the BOardID might be NULL (first entry in the structure). Instead of removing the BoardID one, you can remove the read of BoardID from EEPROM and Hard code the value to IDKAM437x configuration since your board is similar to that board. This can be done from SBL from sbl_am437xx_platform.c in the function SBLPlatformConfig.c

    Regards,

    Rahul

  • Hello Rahul,

    Thank you once again for your answer.

    I tried to do what you recommended but the execution was never going through the function : SblPlatformConfig() (from sbl_am43xx_platform.c) so I did the same thing (i.e : removing the read and forcing BoardId to BOARD_IDKEVM) in the function BoardGetIdAm43xx() (from board_am43xx.c) and it worked.

    Thank you very much, it helped a lot.

    Regards, Gilles.