feat(stm32): Add OTP flash region (again)
This commit is contained in:
parent
8c6fa83006
commit
97ed7f085a
@ -296,6 +296,8 @@ fn main() {
|
|||||||
"Bank1"
|
"Bank1"
|
||||||
} else if region.name.starts_with("BANK_2") {
|
} else if region.name.starts_with("BANK_2") {
|
||||||
"Bank2"
|
"Bank2"
|
||||||
|
} else if region.name == "OTP" {
|
||||||
|
"Otp"
|
||||||
} else {
|
} else {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -15,7 +15,7 @@ mod alt_regions {
|
|||||||
|
|
||||||
use embassy_hal_internal::PeripheralRef;
|
use embassy_hal_internal::PeripheralRef;
|
||||||
|
|
||||||
use crate::_generated::flash_regions::{BANK1_REGION1, BANK1_REGION2, BANK1_REGION3};
|
use crate::_generated::flash_regions::{OTPRegion, BANK1_REGION1, BANK1_REGION2, BANK1_REGION3, OTP_REGION};
|
||||||
use crate::_generated::FLASH_SIZE;
|
use crate::_generated::FLASH_SIZE;
|
||||||
use crate::flash::{asynch, Async, Bank1Region1, Bank1Region2, Blocking, Error, Flash, FlashBank, FlashRegion};
|
use crate::flash::{asynch, Async, Bank1Region1, Bank1Region2, Blocking, Error, Flash, FlashBank, FlashRegion};
|
||||||
use crate::peripherals::FLASH;
|
use crate::peripherals::FLASH;
|
||||||
@ -62,6 +62,7 @@ mod alt_regions {
|
|||||||
pub bank2_region1: AltBank2Region1<'d, MODE>,
|
pub bank2_region1: AltBank2Region1<'d, MODE>,
|
||||||
pub bank2_region2: AltBank2Region2<'d, MODE>,
|
pub bank2_region2: AltBank2Region2<'d, MODE>,
|
||||||
pub bank2_region3: AltBank2Region3<'d, MODE>,
|
pub bank2_region3: AltBank2Region3<'d, MODE>,
|
||||||
|
pub otp_region: OTPRegion<'d, MODE>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'d> Flash<'d> {
|
impl<'d> Flash<'d> {
|
||||||
@ -78,6 +79,7 @@ mod alt_regions {
|
|||||||
bank2_region1: AltBank2Region1(&ALT_BANK2_REGION1, unsafe { p.clone_unchecked() }, PhantomData),
|
bank2_region1: AltBank2Region1(&ALT_BANK2_REGION1, unsafe { p.clone_unchecked() }, PhantomData),
|
||||||
bank2_region2: AltBank2Region2(&ALT_BANK2_REGION2, unsafe { p.clone_unchecked() }, PhantomData),
|
bank2_region2: AltBank2Region2(&ALT_BANK2_REGION2, unsafe { p.clone_unchecked() }, PhantomData),
|
||||||
bank2_region3: AltBank2Region3(&ALT_BANK2_REGION3, unsafe { p.clone_unchecked() }, PhantomData),
|
bank2_region3: AltBank2Region3(&ALT_BANK2_REGION3, unsafe { p.clone_unchecked() }, PhantomData),
|
||||||
|
otp_region: OTPRegion(&OTP_REGION, unsafe { p.clone_unchecked() }, PhantomData),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -94,6 +96,7 @@ mod alt_regions {
|
|||||||
bank2_region1: AltBank2Region1(&ALT_BANK2_REGION1, unsafe { p.clone_unchecked() }, PhantomData),
|
bank2_region1: AltBank2Region1(&ALT_BANK2_REGION1, unsafe { p.clone_unchecked() }, PhantomData),
|
||||||
bank2_region2: AltBank2Region2(&ALT_BANK2_REGION2, unsafe { p.clone_unchecked() }, PhantomData),
|
bank2_region2: AltBank2Region2(&ALT_BANK2_REGION2, unsafe { p.clone_unchecked() }, PhantomData),
|
||||||
bank2_region3: AltBank2Region3(&ALT_BANK2_REGION3, unsafe { p.clone_unchecked() }, PhantomData),
|
bank2_region3: AltBank2Region3(&ALT_BANK2_REGION3, unsafe { p.clone_unchecked() }, PhantomData),
|
||||||
|
otp_region: OTPRegion(&OTP_REGION, unsafe { p.clone_unchecked() }, PhantomData),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -114,6 +114,7 @@ pub(crate) unsafe fn blocking_erase_sector(sector: &FlashSector) -> Result<(), E
|
|||||||
r.set_bksel(match sector.bank {
|
r.set_bksel(match sector.bank {
|
||||||
crate::flash::FlashBank::Bank1 => stm32_metapac::flash::vals::NscrBksel::B_0X0,
|
crate::flash::FlashBank::Bank1 => stm32_metapac::flash::vals::NscrBksel::B_0X0,
|
||||||
crate::flash::FlashBank::Bank2 => stm32_metapac::flash::vals::NscrBksel::B_0X1,
|
crate::flash::FlashBank::Bank2 => stm32_metapac::flash::vals::NscrBksel::B_0X1,
|
||||||
|
_ => unreachable!(),
|
||||||
});
|
});
|
||||||
r.set_snb(sector.index_in_bank);
|
r.set_snb(sector.index_in_bank);
|
||||||
r.set_ser(true);
|
r.set_ser(true);
|
||||||
|
|||||||
@ -55,6 +55,7 @@ pub(crate) unsafe fn blocking_write(start_address: u32, buf: &[u8; WRITE_SIZE])
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub(crate) unsafe fn blocking_erase_sector(sector: &FlashSector) -> Result<(), Error> {
|
pub(crate) unsafe fn blocking_erase_sector(sector: &FlashSector) -> Result<(), Error> {
|
||||||
|
assert!(sector.bank != FlashBank::Otp);
|
||||||
assert!(sector.index_in_bank < 8);
|
assert!(sector.index_in_bank < 8);
|
||||||
|
|
||||||
while busy() {}
|
while busy() {}
|
||||||
@ -67,6 +68,7 @@ pub(crate) unsafe fn blocking_erase_sector(sector: &FlashSector) -> Result<(), E
|
|||||||
(FlashBank::Bank2, true) => Bksel::BANK1,
|
(FlashBank::Bank2, true) => Bksel::BANK1,
|
||||||
(FlashBank::Bank2, false) => Bksel::BANK2,
|
(FlashBank::Bank2, false) => Bksel::BANK2,
|
||||||
(FlashBank::Bank1, true) => Bksel::BANK2,
|
(FlashBank::Bank1, true) => Bksel::BANK2,
|
||||||
|
_ => unreachable!(),
|
||||||
});
|
});
|
||||||
w.set_snb(sector.index_in_bank);
|
w.set_snb(sector.index_in_bank);
|
||||||
w.set_ser(true);
|
w.set_ser(true);
|
||||||
|
|||||||
@ -88,6 +88,8 @@ pub enum FlashBank {
|
|||||||
Bank1 = 0,
|
Bank1 = 0,
|
||||||
/// Bank 2
|
/// Bank 2
|
||||||
Bank2 = 1,
|
Bank2 = 1,
|
||||||
|
/// OTP region,
|
||||||
|
Otp,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg_attr(any(flash_l0, flash_l1, flash_l4, flash_l5, flash_wl, flash_wb), path = "l.rs")]
|
#[cfg_attr(any(flash_l0, flash_l1, flash_l4, flash_l5, flash_wl, flash_wb), path = "l.rs")]
|
||||||
|
|||||||
@ -75,6 +75,7 @@ pub(crate) unsafe fn blocking_erase_sector(sector: &FlashSector) -> Result<(), E
|
|||||||
w.set_bker(match sector.bank {
|
w.set_bker(match sector.bank {
|
||||||
FlashBank::Bank1 => pac::flash::vals::SeccrBker::B_0X0,
|
FlashBank::Bank1 => pac::flash::vals::SeccrBker::B_0X0,
|
||||||
FlashBank::Bank2 => pac::flash::vals::SeccrBker::B_0X1,
|
FlashBank::Bank2 => pac::flash::vals::SeccrBker::B_0X1,
|
||||||
|
_ => unreachable!(),
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
#[cfg(not(feature = "trustzone-secure"))]
|
#[cfg(not(feature = "trustzone-secure"))]
|
||||||
@ -85,6 +86,7 @@ pub(crate) unsafe fn blocking_erase_sector(sector: &FlashSector) -> Result<(), E
|
|||||||
w.set_bker(match sector.bank {
|
w.set_bker(match sector.bank {
|
||||||
FlashBank::Bank1 => pac::flash::vals::NscrBker::B_0X0,
|
FlashBank::Bank1 => pac::flash::vals::NscrBker::B_0X0,
|
||||||
FlashBank::Bank2 => pac::flash::vals::NscrBker::B_0X1,
|
FlashBank::Bank2 => pac::flash::vals::NscrBker::B_0X1,
|
||||||
|
_ => unreachable!(),
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user