diff options
| author | Rasmus Melchior Jacobsen <[email protected]> | 2025-02-13 14:33:55 +0100 |
|---|---|---|
| committer | Dario Nieuwenhuis <[email protected]> | 2025-03-20 01:58:44 +0100 |
| commit | 97ed7f085a5f0fdec2e0311848b236883512ef70 (patch) | |
| tree | 34c07e0501dd812dc07ba631dea152616a517808 /embassy-stm32/src/flash | |
| parent | 8c6fa83006a22c77740552161f816e294ec166b3 (diff) | |
feat(stm32): Add OTP flash region (again)
Diffstat (limited to 'embassy-stm32/src/flash')
| -rw-r--r-- | embassy-stm32/src/flash/f4.rs | 5 | ||||
| -rw-r--r-- | embassy-stm32/src/flash/h5.rs | 1 | ||||
| -rw-r--r-- | embassy-stm32/src/flash/h50.rs | 2 | ||||
| -rw-r--r-- | embassy-stm32/src/flash/mod.rs | 2 | ||||
| -rw-r--r-- | embassy-stm32/src/flash/u5.rs | 2 |
5 files changed, 11 insertions, 1 deletions
diff --git a/embassy-stm32/src/flash/f4.rs b/embassy-stm32/src/flash/f4.rs index d818c77d0..86afdce8a 100644 --- a/embassy-stm32/src/flash/f4.rs +++ b/embassy-stm32/src/flash/f4.rs | |||
| @@ -15,7 +15,7 @@ mod alt_regions { | |||
| 15 | 15 | ||
| 16 | use embassy_hal_internal::PeripheralRef; | 16 | use embassy_hal_internal::PeripheralRef; |
| 17 | 17 | ||
| 18 | use crate::_generated::flash_regions::{BANK1_REGION1, BANK1_REGION2, BANK1_REGION3}; | 18 | use crate::_generated::flash_regions::{OTPRegion, BANK1_REGION1, BANK1_REGION2, BANK1_REGION3, OTP_REGION}; |
| 19 | use crate::_generated::FLASH_SIZE; | 19 | use crate::_generated::FLASH_SIZE; |
| 20 | use crate::flash::{asynch, Async, Bank1Region1, Bank1Region2, Blocking, Error, Flash, FlashBank, FlashRegion}; | 20 | use crate::flash::{asynch, Async, Bank1Region1, Bank1Region2, Blocking, Error, Flash, FlashBank, FlashRegion}; |
| 21 | use crate::peripherals::FLASH; | 21 | use crate::peripherals::FLASH; |
| @@ -62,6 +62,7 @@ mod alt_regions { | |||
| 62 | pub bank2_region1: AltBank2Region1<'d, MODE>, | 62 | pub bank2_region1: AltBank2Region1<'d, MODE>, |
| 63 | pub bank2_region2: AltBank2Region2<'d, MODE>, | 63 | pub bank2_region2: AltBank2Region2<'d, MODE>, |
| 64 | pub bank2_region3: AltBank2Region3<'d, MODE>, | 64 | pub bank2_region3: AltBank2Region3<'d, MODE>, |
| 65 | pub otp_region: OTPRegion<'d, MODE>, | ||
| 65 | } | 66 | } |
| 66 | 67 | ||
| 67 | impl<'d> Flash<'d> { | 68 | impl<'d> Flash<'d> { |
| @@ -78,6 +79,7 @@ mod alt_regions { | |||
| 78 | bank2_region1: AltBank2Region1(&ALT_BANK2_REGION1, unsafe { p.clone_unchecked() }, PhantomData), | 79 | bank2_region1: AltBank2Region1(&ALT_BANK2_REGION1, unsafe { p.clone_unchecked() }, PhantomData), |
| 79 | bank2_region2: AltBank2Region2(&ALT_BANK2_REGION2, unsafe { p.clone_unchecked() }, PhantomData), | 80 | bank2_region2: AltBank2Region2(&ALT_BANK2_REGION2, unsafe { p.clone_unchecked() }, PhantomData), |
| 80 | bank2_region3: AltBank2Region3(&ALT_BANK2_REGION3, unsafe { p.clone_unchecked() }, PhantomData), | 81 | bank2_region3: AltBank2Region3(&ALT_BANK2_REGION3, unsafe { p.clone_unchecked() }, PhantomData), |
| 82 | otp_region: OTPRegion(&OTP_REGION, unsafe { p.clone_unchecked() }, PhantomData), | ||
| 81 | } | 83 | } |
| 82 | } | 84 | } |
| 83 | 85 | ||
| @@ -94,6 +96,7 @@ mod alt_regions { | |||
| 94 | bank2_region1: AltBank2Region1(&ALT_BANK2_REGION1, unsafe { p.clone_unchecked() }, PhantomData), | 96 | bank2_region1: AltBank2Region1(&ALT_BANK2_REGION1, unsafe { p.clone_unchecked() }, PhantomData), |
| 95 | bank2_region2: AltBank2Region2(&ALT_BANK2_REGION2, unsafe { p.clone_unchecked() }, PhantomData), | 97 | bank2_region2: AltBank2Region2(&ALT_BANK2_REGION2, unsafe { p.clone_unchecked() }, PhantomData), |
| 96 | bank2_region3: AltBank2Region3(&ALT_BANK2_REGION3, unsafe { p.clone_unchecked() }, PhantomData), | 98 | bank2_region3: AltBank2Region3(&ALT_BANK2_REGION3, unsafe { p.clone_unchecked() }, PhantomData), |
| 99 | otp_region: OTPRegion(&OTP_REGION, unsafe { p.clone_unchecked() }, PhantomData), | ||
| 97 | } | 100 | } |
| 98 | } | 101 | } |
| 99 | } | 102 | } |
diff --git a/embassy-stm32/src/flash/h5.rs b/embassy-stm32/src/flash/h5.rs index 9e131ca2b..d95de2e38 100644 --- a/embassy-stm32/src/flash/h5.rs +++ b/embassy-stm32/src/flash/h5.rs | |||
| @@ -114,6 +114,7 @@ pub(crate) unsafe fn blocking_erase_sector(sector: &FlashSector) -> Result<(), E | |||
| 114 | r.set_bksel(match sector.bank { | 114 | r.set_bksel(match sector.bank { |
| 115 | crate::flash::FlashBank::Bank1 => stm32_metapac::flash::vals::NscrBksel::B_0X0, | 115 | crate::flash::FlashBank::Bank1 => stm32_metapac::flash::vals::NscrBksel::B_0X0, |
| 116 | crate::flash::FlashBank::Bank2 => stm32_metapac::flash::vals::NscrBksel::B_0X1, | 116 | crate::flash::FlashBank::Bank2 => stm32_metapac::flash::vals::NscrBksel::B_0X1, |
| 117 | _ => unreachable!(), | ||
| 117 | }); | 118 | }); |
| 118 | r.set_snb(sector.index_in_bank); | 119 | r.set_snb(sector.index_in_bank); |
| 119 | r.set_ser(true); | 120 | r.set_ser(true); |
diff --git a/embassy-stm32/src/flash/h50.rs b/embassy-stm32/src/flash/h50.rs index 82e77d130..74cd6cc03 100644 --- a/embassy-stm32/src/flash/h50.rs +++ b/embassy-stm32/src/flash/h50.rs | |||
| @@ -55,6 +55,7 @@ pub(crate) unsafe fn blocking_write(start_address: u32, buf: &[u8; WRITE_SIZE]) | |||
| 55 | } | 55 | } |
| 56 | 56 | ||
| 57 | pub(crate) unsafe fn blocking_erase_sector(sector: &FlashSector) -> Result<(), Error> { | 57 | pub(crate) unsafe fn blocking_erase_sector(sector: &FlashSector) -> Result<(), Error> { |
| 58 | assert!(sector.bank != FlashBank::Otp); | ||
| 58 | assert!(sector.index_in_bank < 8); | 59 | assert!(sector.index_in_bank < 8); |
| 59 | 60 | ||
| 60 | while busy() {} | 61 | while busy() {} |
| @@ -67,6 +68,7 @@ pub(crate) unsafe fn blocking_erase_sector(sector: &FlashSector) -> Result<(), E | |||
| 67 | (FlashBank::Bank2, true) => Bksel::BANK1, | 68 | (FlashBank::Bank2, true) => Bksel::BANK1, |
| 68 | (FlashBank::Bank2, false) => Bksel::BANK2, | 69 | (FlashBank::Bank2, false) => Bksel::BANK2, |
| 69 | (FlashBank::Bank1, true) => Bksel::BANK2, | 70 | (FlashBank::Bank1, true) => Bksel::BANK2, |
| 71 | _ => unreachable!(), | ||
| 70 | }); | 72 | }); |
| 71 | w.set_snb(sector.index_in_bank); | 73 | w.set_snb(sector.index_in_bank); |
| 72 | w.set_ser(true); | 74 | w.set_ser(true); |
diff --git a/embassy-stm32/src/flash/mod.rs b/embassy-stm32/src/flash/mod.rs index b564de093..c7488c8ef 100644 --- a/embassy-stm32/src/flash/mod.rs +++ b/embassy-stm32/src/flash/mod.rs | |||
| @@ -88,6 +88,8 @@ pub enum FlashBank { | |||
| 88 | Bank1 = 0, | 88 | Bank1 = 0, |
| 89 | /// Bank 2 | 89 | /// Bank 2 |
| 90 | Bank2 = 1, | 90 | Bank2 = 1, |
| 91 | /// OTP region, | ||
| 92 | Otp, | ||
| 91 | } | 93 | } |
| 92 | 94 | ||
| 93 | #[cfg_attr(any(flash_l0, flash_l1, flash_l4, flash_l5, flash_wl, flash_wb), path = "l.rs")] | 95 | #[cfg_attr(any(flash_l0, flash_l1, flash_l4, flash_l5, flash_wl, flash_wb), path = "l.rs")] |
diff --git a/embassy-stm32/src/flash/u5.rs b/embassy-stm32/src/flash/u5.rs index e5af4f1f7..dad698316 100644 --- a/embassy-stm32/src/flash/u5.rs +++ b/embassy-stm32/src/flash/u5.rs | |||
| @@ -75,6 +75,7 @@ pub(crate) unsafe fn blocking_erase_sector(sector: &FlashSector) -> Result<(), E | |||
| 75 | w.set_bker(match sector.bank { | 75 | w.set_bker(match sector.bank { |
| 76 | FlashBank::Bank1 => pac::flash::vals::SeccrBker::B_0X0, | 76 | FlashBank::Bank1 => pac::flash::vals::SeccrBker::B_0X0, |
| 77 | FlashBank::Bank2 => pac::flash::vals::SeccrBker::B_0X1, | 77 | FlashBank::Bank2 => pac::flash::vals::SeccrBker::B_0X1, |
| 78 | _ => unreachable!(), | ||
| 78 | }); | 79 | }); |
| 79 | }); | 80 | }); |
| 80 | #[cfg(not(feature = "trustzone-secure"))] | 81 | #[cfg(not(feature = "trustzone-secure"))] |
| @@ -85,6 +86,7 @@ pub(crate) unsafe fn blocking_erase_sector(sector: &FlashSector) -> Result<(), E | |||
| 85 | w.set_bker(match sector.bank { | 86 | w.set_bker(match sector.bank { |
| 86 | FlashBank::Bank1 => pac::flash::vals::NscrBker::B_0X0, | 87 | FlashBank::Bank1 => pac::flash::vals::NscrBker::B_0X0, |
| 87 | FlashBank::Bank2 => pac::flash::vals::NscrBker::B_0X1, | 88 | FlashBank::Bank2 => pac::flash::vals::NscrBker::B_0X1, |
| 89 | _ => unreachable!(), | ||
| 88 | }); | 90 | }); |
| 89 | }); | 91 | }); |
| 90 | 92 | ||
