I´m currently working on a bootloader for Kinetis K64. The reason that we don´t use the Kinetis bootloader is beacuse we nedded to have a custom protocol.
I never done this before so i tought i will make the bootloader in the 4 following steps:
1) Make a simple Hello-World program resident in memory at adress: 0x00C28CB0
2) Debug and start the Hello-World program to make sure it is located at the correct memory adress
3) Make a simple "Hello-World application", to be able to jump between to the Hello-World program.
4) Get the new application and write it into flash.
Im stuck at 2) and 3) since the program always starts up at adress 0x0, not where i put my second vector table for the "Hello World program" It also ends up in Reset_Handler at 0x0 when i try to jump between bootloader and application.
I use different linking files for bootloader and application but the same startup code are used ( See attached files)
When i try to jump from the bootloader to the application i use the following code:
// Test to go to application static void (*JumpToApp)(void) = 0; JumpToApp = (void (*)(void))APP_ADRESS; // Set the VTOR to the application vector table address. SCB->VTOR = (uint32_t)APP_VECTOR_TABLE; // Set stack pointers to the application stack pointer. __set_MSP(APP_STACK_PTR_DEF); __set_PSP(APP_STACK_PTR_DEF); // Jump to the application. JumpToApp();
I use the following defines:
#define APP_ADRESS 0x00C28CB0 #define APP_VECTOR_TABLE APP_ADRESS #define APP_STACK_PTR_DEF APP_ADRESS
Im grateful for help,
Original Attachment has been moved to: K64FN1Mxxx12_flash.ld.zip
Original Attachment has been moved to: K64FN1Mxxx12_flash_bootloader.ld.zip
Original Attachment has been moved to: startup_MK64F12.S.txt.zip