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);
|
bool mscCheckButton(void);
|
||||||
void mscWaitForButton(void);
|
void mscWaitForButton(void);
|
||||||
void systemResetToMsc(int timezoneOffsetMinutes);
|
void systemResetToMsc(int timezoneOffsetMinutes);
|
||||||
|
void systemResetFromMsc(void);
|
||||||
|
|
|
@ -152,9 +152,7 @@ void mscWaitForButton(void)
|
||||||
while (true) {
|
while (true) {
|
||||||
asm("NOP");
|
asm("NOP");
|
||||||
if (mscCheckButton()) {
|
if (mscCheckButton()) {
|
||||||
*((uint32_t *)0x2001FFF0) = 0xFFFFFFFF;
|
systemResetFromMsc();
|
||||||
delay(1);
|
|
||||||
NVIC_SystemReset();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -173,4 +171,13 @@ void systemResetToMsc(int timezoneOffsetMinutes)
|
||||||
#endif
|
#endif
|
||||||
NVIC_SystemReset();
|
NVIC_SystemReset();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void systemResetFromMsc(void)
|
||||||
|
{
|
||||||
|
*((uint32_t *)0x2001FFF0) = 0xFFFFFFFF;
|
||||||
|
delay(1);
|
||||||
|
__disable_irq();
|
||||||
|
NVIC_SystemReset();
|
||||||
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -157,9 +157,7 @@ void mscWaitForButton(void)
|
||||||
while (true) {
|
while (true) {
|
||||||
asm("NOP");
|
asm("NOP");
|
||||||
if (mscCheckButton()) {
|
if (mscCheckButton()) {
|
||||||
*((uint32_t *)0x2001FFF0) = 0xFFFFFFFF;
|
systemResetFromMsc();
|
||||||
delay(1);
|
|
||||||
NVIC_SystemReset();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -178,4 +176,13 @@ void systemResetToMsc(int timezoneOffsetMinutes)
|
||||||
#endif
|
#endif
|
||||||
NVIC_SystemReset();
|
NVIC_SystemReset();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void systemResetFromMsc(void)
|
||||||
|
{
|
||||||
|
*((__IO uint32_t*) BKPSRAM_BASE + 16) = 0xFFFFFFFF;
|
||||||
|
delay(1);
|
||||||
|
__disable_irq();
|
||||||
|
NVIC_SystemReset();
|
||||||
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -447,7 +447,7 @@ void init(void)
|
||||||
if (mscStart() == 0) {
|
if (mscStart() == 0) {
|
||||||
mscWaitForButton();
|
mscWaitForButton();
|
||||||
} else {
|
} else {
|
||||||
NVIC_SystemReset();
|
systemResetFromMsc();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue