mirror of
https://github.com/cesanta/mongoose
synced 2026-08-25 22:26:06 -04:00
Merge pull request #3662 from cesanta/flash-unlock
Flash unlock validation on STM32
This commit is contained in:
commit
84553d06a0
4 changed files with 34 additions and 36 deletions
35
mongoose.c
35
mongoose.c
|
|
@ -12435,11 +12435,9 @@ MG_IRAM static int is_dualbank(void) {
|
|||
}
|
||||
|
||||
MG_IRAM static void flash_unlock(void) {
|
||||
static bool unlocked = false;
|
||||
if (unlocked == false) {
|
||||
if (MG_REG(MG_FLASH_BASE + MG_FLASH_CR) & MG_BIT(31)) {
|
||||
MG_REG(MG_FLASH_BASE + MG_FLASH_KEYR) = 0x45670123;
|
||||
MG_REG(MG_FLASH_BASE + MG_FLASH_KEYR) = 0xcdef89ab;
|
||||
unlocked = true;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -12686,13 +12684,14 @@ static uint32_t sectors_per_bank(void) {
|
|||
}
|
||||
|
||||
static void flash_unlock(void) {
|
||||
static bool unlocked = false;
|
||||
if (unlocked == false) {
|
||||
if (MG_REG(FLASH_NSCR) & MG_BIT(0)) {
|
||||
MG_REG(FLASH_KEYR) = 0x45670123;
|
||||
MG_REG(FLASH_KEYR) = 0Xcdef89ab;
|
||||
MG_REG(FLASH_KEYR) = 0xcdef89ab;
|
||||
}
|
||||
|
||||
if (MG_REG(FLASH_OPTCR) & MG_BIT(0)) {
|
||||
MG_REG(FLASH_OPTKEYR) = 0x08192a3b;
|
||||
MG_REG(FLASH_OPTKEYR) = 0x4c5d6e7f;
|
||||
unlocked = true;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -12872,17 +12871,17 @@ MG_IRAM static bool is_dualbank(void) {
|
|||
}
|
||||
|
||||
MG_IRAM static void flash_unlock(void) {
|
||||
static bool unlocked = false;
|
||||
if (unlocked == false) {
|
||||
MG_REG(FLASH_BASE1 + FLASH_KEYR) = 0x45670123;
|
||||
MG_REG(FLASH_BASE1 + FLASH_KEYR) = 0xcdef89ab;
|
||||
if (is_dualbank()) {
|
||||
MG_REG(FLASH_BASE2 + FLASH_KEYR) = 0x45670123;
|
||||
MG_REG(FLASH_BASE2 + FLASH_KEYR) = 0xcdef89ab;
|
||||
}
|
||||
MG_REG(FLASH_BASE1 + FLASH_OPTKEYR) = 0x08192a3b; // opt reg is "shared"
|
||||
MG_REG(FLASH_BASE1 + FLASH_OPTKEYR) = 0x4c5d6e7f; // thus unlock once
|
||||
unlocked = true;
|
||||
if (MG_REG(FLASH_BASE1 + FLASH_CR) & MG_BIT(0)) {
|
||||
MG_REG(FLASH_BASE1 + FLASH_KEYR) = 0x45670123;
|
||||
MG_REG(FLASH_BASE1 + FLASH_KEYR) = 0xcdef89ab;
|
||||
}
|
||||
if (is_dualbank() && MG_REG(FLASH_BASE2 + FLASH_CR) & MG_BIT(0)) {
|
||||
MG_REG(FLASH_BASE2 + FLASH_KEYR) = 0x45670123;
|
||||
MG_REG(FLASH_BASE2 + FLASH_KEYR) = 0xcdef89ab;
|
||||
}
|
||||
if (MG_REG(FLASH_BASE1 + FLASH_OPTCR) & MG_BIT(0)) {
|
||||
MG_REG(FLASH_BASE1 + FLASH_OPTKEYR) = 0x08192a3b; // opt reg is "shared"
|
||||
MG_REG(FLASH_BASE1 + FLASH_OPTKEYR) = 0x4c5d6e7f; // thus unlock once
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -45,11 +45,9 @@ MG_IRAM static int is_dualbank(void) {
|
|||
}
|
||||
|
||||
MG_IRAM static void flash_unlock(void) {
|
||||
static bool unlocked = false;
|
||||
if (unlocked == false) {
|
||||
if (MG_REG(MG_FLASH_BASE + MG_FLASH_CR) & MG_BIT(31)) {
|
||||
MG_REG(MG_FLASH_BASE + MG_FLASH_KEYR) = 0x45670123;
|
||||
MG_REG(MG_FLASH_BASE + MG_FLASH_KEYR) = 0xcdef89ab;
|
||||
unlocked = true;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -39,13 +39,14 @@ static uint32_t sectors_per_bank(void) {
|
|||
}
|
||||
|
||||
static void flash_unlock(void) {
|
||||
static bool unlocked = false;
|
||||
if (unlocked == false) {
|
||||
if (MG_REG(FLASH_NSCR) & MG_BIT(0)) {
|
||||
MG_REG(FLASH_KEYR) = 0x45670123;
|
||||
MG_REG(FLASH_KEYR) = 0Xcdef89ab;
|
||||
MG_REG(FLASH_KEYR) = 0xcdef89ab;
|
||||
}
|
||||
|
||||
if (MG_REG(FLASH_OPTCR) & MG_BIT(0)) {
|
||||
MG_REG(FLASH_OPTKEYR) = 0x08192a3b;
|
||||
MG_REG(FLASH_OPTKEYR) = 0x4c5d6e7f;
|
||||
unlocked = true;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -53,17 +53,17 @@ MG_IRAM static bool is_dualbank(void) {
|
|||
}
|
||||
|
||||
MG_IRAM static void flash_unlock(void) {
|
||||
static bool unlocked = false;
|
||||
if (unlocked == false) {
|
||||
MG_REG(FLASH_BASE1 + FLASH_KEYR) = 0x45670123;
|
||||
MG_REG(FLASH_BASE1 + FLASH_KEYR) = 0xcdef89ab;
|
||||
if (is_dualbank()) {
|
||||
MG_REG(FLASH_BASE2 + FLASH_KEYR) = 0x45670123;
|
||||
MG_REG(FLASH_BASE2 + FLASH_KEYR) = 0xcdef89ab;
|
||||
}
|
||||
MG_REG(FLASH_BASE1 + FLASH_OPTKEYR) = 0x08192a3b; // opt reg is "shared"
|
||||
MG_REG(FLASH_BASE1 + FLASH_OPTKEYR) = 0x4c5d6e7f; // thus unlock once
|
||||
unlocked = true;
|
||||
if (MG_REG(FLASH_BASE1 + FLASH_CR) & MG_BIT(0)) {
|
||||
MG_REG(FLASH_BASE1 + FLASH_KEYR) = 0x45670123;
|
||||
MG_REG(FLASH_BASE1 + FLASH_KEYR) = 0xcdef89ab;
|
||||
}
|
||||
if (is_dualbank() && MG_REG(FLASH_BASE2 + FLASH_CR) & MG_BIT(0)) {
|
||||
MG_REG(FLASH_BASE2 + FLASH_KEYR) = 0x45670123;
|
||||
MG_REG(FLASH_BASE2 + FLASH_KEYR) = 0xcdef89ab;
|
||||
}
|
||||
if (MG_REG(FLASH_BASE1 + FLASH_OPTCR) & MG_BIT(0)) {
|
||||
MG_REG(FLASH_BASE1 + FLASH_OPTKEYR) = 0x08192a3b; // opt reg is "shared"
|
||||
MG_REG(FLASH_BASE1 + FLASH_OPTKEYR) = 0x4c5d6e7f; // thus unlock once
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue