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.

TM4C1294 ethernet Bootloader cannot send the bootp

Other Parts Discussed in Thread: TM4C1294KCPDT

Now i have custom board using tm4c1294kcpdt. I compiled the C:\ti\TivaWare_C_Series-2.1.3.156\examples\boards\dk-tm4c129x\boot_emac_flash\ code for ethernet bootloader. After Recv the magic pkt from LMFlash Program, my APP enter this line :

void SoftwareUpdateBegin(uint32_t ui32SysClock)
{
    //
    // Disable all processor interrupts.  Instead of disabling them
    // one at a time (and possibly missing an interrupt if new sources
    // are added), a direct write to NVIC is done to disable all
    // peripheral interrupts.
    //
    HWREG(NVIC_DIS0) = 0xffffffffU;
    HWREG(NVIC_DIS1) = 0xffffffffU;
    HWREG(NVIC_DIS2) = 0xffffffffU;
    HWREG(NVIC_DIS3) = 0xffffffffU;
    HWREG(NVIC_DIS4) = 0xffffffffU;

    //
    // Also disable the SysTick interrupt.
    //
    SysTickIntDisable();
    SysTickDisable();

    //
    // Return control to the boot loader.  This is a call to the SVC
    // handler in the flashed-based boot loader, or to the ROM if configured.
    //
#if ((defined ROM_UpdateEMAC) && !(defined USE_FLASH_BOOT_LOADER))
    ROM_UpdateEMAC(ui32SysClock);
#else
    (*((void (*)(void))(*(uint32_t *)0x2c)))();
#endif
}

then enter the bootloader, I check the code excute the Boopt send function by led in bootloader, but I cannot find any BOOTP in wireshark.

if i inserted the uart init code as following:

void
UpdateBOOTP(void)
{
    //
    // Get the size of flash.
    //
    g_ui32FlashEnd =  ROM_SysCtlFlashSizeGet();
#ifdef FLASH_RSVD_SPACE
    g_ui32FlashEnd -= FLASH_RSVD_SPACE;
#endif

    ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD);
    ROM_GPIOPinTypeGPIOOutput(GPIO_PORTD_BASE, GPIO_PIN_0);
    FeedWatchDog();
#if 1
    ROM_GPIOPinConfigure(GPIO_PP0_U6RX);
    ROM_GPIOPinConfigure(GPIO_PP1_U6TX);
    ROM_GPIOPinTypeUART(GPIO_PORTP_BASE, GPIO_PIN_0 | GPIO_PIN_1);
    UARTStdioConfig(6, 115200, 120000000);

    //UARTprintf("<< UART print configured Enabled >>\n");
#endif
    //
    // Perform the common Ethernet configuration. The frequency should
    // match whatever the application sets the system clock.
    //
    EnetReconfig(120000000);
    FeedWatchDog();
    //
    // Main Application Loop.
    //
    while(1)
    {
        uint32_t ui32Temp;

        //
        // See if there is a packet waiting to be read.
        //
        if(!(g_psRxDescriptor[g_ui32RxDescIndex].ui32CtrlStatus &
             DES0_RX_CTRL_OWN))
        {
            //
            // Read the packet from the Ethernet controller.
            //
            uip_len = PacketReceive(uip_buf, UIP_CONF_BUFFER_SIZE);

the BOOTP came in, why this happened. So confusing.

UART6   for message send;

PortD pin0 for GPIO watch dog;

PortF pin0 and 4 for ethernet led.

the code is the same as C:\ti\TivaWare_C_Series-2.1.3.156\examples\boards\dk-tm4c129x\boot_emac_flash\.

boot_emac_flash.rar

  • Hello user4461578

    I have asked the expert on ethernet to help you out
  • Hello,

    user4461578 said:
    then enter the bootloader, I check the code excute the Boopt send function by led in bootloader, but I cannot find any BOOTP in wireshark.

    I am able to see the BOOTP packets on wireshark. Look at the image below. This screenshot shows packets from the bootloader completing the firmware update (at the top of the screenshot, with TFTP packets) to the application getting an IP address (in the middle with ARP and DHCP packets) and then the bootloader starting the firmware update (with the BOOTP  and TFTP packets). 

    I have used the bootloader example "./examples/boards/dk-tm4c129x/boot_emac_flash" (same as the one you used) and the app "./examples/boards/dk-tm4c129x/boot_demo_flash" from TivaWare v 2.1.3.156 on a DK-TM4C129X board.

    Thanks,

    Sai

    Update: Looks like your application is based on the TivaWare Example "./examples/boards/dk-tm4c129x/boot_demo_emac_flash" as your code has the function "SoftwareUpdateBegin". The main difference between both the applications is in the way the user triggers Software Update. "boot_demo_flash" uses a touch on the LCD panel and "boot_demo_emac_flash" uses magic packet from "LM Flash programmer". Once the software update is triggered by the user, both the applications will jump to Bootloader, if the default define values are not modified.