Hi all , I’ve got a problem with Flash Magic Ethernet BootLoader . The original sample for LPC1768 works fine but with a little change I made in the source code of the bootloader program . Here’s the line I added : SCB->VTOR = 0x00002000; in the code below:
void execute_user_code(void) { void (*user_code_entry)(void); SCB->VTOR = 0x00002000; user_code_entry = (void (*)(void))(USER_START_SECTOR_ADDRESS | 0x00000001); user_code_entry(); }
I can load some of my own programs into the microcontroller through ethernet (Via Flash Magic) , But when I load Some others , they don’t work at all . Thanks in advanced
Bootloader Settings :
IROM1 = 0 , SIZE = 0x80000 IROM2 Not Used
IRAM1 Not Used IRAM2 = 0x20082000 , Size = 0x1000
/////////////
Program Settings :
IROM1 = 0x2000 , SIZE = 0x80000 IROM2 Not Used
IRAM1 =0x10000000,size=0x8000 IRAM2 = 0x2007C000 , Size = 0x6000 It seems the problem lies on IRAM1 & IRAM2 Settings or lies on the different initialization settings between the bootloader program and my own programs which are loaded into the microcontroller or lies on SCB->VTOR. I don’t exactly know how to set IRAM1 & IRAM2 in different programs . I just use different places in RAM and don’t know if some places are allocated to something or not or am I free to choose wherever interested or not ?
Isn’t the programs loaded supposed not to dependent on the bootloader program initialization ? For example PLL ,TIMER, UART,… settings are set for some programs and they work perfectly when not using a bootloader . Now the bootloader has some settings for PLL and timer and uart . For uart the first initialization is executed(BootLoader) and now the second is executed(The program loaded) with some changes . If I don’t have the exact same settings as bootloader settings on my program , the uart doesn’t work on the program !
The strange point is why there wasn’t the line I added to the bootloader program (SCB->VTOR = 0x00002000;) ?
any help ?
Thanks in advanced
What does the map file tell you?
Don't you have an vector table at start of the application binary?
That table should contain a pointer to the reset handler.
Thanks ,
I got fed up ……!!!!!! At the end of SystemInit from CMSIS , the SCB->VTOR is configured ,
So the steps are : 1- Before jumping to the user application , I set the SCB->VTOR to 0x00002000 2- At the start of user application(At the start of main) I call SystemInit but with SCB->VTOR set to 0x00002000 (Commented previous settings) Bootloader Settings : IROM1 = 0 , SIZE = 0x2000 IROM2 Not Used IRAM1 0x10007000 , Size = 0x1000 IRAM2 Not Used Program Settings : IROM1 = 0x2000 , SIZE = 0x2000 IROM2 Not Used IRAM1 = 0x10000000 , Size = 0x7000 IRAM2 = 0x2007C000 , Size = 0x8000
Now 99% of the programs are working correctly but still some problems persist In application program when I 1-change Heap Size from 0 to 0x400 , the program doesn’t work 2-check the PLL1 tick at System_LPC17xx , the program doesn’t work 3-comment 1 unimportant line of the function called Calc_Checksum , the program doesn’t work (for test purposes I had added this line to increase or decrease size of the function This is the line : “for (Cnt=0; Cnt<100; Cnt++);”)
I’m nearly sure the problem lies on IRAM1 & IRAM2 settings I tested a USB Bootloader and it’s working perfectly and the strange point is unlike the Ethernet Bootloader , both bootloader and the application have got the same IRAM1 & IRAM2 settings (both IRAM1’s settings is “0x10000000 , 0x8000” and both IRAM2’s setting is “unchecked” )
What could be the problem where 80k code is working and with commenting just 1 line , it’s not working ?
Sorry , above in program settings : IROM1 = 0x2000 , SIZE = 0x7E000