Remove flash lock/unlock public API from stm32 flash, and perform the unlocking and locking automatically on erase and write operations
This commit is contained in:
		
							parent
							
								
									1d6f5493e7
								
							
						
					
					
						commit
						a7fdeac560
					
				| @ -23,17 +23,6 @@ impl<'d> Flash<'d> { | ||||
|         Self { _inner: p } | ||||
|     } | ||||
| 
 | ||||
|     pub fn unlock(p: impl Peripheral<P = FLASH> + 'd) -> Self { | ||||
|         let flash = Self::new(p); | ||||
| 
 | ||||
|         unsafe { family::unlock() }; | ||||
|         flash | ||||
|     } | ||||
| 
 | ||||
|     pub fn lock(&mut self) { | ||||
|         unsafe { family::lock() }; | ||||
|     } | ||||
| 
 | ||||
|     pub fn blocking_read(&mut self, offset: u32, bytes: &mut [u8]) -> Result<(), Error> { | ||||
|         let offset = FLASH_BASE as u32 + offset; | ||||
|         if offset as usize >= FLASH_END || offset as usize + bytes.len() > FLASH_END { | ||||
| @ -57,7 +46,12 @@ impl<'d> Flash<'d> { | ||||
| 
 | ||||
|         self.clear_all_err(); | ||||
| 
 | ||||
|         unsafe { family::blocking_write(offset, buf) } | ||||
|         unsafe { | ||||
|             family::unlock(); | ||||
|             let res = family::blocking_write(offset, buf); | ||||
|             family::lock(); | ||||
|             res | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     pub fn blocking_erase(&mut self, from: u32, to: u32) -> Result<(), Error> { | ||||
| @ -72,7 +66,12 @@ impl<'d> Flash<'d> { | ||||
| 
 | ||||
|         self.clear_all_err(); | ||||
| 
 | ||||
|         unsafe { family::blocking_erase(from, to) } | ||||
|         unsafe { | ||||
|             family::unlock(); | ||||
|             let res = family::blocking_erase(from, to); | ||||
|             family::lock(); | ||||
|             res | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     fn clear_all_err(&mut self) { | ||||
| @ -82,7 +81,7 @@ impl<'d> Flash<'d> { | ||||
| 
 | ||||
| impl Drop for Flash<'_> { | ||||
|     fn drop(&mut self) { | ||||
|         self.lock(); | ||||
|         unsafe { family::lock() }; | ||||
|     } | ||||
| } | ||||
| 
 | ||||
|  | ||||
| @ -17,7 +17,7 @@ static APP_B: &[u8] = include_bytes!("../../b.bin"); | ||||
| #[embassy_executor::main] | ||||
| async fn main(_spawner: Spawner) { | ||||
|     let p = embassy_stm32::init(Default::default()); | ||||
|     let flash = Flash::unlock(p.FLASH); | ||||
|     let flash = Flash::new(p.FLASH); | ||||
|     let mut flash = BlockingAsync::new(flash); | ||||
| 
 | ||||
|     let button = Input::new(p.PC13, Pull::Up); | ||||
|  | ||||
| @ -16,7 +16,7 @@ static APP_B: &[u8] = include_bytes!("../../b.bin"); | ||||
| #[embassy_executor::main] | ||||
| async fn main(_spawner: Spawner) { | ||||
|     let p = embassy_stm32::init(Default::default()); | ||||
|     let mut flash = Flash::unlock(p.FLASH); | ||||
|     let mut flash = Flash::new(p.FLASH); | ||||
| 
 | ||||
|     let button = Input::new(p.PC13, Pull::Down); | ||||
|     let mut button = ExtiInput::new(button, p.EXTI13); | ||||
|  | ||||
| @ -16,7 +16,7 @@ static APP_B: &[u8] = include_bytes!("../../b.bin"); | ||||
| #[embassy_executor::main] | ||||
| async fn main(_spawner: Spawner) { | ||||
|     let p = embassy_stm32::init(Default::default()); | ||||
|     let mut flash = Flash::unlock(p.FLASH); | ||||
|     let mut flash = Flash::new(p.FLASH); | ||||
| 
 | ||||
|     let button = Input::new(p.PC13, Pull::Down); | ||||
|     let mut button = ExtiInput::new(button, p.EXTI13); | ||||
|  | ||||
| @ -18,7 +18,7 @@ static APP_B: &[u8] = include_bytes!("../../b.bin"); | ||||
| #[embassy_executor::main] | ||||
| async fn main(_spawner: Spawner) { | ||||
|     let p = embassy_stm32::init(Default::default()); | ||||
|     let flash = Flash::unlock(p.FLASH); | ||||
|     let flash = Flash::new(p.FLASH); | ||||
|     let mut flash = BlockingAsync::new(flash); | ||||
| 
 | ||||
|     let button = Input::new(p.PB2, Pull::Up); | ||||
|  | ||||
| @ -18,7 +18,7 @@ static APP_B: &[u8] = include_bytes!("../../b.bin"); | ||||
| #[embassy_executor::main] | ||||
| async fn main(_spawner: Spawner) { | ||||
|     let p = embassy_stm32::init(Default::default()); | ||||
|     let flash = Flash::unlock(p.FLASH); | ||||
|     let flash = Flash::new(p.FLASH); | ||||
|     let mut flash = BlockingAsync::new(flash); | ||||
| 
 | ||||
|     let button = Input::new(p.PB2, Pull::Up); | ||||
|  | ||||
| @ -17,7 +17,7 @@ static APP_B: &[u8] = include_bytes!("../../b.bin"); | ||||
| #[embassy_executor::main] | ||||
| async fn main(_spawner: Spawner) { | ||||
|     let p = embassy_stm32::init(Default::default()); | ||||
|     let flash = Flash::unlock(p.FLASH); | ||||
|     let flash = Flash::new(p.FLASH); | ||||
|     let mut flash = BlockingAsync::new(flash); | ||||
| 
 | ||||
|     let button = Input::new(p.PC13, Pull::Up); | ||||
|  | ||||
| @ -17,7 +17,7 @@ static APP_B: &[u8] = include_bytes!("../../b.bin"); | ||||
| #[embassy_executor::main] | ||||
| async fn main(_spawner: Spawner) { | ||||
|     let p = embassy_stm32::init(Default::default()); | ||||
|     let flash = Flash::unlock(p.FLASH); | ||||
|     let flash = Flash::new(p.FLASH); | ||||
|     let mut flash = BlockingAsync::new(flash); | ||||
| 
 | ||||
|     let button = Input::new(p.PA0, Pull::Up); | ||||
|  | ||||
| @ -20,7 +20,7 @@ fn main() -> ! { | ||||
|     */ | ||||
| 
 | ||||
|     let mut bl: BootLoader<ERASE_SIZE, WRITE_SIZE> = BootLoader::default(); | ||||
|     let flash = Flash::unlock(p.FLASH); | ||||
|     let flash = Flash::new(p.FLASH); | ||||
|     let mut flash = BootFlash::<_, ERASE_SIZE, ERASE_VALUE>::new(flash); | ||||
|     let start = bl.prepare(&mut SingleFlashConfig::new(&mut flash)); | ||||
|     core::mem::drop(flash); | ||||
|  | ||||
| @ -15,7 +15,7 @@ async fn main(_spawner: Spawner) { | ||||
| 
 | ||||
|     const ADDR: u32 = 0x26000; | ||||
| 
 | ||||
|     let mut f = Flash::unlock(p.FLASH); | ||||
|     let mut f = Flash::new(p.FLASH); | ||||
| 
 | ||||
|     info!("Reading..."); | ||||
|     let mut buf = [0u8; 8]; | ||||
|  | ||||
| @ -13,7 +13,7 @@ async fn main(_spawner: Spawner) { | ||||
|     let p = embassy_stm32::init(Default::default()); | ||||
|     info!("Hello Flash!"); | ||||
| 
 | ||||
|     let mut f = Flash::unlock(p.FLASH); | ||||
|     let mut f = Flash::new(p.FLASH); | ||||
| 
 | ||||
|     // Sector 5
 | ||||
|     test_flash(&mut f, 128 * 1024, 128 * 1024); | ||||
|  | ||||
| @ -19,7 +19,7 @@ async fn main(_spawner: Spawner) { | ||||
|     // wait a bit before accessing the flash
 | ||||
|     Timer::after(Duration::from_millis(300)).await; | ||||
| 
 | ||||
|     let mut f = Flash::unlock(p.FLASH); | ||||
|     let mut f = Flash::new(p.FLASH); | ||||
| 
 | ||||
|     info!("Reading..."); | ||||
|     let mut buf = [0u8; 32]; | ||||
|  | ||||
| @ -19,7 +19,7 @@ async fn main(_spawner: Spawner) { | ||||
|     // wait a bit before accessing the flash
 | ||||
|     Timer::after(Duration::from_millis(300)).await; | ||||
| 
 | ||||
|     let mut f = Flash::unlock(p.FLASH); | ||||
|     let mut f = Flash::new(p.FLASH); | ||||
| 
 | ||||
|     info!("Reading..."); | ||||
|     let mut buf = [0u8; 32]; | ||||
|  | ||||
| @ -15,7 +15,7 @@ async fn main(_spawner: Spawner) { | ||||
| 
 | ||||
|     const ADDR: u32 = 0x26000; | ||||
| 
 | ||||
|     let mut f = Flash::unlock(p.FLASH); | ||||
|     let mut f = Flash::new(p.FLASH); | ||||
| 
 | ||||
|     info!("Reading..."); | ||||
|     let mut buf = [0u8; 8]; | ||||
|  | ||||
| @ -15,7 +15,7 @@ async fn main(_spawner: Spawner) { | ||||
| 
 | ||||
|     const ADDR: u32 = 0x26000; | ||||
| 
 | ||||
|     let mut f = Flash::unlock(p.FLASH); | ||||
|     let mut f = Flash::new(p.FLASH); | ||||
| 
 | ||||
|     info!("Reading..."); | ||||
|     let mut buf = [0u8; 8]; | ||||
|  | ||||
| @ -15,7 +15,7 @@ async fn main(_spawner: Spawner) { | ||||
| 
 | ||||
|     const ADDR: u32 = 0x36000; | ||||
| 
 | ||||
|     let mut f = Flash::unlock(p.FLASH); | ||||
|     let mut f = Flash::new(p.FLASH); | ||||
| 
 | ||||
|     info!("Reading..."); | ||||
|     let mut buf = [0u8; 8]; | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user