embassy-nrf

Crates

git

Versions

nrf54l15-app-s

Flavors

Sqspi

Struct Sqspi 

Source
pub struct Sqspi<'d> { /* private fields */ }
Expand description

sQSPI flash driver.

Implementations§

Source§

impl<'d> Sqspi<'d>

Source

pub fn new<T: Instance>( peri: Peri<'d, T>, _irq: impl Binding<T::Interrupt, InterruptHandler<T>> + 'd, firmware: &[u8], ram: &'d mut [MaybeUninit<u8>], sck: Peri<'d, impl GpioPin>, csn: Peri<'d, impl GpioPin>, io0: Peri<'d, impl GpioPin>, io1: Peri<'d, impl GpioPin>, io2: Peri<'d, impl GpioPin>, io3: Peri<'d, impl GpioPin>, config: Config, ) -> Result<Self, Error>

Create a new sQSPI driver.

Loads firmware into ram, boots the FLPR, routes the pins to it, and configures the SPI core per config. See the module docs for the firmware / ram requirements.

Source

pub async fn custom_instruction( &mut self, opcode: u8, req: &[u8], resp: &mut [u8], ) -> Result<(), Error>

Do a custom SPI instruction (single line).

Like the hardware qspi driver this issues WREN before the opcode and waits for WIP to clear afterwards, so state-changing commands (WRSR, …) work without extra orchestration. If resp is non-empty the command reads into it; otherwise req is transmitted.

Source

pub fn blocking_custom_instruction( &mut self, opcode: u8, req: &[u8], resp: &mut [u8], ) -> Result<(), Error>

Do a custom SPI instruction, blocking version.

Source

pub fn blocking_custom_opcode(&mut self, opcode: u8) -> Result<(), Error>

Send a single bare opcode (no address, no data) on a single line, without issuing WREN first or polling WIP afterwards.

Unlike custom_instruction this does not touch the status register, which is what makes it usable for power-state commands such as deep power-down (0xB9): once the flash is in DPD it stops answering RDSR, so the usual trailing WIP poll would hang forever.

Source

pub async fn read_raw( &mut self, address: u32, data: &mut [u8], ) -> Result<(), Error>

Raw read: no bounds check against the configured capacity.

Source

pub async fn write_raw( &mut self, address: u32, data: &[u8], ) -> Result<(), Error>

Raw write: no bounds check against the configured capacity.

Source

pub fn blocking_read_raw( &mut self, address: u32, data: &mut [u8], ) -> Result<(), Error>

Raw read, blocking version.

Source

pub fn blocking_write_raw( &mut self, address: u32, data: &[u8], ) -> Result<(), Error>

Raw write, blocking version.

Source

pub async fn read(&mut self, address: u32, data: &mut [u8]) -> Result<(), Error>

Read from flash, bounds-checked against the configured capacity.

Source

pub async fn write(&mut self, address: u32, data: &[u8]) -> Result<(), Error>

Write to flash, bounds-checked against the configured capacity.

Source

pub async fn erase(&mut self, address: u32) -> Result<(), Error>

Erase a 4 KiB sector (opcode 0x20).

Source

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

Read from flash, blocking + bounds-checked.

Source

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

Write to flash, blocking + bounds-checked.

Source

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

Erase a 4 KiB sector, blocking version.

Trait Implementations§

Source§

impl<'d> Drop for Sqspi<'d>

Source§

fn drop(&mut self)

Executes the destructor for this type. Read more
Source§

impl<'d> ErrorType for Sqspi<'d>

Source§

type Error = Error

Errors returned by this NOR flash.
Source§

impl<'d> NorFlash for Sqspi<'d>

Source§

const WRITE_SIZE: usize = 4usize

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

const ERASE_SIZE: usize = 4_096usize

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<'d> NorFlash for Sqspi<'d>

Source§

const WRITE_SIZE: usize = 4usize

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

const ERASE_SIZE: usize = 4_096usize

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

async fn write(&mut self, offset: u32, data: &[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§

async 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<'d> ReadNorFlash for Sqspi<'d>

Source§

const READ_SIZE: usize = 4usize

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<'d> ReadNorFlash for Sqspi<'d>

Source§

const READ_SIZE: usize = 4usize

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

async fn read( &mut self, address: u32, data: &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> Freeze for Sqspi<'d>

§

impl<'d> !RefUnwindSafe for Sqspi<'d>

§

impl<'d> Send for Sqspi<'d>

§

impl<'d> Sync for Sqspi<'d>

§

impl<'d> Unpin for Sqspi<'d>

§

impl<'d> !UnwindSafe for Sqspi<'d>

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> Az for T

Source§

fn az<Dst>(self) -> Dst
where T: Cast<Dst>,

Casts the value.
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<Src, Dst> CastFrom<Src> for Dst
where Src: Cast<Dst>,

Source§

fn cast_from(src: Src) -> Dst

Casts the value.
Source§

impl<T> CheckedAs for T

Source§

fn checked_as<Dst>(self) -> Option<Dst>
where T: CheckedCast<Dst>,

Casts the value.
Source§

impl<Src, Dst> CheckedCastFrom<Src> for Dst
where Src: CheckedCast<Dst>,

Source§

fn checked_cast_from(src: Src) -> Option<Dst>

Casts the value.
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<Src, Dst> LosslessTryInto<Dst> for Src
where Dst: LosslessTryFrom<Src>,

Source§

fn lossless_try_into(self) -> Option<Dst>

Performs the conversion.
Source§

impl<Src, Dst> LossyInto<Dst> for Src
where Dst: LossyFrom<Src>,

Source§

fn lossy_into(self) -> Dst

Performs the conversion.
Source§

impl<T> OverflowingAs for T

Source§

fn overflowing_as<Dst>(self) -> (Dst, bool)
where T: OverflowingCast<Dst>,

Casts the value.
Source§

impl<Src, Dst> OverflowingCastFrom<Src> for Dst
where Src: OverflowingCast<Dst>,

Source§

fn overflowing_cast_from(src: Src) -> (Dst, bool)

Casts the value.
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> SaturatingAs for T

Source§

fn saturating_as<Dst>(self) -> Dst
where T: SaturatingCast<Dst>,

Casts the value.
Source§

impl<Src, Dst> SaturatingCastFrom<Src> for Dst
where Src: SaturatingCast<Dst>,

Source§

fn saturating_cast_from(src: Src) -> Dst

Casts the value.
Source§

impl<T> StrictAs for T

Source§

fn strict_as<Dst>(self) -> Dst
where T: StrictCast<Dst>,

Casts the value.
Source§

impl<Src, Dst> StrictCastFrom<Src> for Dst
where Src: StrictCast<Dst>,

Source§

fn strict_cast_from(src: Src) -> Dst

Casts the value.
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.
Source§

impl<T> UnwrappedAs for T

Source§

fn unwrapped_as<Dst>(self) -> Dst
where T: UnwrappedCast<Dst>,

Casts the value.
Source§

impl<Src, Dst> UnwrappedCastFrom<Src> for Dst
where Src: UnwrappedCast<Dst>,

Source§

fn unwrapped_cast_from(src: Src) -> Dst

Casts the value.
Source§

impl<T> WrappingAs for T

Source§

fn wrapping_as<Dst>(self) -> Dst
where T: WrappingCast<Dst>,

Casts the value.
Source§

impl<Src, Dst> WrappingCastFrom<Src> for Dst
where Src: WrappingCast<Dst>,

Source§

fn wrapping_cast_from(src: Src) -> Dst

Casts the value.
Source§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,