Embassy
embassy-boot

Crates

git

Versions

default

Flavors

Struct embassy_boot::BootLoaderConfig

source ·
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: NorFlash, DFU: NorFlash, STATE: NorFlash> BootLoaderConfig<BlockingPartition<'a, NoopRawMutex, ACTIVE>, BlockingPartition<'a, NoopRawMutex, DFU>, BlockingPartition<'a, NoopRawMutex, STATE>>

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>> ) -> Self

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

§

type Output = T

Should always be Self
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.