cancel
Showing results for 
Search instead for 
Did you mean: 

CUSTOM BOOTLOADER

Vishwajeet
Visitor

 

ISSUE: STM32F7 Custom Bootloader - Main Application Not Running After Jump
Details:
Bootloader Memory Definition:
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 320K
FLASH (rx) : ORIGIN = 0x8000000, LENGTH = 1024K
QUADSPI (r) : ORIGIN = 0x90000000, LENGTH = 16M
Application Memory Definition:
RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 320K

FLASH (rx) : ORIGIN = 0x8020000, LENGTH = 896K

QUADSPI (r) : ORIGIN = 0x90000000, LENGTH = 16M

Validation Points:
Bootloader erase & write operations are working correctly.
Custom bootloader successfully writes the application code to both internal and external segments.
A test application that prints text ("I am application") works properly after jumping from the bootloader.


Debug points :

1 > memory utilization by main application

 

RAM : ORIGIN = 0x20000000, utilization = 320 K

FLASH : ORIGIN = 0x8020000, utilization = 896 K

QUADSPI : ORIGIN = 0x90000000, utilization = 5.18 M

 

2 > Jump steps after writing application (by custom bootloader)

/*********************************************************************************************
if(gParsePacketData.data[0] == BOOT_STATUS)
{

#define APP_ADDRESS  0x08020000 
typedef void (*pFunction)(void);
pFunction JumpToApplication;
uint32_t JumpAddress;
int Temp = 0 ;
vc_prepare_packet_and_send(&huart6,FEEDBACK_COMMAND,FEEDBACK_SUCCESS,&Temp,sizeof(Temp));


// Disable interrupts
    __disable_irq();

    // Deinitialize peripherals and clocks if needed

    // Set vector table to application address
    SCB->VTOR = APP_ADDRESS;

    // Read the application's stack pointer address
    __set_MSP(*(volatile uint32_t*)APP_ADDRESS);

    // Get the application's reset vector (entry point)
    JumpAddress = *(volatile uint32_t*) (APP_ADDRESS + 4);
    JumpToApplication = (pFunction) JumpAddress;

    // Enable interrupts (optional, the application should handle it)
    __enable_irq();

    // Jump to application
    JumpToApplication();
/**********************************************************************************/

We would be grateful for any guidance or suggestions you can provide.

2 REPLIES 2
Karl Yamashita
Principal
  1. find system_stm32f7xx.c file
  2. Uncomment this define
  3. Change value to your application address

 

KarlYamashita_0-1740554407540.png

 

Don't worry, I won't byte.
TimerCallback tutorial! | UART and DMA Idle tutorial!

If you find my solution useful, please click the Accept as Solution so others see the solution.

Vishwajeet_0-1740554948571.png

Vishwajeet_1-1740554977566.png

Thank you for your valuable reply, but the changes have already been made and tested.