cancel
Showing results for 
Search instead for 
Did you mean: 

Jump to bootloader not working on STM32H7 rev "V". Bug in bootloader?

PMath.4
Senior III

I'm launching the bootloader from within code using previously posted examples. This works fine on "Y" and DFU enumerates as expected. On rev "V" this doesn't work - no enumeration. Has the entry point changed on rev "V" or is this a bug in the bootloader which I believe is a different version in rev "V" and which other threads indicate has issues?

Is there a way of getting the bootloader entry address? SYSCFG.UR3 gives the top 16bits but where is the rest defined?

  uint32_t i=0;
  void (*SysMemBootJump)(void);
 
  /* Set the address of the entry point to bootloader */
     volatile uint32_t BootAddr = 0x1FF09800;
 
  /* Disable all interrupts */
     __disable_irq();
 
  /* Disable Systick timer */
     SysTick->CTRL = 0;
 
  /* Set the clock to the default state */
     HAL_RCC_DeInit();
 
  /* Clear Interrupt Enable Register & Interrupt Pending Register */
     for (i=0;i<5;i++)
     {
	  NVIC->ICER[i]=0xFFFFFFFF;
	  NVIC->ICPR[i]=0xFFFFFFFF;
     }
 
  /* Re-enable all interrupts */
     __enable_irq();
 
  /* Set up the jump to booloader address + 4 */
     SysMemBootJump = (void (*)(void)) (*((uint32_t *) ((BootAddr + 4))));
 
  /* Set the main stack pointer to the bootloader stack */
     __set_MSP(*(uint32_t *)BootAddr);
 
  /* Call the function to jump to bootloader location */
     SysMemBootJump();
 
  /* Jump is done successfully */
     while (1)
     {
      /* Code should never reach this loop */
     }

0 REPLIES 0