pub struct UnlockedFlash<'a> { /* private fields */ }
Expand description

Result of FlashExt::unlocked()

Examples

use stm32f4xx_hal::pac::Peripherals;
use stm32f4xx_hal::flash::{FlashExt, LockedFlash, UnlockedFlash};
use embedded_storage::nor_flash::NorFlash;

let dp = Peripherals::take().unwrap();
let mut flash = LockedFlash::new(dp.FLASH);

// Unlock flash for writing
let mut unlocked_flash = flash.unlocked();

// Erase the second 128 KB sector.
NorFlash::erase(&mut unlocked_flash, 128 * 1024, 256 * 1024).unwrap();

// Write some data at the start of the second 128 KB sector.
let buf = [0u8; 64];
NorFlash::write(&mut unlocked_flash, 128 * 1024, &buf).unwrap();

// Lock flash by dropping
drop(unlocked_flash);

Implementations§

source§

impl UnlockedFlash<'_>

source

pub fn erase(&mut self, sector: u8) -> Result<(), Error>

Erase a flash sector

Refer to the reference manual to see which sector corresponds to which memory address.

source

pub fn program<'a, I>(&mut self, offset: usize, bytes: I) -> Result<(), Error>
where I: Iterator<Item = &'a u8>,

Program bytes with offset into flash memory, aligned to 128-bit rows

Trait Implementations§

source§

impl Drop for UnlockedFlash<'_>

Automatically lock flash erase/program when leaving scope

source§

fn drop(&mut self)

Executes the destructor for this type. Read more
source§

impl ErrorType for UnlockedFlash<'_>

§

type Error = Error

Errors returned by this NOR flash.
source§

impl<'a> NorFlash for UnlockedFlash<'a>

source§

const WRITE_SIZE: usize = 1usize

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

const ERASE_SIZE: usize = 131_072usize

The minumum number of bytes the storage peripheral can erase
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§

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§

impl<'a> ReadNorFlash for UnlockedFlash<'a>

source§

const READ_SIZE: usize = 1usize

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.
source§

impl<'a> MultiwriteNorFlash for UnlockedFlash<'a>

Auto Trait Implementations§

§

impl<'a> RefUnwindSafe for UnlockedFlash<'a>

§

impl<'a> Send for UnlockedFlash<'a>

§

impl<'a> !Sync for UnlockedFlash<'a>

§

impl<'a> Unpin for UnlockedFlash<'a>

§

impl<'a> !UnwindSafe for UnlockedFlash<'a>

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>,

§

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>,

§

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.