embassy-stm32

Crates

git

Versions

stm32c562re

Flavors

Skip to main content

Flash

Struct Flash 

Source
pub struct Flash<'d, MODE = Async> { /* private fields */ }
Expand description

Internal flash memory driver.

Implementations§

Source§

impl<'d> Flash<'d, Blocking>

Source

pub fn new_blocking(p: Peri<'d, FLASH>) -> Self

Create a new flash driver, usable in blocking mode.

Source§

impl<'d, MODE> Flash<'d, MODE>

Source

pub fn into_blocking_regions(self) -> FlashLayout<'d, Blocking>

Split this flash driver into one instance per flash memory region.

See module-level documentation for details on how memory regions work.

Source

pub fn blocking_read( &mut self, offset: u32, bytes: &mut [u8], ) -> Result<(), Error>

Blocking read.

NOTE: offset is an offset from the flash start, NOT an absolute address. For example, to read address 0x0800_1234 you have to use offset 0x1234.

Source

pub fn blocking_write(&mut self, offset: u32, bytes: &[u8]) -> Result<(), Error>

Blocking write.

NOTE: offset is an offset from the flash start, NOT an absolute address. For example, to write address 0x0800_1234 you have to use offset 0x1234.

Source

pub fn blocking_erase(&mut self, from: u32, to: u32) -> Result<(), Error>

Blocking erase.

NOTE: from and to are offsets from the flash start, NOT an absolute address. For example, to erase address 0x0801_0000 you have to use offset 0x1_0000.

Source§

impl<'d> Flash<'d, Blocking>

Source

pub fn edata_is_enabled(&self) -> bool

Returns whether the EDATA area is enabled by the option bytes.

Source

pub fn edata_read( &self, bank: EDataBank, offset: u32, output: &mut [u8], ) -> Result<(), Error>

Reads output.len() bytes from an EDATA bank.

offset is a byte offset from the beginning of the selected physical bank and does not need to be aligned to 2 bytes.

§Hardware behavior

EDATA associates ECC information with each aligned 16-bit word. Although this function accepts unaligned byte ranges, it reads the aligned 16-bit word containing each requested byte.

Reading a virgin EDATA word, such as a word that has not been programmed since the page was erased, raises a double ECC error. Therefore, callers should ensure that every 16-bit word touched by the requested range has been programmed before reading it.

See RM0522, “Error correction codes (ECC).”

Source

pub fn edata_read_u16(&self, bank: EDataBank, offset: u32) -> Result<u16, Error>

Reads a 16-bit value from an EDATA bank.

offset is a byte offset from the beginning of the selected physical bank and must be aligned to 2 bytes.

§Hardware behavior

EDATA associates ECC information with each aligned 16-bit word. Reading a virgin EDATA word, such as a word that has not been programmed since the page was erased, raises a double ECC error. Callers should ensure that the requested word has been programmed before reading it.

See RM0522, “Error correction codes (ECC).”

Source

pub fn edata_read_u16_slice( &self, bank: EDataBank, offset: u32, output: &mut [u16], ) -> Result<(), Error>

Reads 16-bit values from an EDATA bank into output.

offset is a byte offset from the beginning of the selected physical bank and must be aligned to 2 bytes.

§Hardware behavior

EDATA associates ECC information with each aligned 16-bit word. Reading a virgin EDATA word, such as a word that has not been programmed since the page was erased, raises a double ECC error. Callers should ensure that every requested word has been programmed before reading it.

See RM0522, “Error correction codes (ECC).”

Source

pub fn edata_write_u16( &mut self, bank: EDataBank, offset: u32, value: u16, ) -> Result<(), Error>

Writes a 16-bit value to an EDATA bank.

offset is a byte offset from the beginning of the selected physical bank and must be aligned to 2 bytes.

Source

pub fn edata_write_u16_slice( &mut self, bank: EDataBank, offset: u32, values: &[u16], ) -> Result<(), Error>

Writes 16-bit values to an EDATA bank.

offset is a byte offset from the beginning of the selected physical bank and must be aligned to 2 bytes.

Source

pub fn edata_write_u32( &mut self, bank: EDataBank, offset: u32, value: u32, ) -> Result<(), Error>

Writes a 32-bit value to an EDATA bank.

offset is a byte offset from the beginning of the selected physical bank and must be aligned to 4 bytes.

Source

pub fn edata_write( &mut self, bank: EDataBank, offset: u32, data: &[u8], ) -> Result<(), Error>

Writes bytes to an EDATA bank using 16-bit programming operations.

offset is a byte offset from the beginning of the selected physical bank. Both offset and data.len() must be aligned to 2 bytes.

Source

pub fn edata_erase_page( &mut self, bank: EDataBank, page: u8, ) -> Result<(), Error>

Erases one page in an EDATA bank.

page is a zero-based physical page index within the selected bank.

Trait Implementations§

Source§

impl<MODE> ErrorType for Flash<'_, MODE>

Source§

type Error = Error

Errors returned by this NOR flash.
Source§

impl<MODE> NorFlash for Flash<'_, MODE>

Source§

const WRITE_SIZE: usize = WRITE_SIZE

The minumum number of bytes the storage peripheral can write
Source§

const ERASE_SIZE: usize = MAX_ERASE_SIZE

The minumum number of bytes the storage peripheral can erase
Source§

fn write(&mut self, offset: u32, bytes: &[u8]) -> Result<(), Self::Error>

If power is lost during write, the contents of the written words are undefined, but the rest of the page is guaranteed to be unchanged. It is not allowed to write to the same word twice. Read more
Source§

fn erase(&mut self, from: u32, to: u32) -> Result<(), Self::Error>

Erase the given storage range, clearing all data within [from..to]. The given range will contain all 1s afterwards. Read more
Source§

impl<MODE> ReadNorFlash for Flash<'_, MODE>

Source§

const READ_SIZE: usize = READ_SIZE

The minumum number of bytes the storage peripheral can read
Source§

fn read(&mut self, offset: u32, bytes: &mut [u8]) -> Result<(), Self::Error>

Read a slice of data from the storage peripheral, starting the read operation at the given address offset, and reading bytes.len() bytes. Read more
Source§

fn capacity(&self) -> usize

The capacity of the peripheral in bytes.

Auto Trait Implementations§

§

impl<'d, MODE = Async> !UnwindSafe for Flash<'d, MODE>

§

impl<'d, MODE> Freeze for Flash<'d, MODE>

§

impl<'d, MODE> RefUnwindSafe for Flash<'d, MODE>
where MODE: RefUnwindSafe,

§

impl<'d, MODE> Send for Flash<'d, MODE>
where MODE: Send,

§

impl<'d, MODE> Sync for Flash<'d, MODE>
where MODE: Sync,

§

impl<'d, MODE> Unpin for Flash<'d, MODE>
where MODE: Unpin,

§

impl<'d, MODE> UnsafeUnpin for Flash<'d, MODE>

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.