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.

TIDEP0032: TIDEP0032

Part Number: TIDEP0032


i'm using the TIDEP0032 application on the evaluation board "TMDXICE3359" in debug mode.

Once the right protocol has been recognized by the main application the instruction "HWREG(0x44E00F00) = 0x2;" is performed [after that the RTC_SCRATCH0_REG register is written with the recpgmoze "Protocol Id"].

When this isctruction is performed the debug session expires and the application reboots. How can i download the recognized stack at the reboot?

Best regards

  • Hi Andrea,

    Thanks for asking the question.

    Please refer to Section 4.3 - Multi-protocol Industrial Ethernet Detect - Function Sequence in the design guide:

    You need to create a "Bootloader" application, which reads out register 0x44E00F00 and interprets its value. Based on this register value, the bootloader can load either an "Protocol specific app" or the "Detection app". Before the Bootloader jumps to the loaded app, it needs to clear the value in register 0x44E00F00.

    Some additional notes:

    1. The register 0x44E00F00 will keeps its content after a cold start (reset) is issued by the ARM. Hence this register is used to exchange data bytes from the "Detection app" to the "Bootloader". This means the "Detection app" can tell the bootloader which protocol has been detected. See bullet 3 for additional bootloader programming.

    2. It is expected that the JTAG debug session looses the connection, because issuing a cold start (reset) is rebooting the ARM. You could work with HW breakpoints in JTAG to stop at specific instructions locations, if you need to debug anything. Or just let the system run, so the bootloader can work as programmed.

    3. The modified bootloader is not part of TIDEP0032. You need to program this yourself based on the bootloader example you have. In principle the modified bootloader needs to read in register 0x44E00F00, decide on its value which application software to load (either one of the IE protocol apps, or the "Detection app"), load the app into memory, clear register 0x44E00F00, and then jump to the memory location to execute the application.

    Let me know if you have further questions.



  • Which is th "bootloader" example i have? Just to understand what to modify for creating my own bootloader...

  • The bootloader comes with the Processor SDK RTOS. Typically it is a pre-compiled image, I think for AM335x it is called MLO when placed onto an SD card. You may recognize the name MLO.

    In the RTOS documentation the bootloader is referred as Secondary Bootloader:

    In my setup (I may have not the latest version) the SBL bootloader is located here: C:\ti\pdk_am335x_1_0_17\packages\ti\starterware\bootloader

    This are the C source code files that you need to add your custom setting to. If you need additional guidance about how to build the bootloader, please submit a new e2e question in the processor forum.



  • Ok thank you so much. I've submitted a new e2e question regarding it

  • Hi Andrea,

    I also dug up some old bootloader snippets from the original demonstrator. Note that this is based on an older bootloader version from 2015, so you will not find the same part in the todays bootloader. However, it will provide you some guidance on the mechanism that we added to the bootloader to load different images based on the content of the memory location 0x44E00F00. The text code snipped in green is what we have added, but the called functions will be most likely not compatible 1:1 in todays bootloader and you need to port it todays environment.

    We placed all the multi-protocol software images on the SD card, and the bootloader did load the correspondence file name. The "app" image was the "Detection App" from TIDEP0032.

    Hope this helps a bit more,


    This is from file: bl_hsmmcsd.c

    enum app_selector
    ETHERCAT = 1,
    PROFINET = 2,
    POWERLINK = 4,
    SERCOS3 = 5

    *\brief This function copies the application image to the DDR by reading the
    * header info.\n
    * \param - none.\n
    * \return E_PASS - on success, E_FAIL on failure.\n
    int HSMMCSDImageCopy(void)
    FRESULT fresult;
    unsigned short usBytesRead = 0;
    unsigned char *destAddr = (unsigned char*)DDR_START_ADDR;
    unsigned char header_read = 0;
    unsigned char buff_indx = 0;
    ti_header temp_header;
    char *fname = "/app";

    /* START : Added for multiprotocol Demo. Based on values in
    * RTC Scratch0, corresponding binary from MMCSD will be
    * executed
    * Scratch0 Values - enum app_selector
    unsigned int app_sel = RTCScratchPadGet(SOC_RTC_0_REGS, 0);

    //if(app_sel == SELECTOR_APP)
    // fname = "/sel_app";
    if(app_sel == ETHERCAT)
    fname = "/ecat_app";
    else if(app_sel == PROFINET)
    fname = "/pn_app";
    else if(app_sel == ETHERNETIP)
    fname = "/eip_app";
    else if(app_sel == POWERLINK)
    fname = "/pl_app";
    else if(app_sel == SERCOS3)
    fname = "/s3_app";

    /* Reset the SCRATCH0 value to default(SELECTOR_APP) */
    RTCScratchPadSet(SOC_RTC_0_REGS, 0, 0);

    ** Open the file for reading.
    fresult = f_open(&g_sFileObject, fname, FA_READ);

  • Hi Thomas,

    thank you so much for your answer.

    My problem is that on the TMDXICE3359 evaluation board i don't have an SD Card, so my question is the following : is it possibile to make what i would like to do with this eval? [starting the bootloader and launching the TIDEP0032 application or the relative stack application as written in the SOC_RTC_0_REGS register]

  • Hi Andrea,

    I am not sure I fully know your evaluation environment and what you would like to evaluate exactly.

    How to you plan to boot in your evaluation? If this is just via JTAG, then I think you can only validate each application (aka "Detection App", industrial Protocol apps) individually to check that they are functioning.