mirror of
https://github.com/betaflight/betaflight.git
synced 2025-07-17 13:25:30 +03:00
Convert F7s to use RTC backup register based persistent memory
This commit is contained in:
parent
99fde1a0ff
commit
c0d51a5f55
8 changed files with 46 additions and 39 deletions
|
@ -29,6 +29,7 @@
|
|||
#include "drivers/exti.h"
|
||||
#include "drivers/nvic.h"
|
||||
#include "drivers/system.h"
|
||||
#include "drivers/persistent.h"
|
||||
|
||||
#include "stm32f7xx_ll_cortex.h"
|
||||
|
||||
|
@ -44,8 +45,7 @@ void systemReset(void)
|
|||
|
||||
void systemResetToBootloader(void)
|
||||
{
|
||||
(*(__IO uint32_t *) (BKPSRAM_BASE + 4)) = 0xDEADBEEF; // flag that will be readable after reboot
|
||||
|
||||
persistentObjectWrite(PERSISTENT_OBJECT_BOOTLOADER_REQUEST, 0xDEADBEEF);
|
||||
__disable_irq();
|
||||
NVIC_SystemReset();
|
||||
}
|
||||
|
@ -154,8 +154,6 @@ bool isMPUSoftReset(void)
|
|||
|
||||
void systemInit(void)
|
||||
{
|
||||
checkForBootLoaderRequest();
|
||||
|
||||
// Mark ITCM-RAM as read-only
|
||||
LL_MPU_ConfigRegion(LL_MPU_REGION_NUMBER0, 0, RAMITCM_BASE, LL_MPU_REGION_SIZE_16KB | LL_MPU_REGION_PRIV_RO_URO);
|
||||
LL_MPU_Enable(LL_MPU_CTRL_PRIVILEGED_DEFAULT);
|
||||
|
@ -188,27 +186,23 @@ void systemInit(void)
|
|||
}
|
||||
|
||||
void(*bootJump)(void);
|
||||
|
||||
void checkForBootLoaderRequest(void)
|
||||
{
|
||||
uint32_t bt;
|
||||
__PWR_CLK_ENABLE();
|
||||
__BKPSRAM_CLK_ENABLE();
|
||||
HAL_PWR_EnableBkUpAccess();
|
||||
uint32_t bootloaderRequest = persistentObjectRead(PERSISTENT_OBJECT_BOOTLOADER_REQUEST);
|
||||
|
||||
bt = (*(__IO uint32_t *) (BKPSRAM_BASE + 4)) ;
|
||||
if ( bt == 0xDEADBEEF ) {
|
||||
(*(__IO uint32_t *) (BKPSRAM_BASE + 4)) = 0xCAFEFEED; // Reset our trigger
|
||||
// Backup SRAM is write-back by default, ensure value actually reaches memory
|
||||
// Another solution would be marking BKPSRAM as write-through in Memory Protection Unit settings
|
||||
SCB_CleanDCache_by_Addr((uint32_t *) (BKPSRAM_BASE + 4), sizeof(uint32_t));
|
||||
persistentObjectWrite(PERSISTENT_OBJECT_BOOTLOADER_REQUEST, 0xCAFEFEED);
|
||||
|
||||
void (*SysMemBootJump)(void);
|
||||
__SYSCFG_CLK_ENABLE();
|
||||
SYSCFG->MEMRMP |= SYSCFG_MEM_BOOT_ADD0 ;
|
||||
uint32_t p = (*((uint32_t *) 0x1ff00000));
|
||||
__set_MSP(p); //Set the main stack pointer to its defualt values
|
||||
SysMemBootJump = (void (*)(void)) (*((uint32_t *) 0x1ff00004)); // Point the PC to the System Memory reset vector (+4)
|
||||
SysMemBootJump();
|
||||
while (1);
|
||||
if (bootloaderRequest != 0xDEADBEEF) {
|
||||
return;
|
||||
}
|
||||
|
||||
void (*SysMemBootJump)(void);
|
||||
__SYSCFG_CLK_ENABLE();
|
||||
SYSCFG->MEMRMP |= SYSCFG_MEM_BOOT_ADD0 ;
|
||||
uint32_t p = (*((uint32_t *) 0x1ff00000));
|
||||
__set_MSP(p); //Set the main stack pointer to its defualt values
|
||||
SysMemBootJump = (void (*)(void)) (*((uint32_t *) 0x1ff00004)); // Point the PC to the System Memory reset vector (+4)
|
||||
SysMemBootJump();
|
||||
while (1);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue