Fix boot loop if mass storage mode init fails
The logic already performed a reboot if mass storage init failed, but it never reset the boot vector value so it continued to contain the `MSC_MAGIC` value leading to a boot loop. Also fixed fixed the F7 version of `mscWaitForButton()` as it was using the F4 vector.
This commit is contained in:
parent
d3aa5855ce
commit
0ed1fbc609
|
@ -32,3 +32,4 @@ uint8_t mscStart(void);
|
|||
bool mscCheckButton(void);
|
||||
void mscWaitForButton(void);
|
||||
void systemResetToMsc(int timezoneOffsetMinutes);
|
||||
void systemResetFromMsc(void);
|
||||
|
|
|
@ -152,9 +152,7 @@ void mscWaitForButton(void)
|
|||
while (true) {
|
||||
asm("NOP");
|
||||
if (mscCheckButton()) {
|
||||
*((uint32_t *)0x2001FFF0) = 0xFFFFFFFF;
|
||||
delay(1);
|
||||
NVIC_SystemReset();
|
||||
systemResetFromMsc();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -173,4 +171,13 @@ void systemResetToMsc(int timezoneOffsetMinutes)
|
|||
#endif
|
||||
NVIC_SystemReset();
|
||||
}
|
||||
|
||||
void systemResetFromMsc(void)
|
||||
{
|
||||
*((uint32_t *)0x2001FFF0) = 0xFFFFFFFF;
|
||||
delay(1);
|
||||
__disable_irq();
|
||||
NVIC_SystemReset();
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
|
@ -157,9 +157,7 @@ void mscWaitForButton(void)
|
|||
while (true) {
|
||||
asm("NOP");
|
||||
if (mscCheckButton()) {
|
||||
*((uint32_t *)0x2001FFF0) = 0xFFFFFFFF;
|
||||
delay(1);
|
||||
NVIC_SystemReset();
|
||||
systemResetFromMsc();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -178,4 +176,13 @@ void systemResetToMsc(int timezoneOffsetMinutes)
|
|||
#endif
|
||||
NVIC_SystemReset();
|
||||
}
|
||||
|
||||
void systemResetFromMsc(void)
|
||||
{
|
||||
*((__IO uint32_t*) BKPSRAM_BASE + 16) = 0xFFFFFFFF;
|
||||
delay(1);
|
||||
__disable_irq();
|
||||
NVIC_SystemReset();
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
|
@ -447,7 +447,7 @@ void init(void)
|
|||
if (mscStart() == 0) {
|
||||
mscWaitForButton();
|
||||
} else {
|
||||
NVIC_SystemReset();
|
||||
systemResetFromMsc();
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
|
Loading…
Reference in New Issue