feat(stm32): Add OTP flash region (again)
This commit is contained in:
parent
8c6fa83006
commit
97ed7f085a
@ -296,6 +296,8 @@ fn main() {
|
||||
"Bank1"
|
||||
} else if region.name.starts_with("BANK_2") {
|
||||
"Bank2"
|
||||
} else if region.name == "OTP" {
|
||||
"Otp"
|
||||
} else {
|
||||
continue;
|
||||
}
|
||||
|
||||
@ -15,7 +15,7 @@ mod alt_regions {
|
||||
|
||||
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::flash::{asynch, Async, Bank1Region1, Bank1Region2, Blocking, Error, Flash, FlashBank, FlashRegion};
|
||||
use crate::peripherals::FLASH;
|
||||
@ -62,6 +62,7 @@ mod alt_regions {
|
||||
pub bank2_region1: AltBank2Region1<'d, MODE>,
|
||||
pub bank2_region2: AltBank2Region2<'d, MODE>,
|
||||
pub bank2_region3: AltBank2Region3<'d, MODE>,
|
||||
pub otp_region: OTPRegion<'d, MODE>,
|
||||
}
|
||||
|
||||
impl<'d> Flash<'d> {
|
||||
@ -78,6 +79,7 @@ mod alt_regions {
|
||||
bank2_region1: AltBank2Region1(&ALT_BANK2_REGION1, 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),
|
||||
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_region2: AltBank2Region2(&ALT_BANK2_REGION2, 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 {
|
||||
crate::flash::FlashBank::Bank1 => stm32_metapac::flash::vals::NscrBksel::B_0X0,
|
||||
crate::flash::FlashBank::Bank2 => stm32_metapac::flash::vals::NscrBksel::B_0X1,
|
||||
_ => unreachable!(),
|
||||
});
|
||||
r.set_snb(sector.index_in_bank);
|
||||
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> {
|
||||
assert!(sector.bank != FlashBank::Otp);
|
||||
assert!(sector.index_in_bank < 8);
|
||||
|
||||
while busy() {}
|
||||
@ -67,6 +68,7 @@ pub(crate) unsafe fn blocking_erase_sector(sector: &FlashSector) -> Result<(), E
|
||||
(FlashBank::Bank2, true) => Bksel::BANK1,
|
||||
(FlashBank::Bank2, false) => Bksel::BANK2,
|
||||
(FlashBank::Bank1, true) => Bksel::BANK2,
|
||||
_ => unreachable!(),
|
||||
});
|
||||
w.set_snb(sector.index_in_bank);
|
||||
w.set_ser(true);
|
||||
|
||||
@ -88,6 +88,8 @@ pub enum FlashBank {
|
||||
Bank1 = 0,
|
||||
/// Bank 2
|
||||
Bank2 = 1,
|
||||
/// OTP region,
|
||||
Otp,
|
||||
}
|
||||
|
||||
#[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 {
|
||||
FlashBank::Bank1 => pac::flash::vals::SeccrBker::B_0X0,
|
||||
FlashBank::Bank2 => pac::flash::vals::SeccrBker::B_0X1,
|
||||
_ => unreachable!(),
|
||||
});
|
||||
});
|
||||
#[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 {
|
||||
FlashBank::Bank1 => pac::flash::vals::NscrBker::B_0X0,
|
||||
FlashBank::Bank2 => pac::flash::vals::NscrBker::B_0X1,
|
||||
_ => unreachable!(),
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user