Actually transition to dual bank mode - key was required
This commit is contained in:
parent
efc71e08c4
commit
15636f05f5
@ -71,7 +71,7 @@ mod alt_regions {
|
|||||||
|
|
||||||
impl<'d> Flash<'d> {
|
impl<'d> Flash<'d> {
|
||||||
pub fn into_alt_regions(self) -> AltFlashLayout<'d, Async> {
|
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.
|
// 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.
|
// 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> {
|
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.
|
// 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.
|
// 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))]
|
#[cfg(any(stm32f427, stm32f429, stm32f437, stm32f439, stm32f469, stm32f479))]
|
||||||
pub fn set_default_layout() {
|
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)))]
|
#[cfg(not(any(stm32f427, stm32f429, stm32f437, stm32f439, stm32f469, stm32f479)))]
|
||||||
pub const fn set_default_layout() {}
|
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))]
|
#[cfg(any(stm32f427, stm32f429, stm32f437, stm32f439, stm32f469, stm32f479))]
|
||||||
pub fn get_flash_regions() -> &'static [&'static FlashRegion] {
|
pub fn get_flash_regions() -> &'static [&'static FlashRegion] {
|
||||||
if unsafe { pac::FLASH.optcr().read().db1m() } {
|
if unsafe { pac::FLASH.optcr().read().db1m() } {
|
||||||
@ -207,8 +226,8 @@ pub(crate) unsafe fn lock() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) unsafe fn unlock() {
|
pub(crate) unsafe fn unlock() {
|
||||||
pac::FLASH.keyr().write(|w| w.set_key(0x4567_0123));
|
pac::FLASH.keyr().write(|w| w.set_key(0x45670123));
|
||||||
pac::FLASH.keyr().write(|w| w.set_key(0xCDEF_89AB));
|
pac::FLASH.keyr().write(|w| w.set_key(0xCDEF89AB));
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(feature = "nightly")]
|
#[cfg(feature = "nightly")]
|
||||||
|
Loading…
Reference in New Issue
Block a user