Add bootloader to CI
This commit is contained in:
@ -27,10 +27,6 @@ defmt = [
|
||||
"embassy-stm32/defmt",
|
||||
]
|
||||
debug = ["defmt-rtt"]
|
||||
flash-2k = ["embassy-boot/write-8"]
|
||||
flash-128 = ["embassy-boot/write-4"]
|
||||
flash-256 = ["embassy-boot/write-4"]
|
||||
invert-erase = ["embassy-boot/invert-erase"]
|
||||
thumbv6 = []
|
||||
|
||||
[profile.dev]
|
||||
|
@ -8,11 +8,11 @@ MEMORY
|
||||
RAM (rwx) : ORIGIN = 0x20000008, LENGTH = 16K
|
||||
}
|
||||
|
||||
__bootloader_state_start = ORIGIN(BOOTLOADER_STATE);
|
||||
__bootloader_state_end = ORIGIN(BOOTLOADER_STATE) + LENGTH(BOOTLOADER_STATE);
|
||||
__bootloader_state_start = ORIGIN(BOOTLOADER_STATE) - ORIGIN(FLASH);
|
||||
__bootloader_state_end = ORIGIN(BOOTLOADER_STATE) + LENGTH(BOOTLOADER_STATE) - ORIGIN(FLASH);
|
||||
|
||||
__bootloader_active_start = ORIGIN(ACTIVE);
|
||||
__bootloader_active_end = ORIGIN(ACTIVE) + LENGTH(ACTIVE);
|
||||
__bootloader_active_start = ORIGIN(ACTIVE) - ORIGIN(FLASH);
|
||||
__bootloader_active_end = ORIGIN(ACTIVE) + LENGTH(ACTIVE) - ORIGIN(FLASH);
|
||||
|
||||
__bootloader_dfu_start = ORIGIN(DFU);
|
||||
__bootloader_dfu_end = ORIGIN(DFU) + LENGTH(DFU);
|
||||
__bootloader_dfu_start = ORIGIN(DFU) - ORIGIN(FLASH);
|
||||
__bootloader_dfu_end = ORIGIN(DFU) + LENGTH(DFU) - ORIGIN(FLASH);
|
||||
|
@ -5,12 +5,13 @@
|
||||
mod fmt;
|
||||
|
||||
pub use embassy_boot::{FirmwareUpdater, FlashProvider, Partition, SingleFlashProvider, State};
|
||||
use embassy_stm32::flash::{ERASE_SIZE, ERASE_VALUE, WRITE_SIZE};
|
||||
|
||||
pub struct BootLoader<const PAGE_SIZE: usize> {
|
||||
boot: embassy_boot::BootLoader<PAGE_SIZE>,
|
||||
pub struct BootLoader {
|
||||
boot: embassy_boot::BootLoader<ERASE_SIZE, WRITE_SIZE, ERASE_VALUE>,
|
||||
}
|
||||
|
||||
impl<const PAGE_SIZE: usize> BootLoader<PAGE_SIZE> {
|
||||
impl BootLoader {
|
||||
/// Create a new bootloader instance using parameters from linker script
|
||||
pub fn default() -> Self {
|
||||
extern "C" {
|
||||
@ -65,6 +66,7 @@ impl<const PAGE_SIZE: usize> BootLoader<PAGE_SIZE> {
|
||||
|
||||
pub unsafe fn load(&mut self, start: usize) -> ! {
|
||||
trace!("Loading app at 0x{:x}", start);
|
||||
#[allow(unused_mut)]
|
||||
let mut p = cortex_m::Peripherals::steal();
|
||||
#[cfg(not(feature = "thumbv6"))]
|
||||
p.SCB.invalidate_icache();
|
||||
|
@ -9,9 +9,6 @@ use defmt_rtt as _;
|
||||
use embassy_boot_stm32::*;
|
||||
use embassy_stm32::flash::Flash;
|
||||
|
||||
#[cfg(not(any(feature = "flash-2k", feature = "flash-256", feature = "flash-128")))]
|
||||
compile_error!("No flash size specified. Must specify exactly one of the following features: flash-2k, flash-256, flash-128");
|
||||
|
||||
#[entry]
|
||||
fn main() -> ! {
|
||||
let p = embassy_stm32::init(Default::default());
|
||||
@ -24,15 +21,7 @@ fn main() -> ! {
|
||||
}
|
||||
*/
|
||||
|
||||
#[cfg(feature = "flash-2k")]
|
||||
let mut bl: BootLoader<2048> = BootLoader::default();
|
||||
|
||||
#[cfg(feature = "flash-256")]
|
||||
let mut bl: BootLoader<256> = BootLoader::default();
|
||||
|
||||
#[cfg(feature = "flash-128")]
|
||||
let mut bl: BootLoader<128> = BootLoader::default();
|
||||
|
||||
let mut bl = BootLoader::default();
|
||||
let mut flash = Flash::unlock(p.FLASH);
|
||||
let start = bl.prepare(&mut SingleFlashProvider::new(&mut flash));
|
||||
core::mem::drop(flash);
|
||||
@ -55,8 +44,5 @@ unsafe fn DefaultHandler(_: i16) -> ! {
|
||||
|
||||
#[panic_handler]
|
||||
fn panic(_info: &core::panic::PanicInfo) -> ! {
|
||||
unsafe {
|
||||
cortex_m::asm::udf();
|
||||
core::hint::unreachable_unchecked();
|
||||
}
|
||||
cortex_m::asm::udf();
|
||||
}
|
||||
|
Reference in New Issue
Block a user