Embassy
embassy-boot-rp

Crates

git

Versions

default

Flavors

Struct embassy_boot_rp::BootLoaderConfig

·
pub struct BootLoaderConfig<ACTIVE, DFU, STATE> {
    pub active: ACTIVE,
    pub dfu: DFU,
    pub state: STATE,
}
Expand description

Bootloader flash configuration holding the three flashes used by the bootloader

If only a single flash is actually used, then that flash should be partitioned into three partitions before use. The easiest way to do this is to use BootLoaderConfig::from_linkerfile_blocking which will partition the provided flash according to symbols defined in the linkerfile.

Fields§

§active: ACTIVE

Flash type used for the active partition - the partition which will be booted from.

§dfu: DFU

Flash type used for the dfu partition - the partition which will be swapped in when requested.

§state: STATE

Flash type used for the state partition.

Implementations§

source§

impl<'a, ACTIVE, DFU, STATE> BootLoaderConfig<BlockingPartition<'a, NoopRawMutex, ACTIVE>, BlockingPartition<'a, NoopRawMutex, DFU>, BlockingPartition<'a, NoopRawMutex, STATE>>
where ACTIVE: NorFlash, DFU: NorFlash, STATE: NorFlash,

source

pub fn from_linkerfile_blocking( active_flash: &'a Mutex<NoopRawMutex, RefCell<ACTIVE>>, dfu_flash: &'a Mutex<NoopRawMutex, RefCell<DFU>>, state_flash: &'a Mutex<NoopRawMutex, RefCell<STATE>> ) -> BootLoaderConfig<BlockingPartition<'a, NoopRawMutex, ACTIVE>, BlockingPartition<'a, NoopRawMutex, DFU>, BlockingPartition<'a, NoopRawMutex, STATE>>

Constructs a BootLoaderConfig instance from flash memory and address symbols defined in the linker file.

This method initializes BlockingPartition instances for the active, DFU (Device Firmware Update), and state partitions, leveraging start and end addresses specified by the linker. These partitions are critical for managing firmware updates, application state, and boot operations within the bootloader.

§Parameters
  • active_flash: A reference to a mutex-protected RefCell for the active partition’s flash interface.
  • dfu_flash: A reference to a mutex-protected RefCell for the DFU partition’s flash interface.
  • state_flash: A reference to a mutex-protected RefCell for the state partition’s flash interface.
§Safety

The method contains unsafe blocks for dereferencing raw pointers that represent the start and end addresses of the bootloader’s partitions in flash memory. It is crucial that these addresses are accurately defined in the memory.x file to prevent undefined behavior.

The caller must ensure that the memory regions defined by these symbols are valid and that the flash memory interfaces provided are compatible with these regions.

§Returns

A BootLoaderConfig instance with BlockingPartition instances for the active, DFU, and state partitions.

§Example
// Assume `active_flash`, `dfu_flash`, and `state_flash` all share the same flash memory interface.
let layout = Flash::new_blocking(p.FLASH).into_blocking_regions();
let flash = Mutex::new(RefCell::new(layout.bank1_region));

let config = BootLoaderConfig::from_linkerfile_blocking(&flash, &flash, &flash);
// `config` can now be used to create a `BootLoader` instance for managing boot operations.

Working examples can be found in the bootloader examples folder.

Auto Trait Implementations§

§

impl<ACTIVE, DFU, STATE> Freeze for BootLoaderConfig<ACTIVE, DFU, STATE>
where ACTIVE: Freeze, DFU: Freeze, STATE: Freeze,

§

impl<ACTIVE, DFU, STATE> RefUnwindSafe for BootLoaderConfig<ACTIVE, DFU, STATE>
where ACTIVE: RefUnwindSafe, DFU: RefUnwindSafe, STATE: RefUnwindSafe,

§

impl<ACTIVE, DFU, STATE> Send for BootLoaderConfig<ACTIVE, DFU, STATE>
where ACTIVE: Send, DFU: Send, STATE: Send,

§

impl<ACTIVE, DFU, STATE> Sync for BootLoaderConfig<ACTIVE, DFU, STATE>
where ACTIVE: Sync, DFU: Sync, STATE: Sync,

§

impl<ACTIVE, DFU, STATE> Unpin for BootLoaderConfig<ACTIVE, DFU, STATE>
where ACTIVE: Unpin, DFU: Unpin, STATE: Unpin,

§

impl<ACTIVE, DFU, STATE> UnwindSafe for BootLoaderConfig<ACTIVE, DFU, STATE>
where ACTIVE: UnwindSafe, DFU: UnwindSafe, STATE: UnwindSafe,

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

§

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