S32R274,bootloader jump to app project

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

S32R274,bootloader jump to app project

3,598 Views
chenmin1
Contributor II

I wrote a bootloader for S32R274,it can download app project files to flash, but when I jump to the app, it seems that only Z7 works,Z4_0 does not have any log output。Is there a problem with my method of jumping to the app?who can help me?thanks..

#define APP_StartAddr (*(uint32_t*)0x01000004)
void app_entry(void)
{
UART_Deinit(&uart_pal1_instance);
INT_SYS_DisableIRQGlobal();
(*(void (*)(void))(APP_StartAddr))();

while(1);
}

the flash allocation is as follows:

bootloader linker_flash.ld:

MEMORY
{
flash_rchw : org = 0x00F98000, len = 0x4
cpu0_reset_vec : org = 0x00F98000+0x04, len = 0x4

m_text : org = 0x00F99000, len = 92K
m_data : org = 0x40000000, len = 426K
local_dmem : org = 0x50800000, len = 64K
}

app linker_flash.ld

MEMORY
{

/*Boot flash areas*/
flash_rchw : org = 0x01000000, len = 0x4
cpu0_reset_vec : org = 0x01000004, len = 0x4
/*...it could go all the way up to 0x00FFFFFF*/

/* Flash memory areas for each core */
c0_flash : org = 0x01001000, len = 508K
c1_flash : org = 0x01001000+ LENGTH(c0_flash), len = 512K
c2_flash : org = 0x01001000+ LENGTH(c0_flash)+LENGTH(c1_flash), len = 1K
common_flash : org = 0x01001000+ LENGTH(c0_flash)+LENGTH(c1_flash)+LENGTH(c2_flash), len = 256K

...
}

0 Kudos
Reply
3 Replies

3,474 Views
chenmin1
Contributor II

Found through debugging that the program is stuck at  init_data_bss()  in Startup.c  when copy initialized table。I also found that the Z7 core started unexpectedly,the function to open the z7 core is not executed。

0 Kudos
Reply

3,474 Views
lukaszadrapa
NXP TechSupport
NXP TechSupport

Hi Chen,

I'm used to recommend these two things:

- the best way: use software reset and jump to the application right after reset (using asm code in startup files) before initialization of bootloader's resources.

- completely de-init everything before jump. Most important - disable interrupts on all levels - by MSR[EE], by local enable bits in peripherals, by priority registers. I would also put all used peripherals back to default reset state.

This can save a lot of debugging and headache.

Regards,

Lukas

3,474 Views
chenmin1
Contributor II

Hi Lukas,

    Thank you very much for the solution,my bootloader can now run normally.

Regards,

Chen

0 Kudos
Reply