aboutsummaryrefslogtreecommitdiff
path: root/embassy-stm32/src/flash
diff options
context:
space:
mode:
authorRasmus Melchior Jacobsen <[email protected]>2025-02-13 14:33:55 +0100
committerDario Nieuwenhuis <[email protected]>2025-03-20 01:58:44 +0100
commit97ed7f085a5f0fdec2e0311848b236883512ef70 (patch)
tree34c07e0501dd812dc07ba631dea152616a517808 /embassy-stm32/src/flash
parent8c6fa83006a22c77740552161f816e294ec166b3 (diff)
feat(stm32): Add OTP flash region (again)
Diffstat (limited to 'embassy-stm32/src/flash')
-rw-r--r--embassy-stm32/src/flash/f4.rs5
-rw-r--r--embassy-stm32/src/flash/h5.rs1
-rw-r--r--embassy-stm32/src/flash/h50.rs2
-rw-r--r--embassy-stm32/src/flash/mod.rs2
-rw-r--r--embassy-stm32/src/flash/u5.rs2
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
57pub(crate) unsafe fn blocking_erase_sector(sector: &FlashSector) -> Result<(), Error> { 57pub(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