S32K34 jumping from bootloader to application causes hard fault.

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

S32K34 jumping from bootloader to application causes hard fault.

Jump to solution
1,015 Views
HemantKapoor
Contributor II

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.

0 Kudos
1 Solution
978 Views
HemantKapoor
Contributor II

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.

View solution in original post

0 Kudos
2 Replies
987 Views
lukaszadrapa
NXP TechSupport
NXP TechSupport

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

0 Kudos
979 Views
HemantKapoor
Contributor II

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.

0 Kudos