ROM_UpdateEthernet problem using LM Flash Programmer



I have problem with ROM_UpdateEthernet as well. I wrote the program followed what you discussed here. configured ethernet controller. get MAC address from flash and set it. Then, disabled all interrupts. However, I tried to LM Flash programmer program flash via ethernet. it always attempt connect. in LM Flash Programmer, I entered clinet MAC address. do I need to enter client ip address? I tried many times. there is only once, I successfully programmed flash. In that case, i entered an IP address. I tried to program the flash again. it never succeed anymore. If it programmed once, it means the program should be fine. there mush be something I did not get it right. Could be the IP address of the board I did not entered correctly? if it is, how can I know the board IP address. I know the board is boardcasting BOOTP at the beginning. 

 

The code I wrote is shown below. 

int main(void) {

unsigned char pucMACArray[6];
unsigned char pucMACAddr2[6];
unsigned long ulUser0, ulUser1;

//
// Configure the Ethernet RX/TX pins
//
ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_ETH);
ROM_SysCtlPeripheralReset(SYSCTL_PERIPH_ETH);


ROM_FlashUserGet(&ulUser0, &ulUser1);
pucMACArray[0] = ((ulUser0 >> 0) & 0xff);
pucMACArray[1] = ((ulUser0 >> 8) & 0xff);
pucMACArray[2] = ((ulUser0 >> 16) & 0xff);
pucMACArray[3] = ((ulUser1 >> 0) & 0xff);
pucMACArray[4] = ((ulUser1 >> 8) & 0xff);
pucMACArray[5] = ((ulUser1 >> 16) & 0xff);

//
// Initialize ethernet clock
//
ROM_EthernetInitExpClk(ETH_BASE, ROM_SysCtlClockGet());

//
// Configure Ethernet peripheral
//
ROM_EthernetConfigSet(ETH_BASE, ETH_CFG_TX_DPLXEN | ETH_CFG_TX_CRCEN | ETH_CFG_TX_PADEN);

//
// Program the MAC address into the Ethernet controller.
//
ROM_EthernetMACAddrSet(ETH_BASE, (unsigned char*) pucMACArray);

//
// Enable Ethernet peripheral
//
ROM_EthernetEnable(ETH_BASE);

//
// Disable Interrupts
//
ROM_SysTickIntDisable();
ROM_SysTickDisable();
HWREG(NVIC_DIS0) = 0xffffffff;
HWREG(NVIC_DIS1) = 0xffffffff;


//
// Return control to the boot loader. This is a call to the SVC
// handler in the boot loader, or to the ROM if available.
//
ROM_UpdateEthernet(ROM_SysCtlClockGet());

return 0;
}

then I monitored using wireshark, it shows following info

No.      Time           Source  Destination          Protocol   Length   Info

223 26.102619000 0.0.0.0  255.255.255.255  BOOTP   342        Boot Request from 00:1a:b6:00:02:81 (TexasIns_00:02:81)

Anyone has idea why it is always attempting to connect. it did connect and program once and only once.

Please helps

Thanks in advance

  • 做了一个简单的程序,只是设置ethernet controller,然后disable中断,之后调用ROM_UpdateEthernet();这个简单的程序运行后,连上LM Flash Programmer,可以对其进行将.bin文件烧到芯片里。

    然后将这段代码用到另一个项目里。这个project用了TI RTOS 1.01.00.25, bios is 6.34.04.22, NDK。这个project执行多任务,其中一个任务查看是不是需要更新新版本的firmware。我将那段成功更新firmware的程序复制到这个任务中。LM flash programmer开始烧bin文件。可是每次都是不能成功烧完,就停止了,似乎被打断了。我觉得有可能是RTOS打断的。不知道有什么办法可以防止程序烧的过程中被打断?

    我试了一个BIOS_exit(1), 并且讲firmwareUpdate()函数捆绑到System_atexit()中。然后在check要不要更新firmware版本的任务里,直接调用BIOS_exit(1). program counter再执行了BIOS_eixt(1)之后跳到firmwareUpdate()函数。也就是说,应该从RTOS跳出来了。也就是说这时候如果进行LM Program的话,应该不会被打断。但是程序执行了ROM_UpdateEthernet()之后,LM Flash Programmer一直都无法连接上板子。我用wireshark去监控network的情况,发现板子没有发出BOOTP request。然后我将之前那个成功的project中的ethernet设置函数拷贝过来。还是无法发送BOOTP。无法和LM Flash Programmer进行传输。

    希望各位有经验的大侠,给我一些指导。不胜感激


  • 真的希望能得到一些建议。我试了各种办法,BIOS_exit, disable别的task,从新设置ethernet controller,但是没有一个成功的,甚至连LM都不能programming。

    目前来看,最好的就是从task里调用ROM_UpdateEthernet()了,至少LM可以接收到BOOTP,开始programming,我也disable掉中断了,可是programming总是在途中被切断,我想会不会是ethernet 被切断了。我用的RTOS和NDK,我不知道ethernet controller是RTOS设置的还是NDK设置的。我想可能再LM开始programming的时候,ethernet 口出现问题了。

    真的能希望看到的人给一点点提示,哪怕告诉我我说的不够明白,我至少知道该怎么去入手。已经好几天了。

    再次感谢各位用过stellaris的大侠。这个芯片已经停产了,所以TI的工作人员也放弃论坛的帖子了吗