2023-03-29 15:45:18 +02:00
|
|
|
use embedded_storage::nor_flash::{NorFlashError, NorFlashErrorKind};
|
2022-04-20 13:49:59 +02:00
|
|
|
|
2023-03-29 13:57:33 +02:00
|
|
|
#[cfg_attr(any(flash_l0, flash_l1, flash_l4, flash_wl, flash_wb), path = "l.rs")]
|
2022-05-02 15:36:02 +02:00
|
|
|
#[cfg_attr(flash_f3, path = "f3.rs")]
|
2022-07-11 02:57:46 +02:00
|
|
|
#[cfg_attr(flash_f4, path = "f4.rs")]
|
2022-05-03 16:16:37 +02:00
|
|
|
#[cfg_attr(flash_f7, path = "f7.rs")]
|
2022-05-06 09:21:29 +02:00
|
|
|
#[cfg_attr(flash_h7, path = "h7.rs")]
|
2022-05-02 15:36:02 +02:00
|
|
|
mod family;
|
2023-03-29 13:57:33 +02:00
|
|
|
|
|
|
|
#[cfg(not(any(
|
|
|
|
flash_l0, flash_l1, flash_l4, flash_wl, flash_wb, flash_f3, flash_f4, flash_f7, flash_h7
|
|
|
|
)))]
|
|
|
|
mod family {
|
2023-03-29 14:10:16 +02:00
|
|
|
use super::{Error, FlashSector, WRITE_SIZE};
|
2023-03-29 13:57:33 +02:00
|
|
|
|
|
|
|
pub(crate) unsafe fn lock() {
|
|
|
|
unimplemented!();
|
|
|
|
}
|
|
|
|
pub(crate) unsafe fn unlock() {
|
|
|
|
unimplemented!();
|
|
|
|
}
|
|
|
|
pub(crate) unsafe fn begin_write() {
|
|
|
|
unimplemented!();
|
|
|
|
}
|
|
|
|
pub(crate) unsafe fn end_write() {
|
|
|
|
unimplemented!();
|
|
|
|
}
|
|
|
|
pub(crate) unsafe fn blocking_write(_start_address: u32, _buf: &[u8; WRITE_SIZE]) -> Result<(), Error> {
|
|
|
|
unimplemented!();
|
|
|
|
}
|
|
|
|
pub(crate) unsafe fn blocking_erase_sector(_sector: &FlashSector) -> Result<(), Error> {
|
|
|
|
unimplemented!();
|
|
|
|
}
|
|
|
|
pub(crate) unsafe fn clear_all_err() {
|
|
|
|
unimplemented!();
|
|
|
|
}
|
|
|
|
pub(crate) fn get_sector(_address: u32) -> FlashSector {
|
|
|
|
unimplemented!();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2023-03-29 15:45:18 +02:00
|
|
|
#[cfg(flash)]
|
|
|
|
mod common;
|
|
|
|
|
|
|
|
#[cfg(flash)]
|
|
|
|
pub use common::*;
|
|
|
|
|
|
|
|
pub trait FlashRegion {
|
|
|
|
const SETTINGS: FlashRegionSettings;
|
2022-04-20 13:49:59 +02:00
|
|
|
}
|
|
|
|
|
2023-03-29 11:52:18 +02:00
|
|
|
pub struct FlashRegionSettings {
|
|
|
|
pub base: usize,
|
|
|
|
pub size: usize,
|
|
|
|
pub erase_size: usize,
|
|
|
|
pub write_size: usize,
|
|
|
|
pub erase_value: u8,
|
|
|
|
}
|
|
|
|
|
2023-03-29 11:31:45 +02:00
|
|
|
#[derive(Debug, PartialEq)]
|
|
|
|
pub struct FlashSector {
|
|
|
|
pub index: u8,
|
|
|
|
pub start: u32,
|
|
|
|
pub size: u32,
|
|
|
|
}
|
|
|
|
|
2023-03-29 12:10:24 +02:00
|
|
|
impl Drop for FlashRegions<'_> {
|
2023-03-25 17:00:52 +01:00
|
|
|
fn drop(&mut self) {
|
|
|
|
unsafe { family::lock() };
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-04-20 13:49:59 +02:00
|
|
|
#[derive(Debug, Copy, Clone, PartialEq, Eq)]
|
|
|
|
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
|
|
|
|
pub enum Error {
|
|
|
|
Prog,
|
|
|
|
Size,
|
|
|
|
Miss,
|
|
|
|
Seq,
|
|
|
|
Protected,
|
|
|
|
Unaligned,
|
2022-05-03 16:16:37 +02:00
|
|
|
Parallelism,
|
2022-04-20 13:49:59 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
impl NorFlashError for Error {
|
|
|
|
fn kind(&self) -> NorFlashErrorKind {
|
|
|
|
match self {
|
|
|
|
Self::Size => NorFlashErrorKind::OutOfBounds,
|
|
|
|
Self::Unaligned => NorFlashErrorKind::NotAligned,
|
|
|
|
_ => NorFlashErrorKind::Other,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|