From b1226e2bd4adc31d81d02faf507f3d9c5dfe850e Mon Sep 17 00:00:00 2001 From: Tilman Sauerbeck Date: Tue, 9 Jul 2019 06:43:39 +0200 Subject: [PATCH] bootloader: Only attempt to jump to application if there is any. We now read the first word from flash where the application is installed and compare against 0xffffffff to see if programming succeeded. --- src/bootloader/main.rs | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/bootloader/main.rs b/src/bootloader/main.rs index 0d29549..8c6f149 100644 --- a/src/bootloader/main.rs +++ b/src/bootloader/main.rs @@ -30,12 +30,15 @@ extern crate common; mod flash; mod bootloader; +use common::register; use common::clock; use common::systick; use common::port; use common::gpio; use common::usb_serial; +type Reg32 = register::Register; + extern { fn jump_to_application(address: u32); } @@ -46,6 +49,12 @@ const APPLICATION_ADDR: u32 = 0x0; #[cfg(bootloader_type = "final")] const APPLICATION_ADDR: u32 = 0x8000; +unsafe fn application_missing() -> bool { + let first_app_word = Reg32::new(APPLICATION_ADDR); + + first_app_word.read() == 0xffffffff +} + fn bootloader_requested() -> bool { let start_ticks = systick::now(); @@ -68,12 +77,12 @@ pub unsafe extern fn main() { port::set_af(port::PORTE, 24, 1); port::set_pull(port::PORTE, 24, port::Pull::Up); - if bootloader_requested() { + if application_missing() || bootloader_requested() { usb_serial::init(0xf055, 0x635c); let mut b = bootloader::Bootloader::new(); - while b.run() { + while b.run() || application_missing() { } } -- 2.30.2