Add bootloader to CI

This commit is contained in:
Ulf Lilleengen
2022-04-26 18:33:09 +02:00
parent 484e0acc63
commit da61611f8f
34 changed files with 163 additions and 173 deletions

View File

@ -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]

View File

@ -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);

View File

@ -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();

View File

@ -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();
}