- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hello All,
I have spent days looking into the issue. So I have a custom bootloader which checks for integrity of application and jumps there.
However everytime I execute jump routine it causes hard fault.
Can you please look into below code and guide me to what I am missing:
1. Boot linker file snippet:
MEMORY
{
int_flash : ORIGIN = 0x00400000, LENGTH = 0x0010000 /* 4096K - 176K (sBAF + HSE)*/
int_itcm : ORIGIN = 0x00000000, LENGTH = 0x00010000 /* 32K */
int_dtcm : ORIGIN = 0x20000000, LENGTH = 0x00020000 /* 64K */
int_sram : ORIGIN = 0x20400000, LENGTH = 0x0002DF00 /* 183.9K */
int_sram_fls_rsv : ORIGIN = 0x2042DF00, LENGTH = 0x00000100 /* 0.1K */
int_sram_stack_c0 : ORIGIN = 0x2042E000, LENGTH = 0x00001000 /* 4KB */
int_sram_stack_c1 : ORIGIN = 0x2042F000, LENGTH = 0x00001000 /* 4KB */
int_sram_no_cacheable : ORIGIN = 0x20430000, LENGTH = 0x0000FF00 /* 64KB, needs to include int_results */
int_sram_results : ORIGIN = 0x2043FF00, LENGTH = 0x00000100
int_sram_shareable : ORIGIN = 0x20440000, LENGTH = 0x00004000 /* 16KB */
ram_rsvd2 : ORIGIN = 0x20444000, LENGTH = 0 /* End of SRAM */
}
2. Application Linker file snippet:
MEMORY
{
int_flash : ORIGIN = 0x00410400, LENGTH = 0x0007FC00 /* 511K - 176K (sBAF + HSE)*/
int_itcm : ORIGIN = 0x00000000, LENGTH = 0x00010000 /* 32K */
int_dtcm : ORIGIN = 0x20000000, LENGTH = 0x00020000 /* 64K */
int_sram : ORIGIN = 0x20400000, LENGTH = 0x0002DF00 /* 183.9K */
int_sram_fls_rsv : ORIGIN = 0x2042DF00, LENGTH = 0x00000100 /* 0.1K */
int_sram_stack_c0 : ORIGIN = 0x2042E000, LENGTH = 0x00001000 /* 4KB */
int_sram_stack_c1 : ORIGIN = 0x2042F000, LENGTH = 0x00001000 /* 4KB */
int_sram_no_cacheable : ORIGIN = 0x20430000, LENGTH = 0x0000FF00 /* 64KB, needs to include int_results */
int_sram_results : ORIGIN = 0x2043FF00, LENGTH = 0x00000100
int_sram_shareable : ORIGIN = 0x20440000, LENGTH = 0x00004000 /* 16KB */
ram_rsvd2 : ORIGIN = 0x20444000, LENGTH = 0 /* End of SRAM */
}
3. Jump to application routine
void startApplication(unsigned long app_link_location)
{
S32_SCB->VTOR=(uint32_t)(app_link_location);
AppAddr resetHandle = (AppAddr)(app_link_location+4);
}
4. Calling:
startApplication(0x00411400U);
Thanks for reading.
Solved! Go to Solution.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Sorry for the delayed response... There was GPT interrupt which was enabled in bootloader and whilst jumping to application I was getting hard fault as interrupt wasn't serviced.
So disabling interrupt before jumping worked.


- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi Hemant,
I deleted my previous post, it seems you are referring to interrupt vector table, not to boot header address.
If you step the asm code, where does it crash exactly? Which instruction?
Regards,
Lukas
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Sorry for the delayed response... There was GPT interrupt which was enabled in bootloader and whilst jumping to application I was getting hard fault as interrupt wasn't serviced.
So disabling interrupt before jumping worked.
