Actually transition to dual bank mode - key was required
This commit is contained in:
parent
e65ff85b88
commit
cd8198037f
1 changed files with 24 additions and 5 deletions
|
@ -71,7 +71,7 @@ mod alt_regions {
|
|||
|
||||
impl<'d> Flash<'d> {
|
||||
pub fn into_alt_regions(self) -> AltFlashLayout<'d, Async> {
|
||||
unsafe { crate::pac::FLASH.optcr().modify(|r| r.set_db1m(true)) };
|
||||
super::set_alt_layout();
|
||||
|
||||
// SAFETY: We never expose the cloned peripheral references, and their instance is not public.
|
||||
// Also, all async flash region operations are protected with a mutex.
|
||||
|
@ -88,7 +88,7 @@ mod alt_regions {
|
|||
}
|
||||
|
||||
pub fn into_alt_blocking_regions(self) -> AltFlashLayout<'d, Blocking> {
|
||||
unsafe { crate::pac::FLASH.optcr().modify(|r| r.set_db1m(true)) };
|
||||
super::set_alt_layout();
|
||||
|
||||
// SAFETY: We never expose the cloned peripheral references, and their instance is not public.
|
||||
// Also, all blocking flash region operations are protected with a cs.
|
||||
|
@ -171,12 +171,31 @@ static WAKER: AtomicWaker = AtomicWaker::new();
|
|||
|
||||
#[cfg(any(stm32f427, stm32f429, stm32f437, stm32f439, stm32f469, stm32f479))]
|
||||
pub fn set_default_layout() {
|
||||
unsafe { crate::pac::FLASH.optcr().modify(|r| r.set_db1m(false)) };
|
||||
unsafe {
|
||||
pac::FLASH.optkeyr().write(|w| w.set_optkey(0x08192A3B));
|
||||
pac::FLASH.optkeyr().write(|w| w.set_optkey(0x4C5D6E7F));
|
||||
pac::FLASH.optcr().modify(|r| {
|
||||
r.set_db1m(false);
|
||||
r.set_optlock(true)
|
||||
});
|
||||
};
|
||||
}
|
||||
|
||||
#[cfg(not(any(stm32f427, stm32f429, stm32f437, stm32f439, stm32f469, stm32f479)))]
|
||||
pub const fn set_default_layout() {}
|
||||
|
||||
#[cfg(any(stm32f427, stm32f429, stm32f437, stm32f439, stm32f469, stm32f479))]
|
||||
fn set_alt_layout() {
|
||||
unsafe {
|
||||
pac::FLASH.optkeyr().write(|w| w.set_optkey(0x08192A3B));
|
||||
pac::FLASH.optkeyr().write(|w| w.set_optkey(0x4C5D6E7F));
|
||||
pac::FLASH.optcr().modify(|r| {
|
||||
r.set_db1m(true);
|
||||
r.set_optlock(true)
|
||||
});
|
||||
};
|
||||
}
|
||||
|
||||
#[cfg(any(stm32f427, stm32f429, stm32f437, stm32f439, stm32f469, stm32f479))]
|
||||
pub fn get_flash_regions() -> &'static [&'static FlashRegion] {
|
||||
if unsafe { pac::FLASH.optcr().read().db1m() } {
|
||||
|
@ -207,8 +226,8 @@ pub(crate) unsafe fn lock() {
|
|||
}
|
||||
|
||||
pub(crate) unsafe fn unlock() {
|
||||
pac::FLASH.keyr().write(|w| w.set_key(0x4567_0123));
|
||||
pac::FLASH.keyr().write(|w| w.set_key(0xCDEF_89AB));
|
||||
pac::FLASH.keyr().write(|w| w.set_key(0x45670123));
|
||||
pac::FLASH.keyr().write(|w| w.set_key(0xCDEF89AB));
|
||||
}
|
||||
|
||||
#[cfg(feature = "nightly")]
|
||||
|
|
Loading…
Reference in a new issue