13#ifdef FLASH_OPTCR_nDBANK
15 return (FLASH->OPTCR & FLASH_OPTCR_nDBANK) == 0;
22 return *
reinterpret_cast<const volatile uint16_t*
>(FLASHSIZE_BASE);
40 }
else if (fs == 2048) {
46 criticalError(
"1MB single bank MCU detected: please clear nDBANK option bit and reinstall FW.");
48 }
else if (fs == 2048) {
53 criticalError(
"Unrecognized flash memory layout db=%d, size=%d", db, fs);
75 if (sector > 7 && sector < 12) {
84 return 16 * 1024 * dbMul;
86 return 64 * 1024 * dbMul;
88 return 128 * 1024 * dbMul;
102#ifdef EFI_FLASH_USE_1500_OF_2MB
124#ifdef EFI_FLASH_USE_1500_OF_2MB
132#ifdef EFI_FLASH_USE_1500_OF_2MB
146#define FLASH_ACR (*(volatile uint32_t *)(FLASH_BASE + 0x00))
147#define FLASH_KEYR (*(volatile uint32_t *)(FLASH_BASE + 0x04))
148#define FLASH_OPTKEYR (*(volatile uint32_t *)(FLASH_BASE + 0x08))
149#define FLASH_SR (*(volatile uint32_t *)(FLASH_BASE + 0x0C))
150#define FLASH_CR (*(volatile uint32_t *)(FLASH_BASE + 0x10))
151#define FLASH_OPTCR (*(volatile uint32_t *)(FLASH_BASE + 0x14))
153#define FLASH_OPTCR_STRT (1 << 1)
155#define FLASH_OPTKEY1 (0x08192A3B)
156#define FLASH_OPTKEY2 (0x4C5D6E7F)
179 SCB->SCR |= SCB_SCR_SLEEPDEEP_Msk;
180 PWR->CR1 |= PWR_CR1_PDDS;
181 PWR->CR1 |= PWR_CR1_CSBF;
bool mcuCanFlashWhileRunning()
uintptr_t getFlashAddrSecondCopy()
uintptr_t getFlashAddrFirstCopy()
size_t flashSectorSize(flashsector_t sector)
Get the size of sector.
uint8_t flashsector_t
Index of a sector.
void boardPrepareForStandby()
static uint16_t flashSize()
static DeviceType determineDevice()