pub struct FirmwareUpdaterConfig<DFU, STATE> {
pub dfu: DFU,
pub state: STATE,
}
Expand description
Firmware updater flash configuration holding the two flashes used by the updater
If only a single flash is actually used, then that flash should be partitioned into two partitions before use.
The easiest way to do this is to use FirmwareUpdaterConfig::from_linkerfile
or FirmwareUpdaterConfig::from_linkerfile_blocking
which will partition
the provided flash according to symbols defined in the linkerfile.
Fields§
§dfu: DFU
The dfu flash partition
state: STATE
The state flash partition
Implementations§
Source§impl<'a, DFU, STATE> FirmwareUpdaterConfig<Partition<'a, NoopRawMutex, DFU>, Partition<'a, NoopRawMutex, STATE>>
impl<'a, DFU, STATE> FirmwareUpdaterConfig<Partition<'a, NoopRawMutex, DFU>, Partition<'a, NoopRawMutex, STATE>>
Sourcepub fn from_linkerfile(
dfu_flash: &'a Mutex<NoopRawMutex, DFU>,
state_flash: &'a Mutex<NoopRawMutex, STATE>,
) -> FirmwareUpdaterConfig<Partition<'a, NoopRawMutex, DFU>, Partition<'a, NoopRawMutex, STATE>>
pub fn from_linkerfile( dfu_flash: &'a Mutex<NoopRawMutex, DFU>, state_flash: &'a Mutex<NoopRawMutex, STATE>, ) -> FirmwareUpdaterConfig<Partition<'a, NoopRawMutex, DFU>, Partition<'a, NoopRawMutex, STATE>>
Create a firmware updater config from the flash and address symbols defined in the linkerfile
Source§impl<'a, DFU, STATE> FirmwareUpdaterConfig<BlockingPartition<'a, NoopRawMutex, DFU>, BlockingPartition<'a, NoopRawMutex, STATE>>
impl<'a, DFU, STATE> FirmwareUpdaterConfig<BlockingPartition<'a, NoopRawMutex, DFU>, BlockingPartition<'a, NoopRawMutex, STATE>>
Sourcepub fn from_linkerfile_blocking(
dfu_flash: &'a Mutex<NoopRawMutex, RefCell<DFU>>,
state_flash: &'a Mutex<NoopRawMutex, RefCell<STATE>>,
) -> FirmwareUpdaterConfig<BlockingPartition<'a, NoopRawMutex, DFU>, BlockingPartition<'a, NoopRawMutex, STATE>>
pub fn from_linkerfile_blocking( dfu_flash: &'a Mutex<NoopRawMutex, RefCell<DFU>>, state_flash: &'a Mutex<NoopRawMutex, RefCell<STATE>>, ) -> FirmwareUpdaterConfig<BlockingPartition<'a, NoopRawMutex, DFU>, BlockingPartition<'a, NoopRawMutex, STATE>>
Constructs a FirmwareUpdaterConfig
instance from flash memory and address symbols defined in the linker file.
This method initializes BlockingPartition
instances for the 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
dfu_flash
: A reference to a mutex-protectedRefCell
for the DFU partition’s flash interface.state_flash
: A reference to a mutex-protectedRefCell
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 FirmwareUpdaterConfig
instance with BlockingPartition
instances for the DFU, and state partitions.
§Example
// Assume `dfu_flash`, and `state_flash` 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 = FirmwareUpdaterConfig::from_linkerfile_blocking(&flash, &flash);
// `config` can now be used to create a `FirmwareUpdater` instance for managing boot operations.
Working examples can be found in the bootloader examples folder.