From ba2d74b93676c335eb41cdb6d75978cf20a9340a Mon Sep 17 00:00:00 2001 From: Tilman Sauerbeck Date: Thu, 7 Nov 2019 22:05:49 +0100 Subject: [PATCH] bootloader: Use distinct USB PIDs depending on location in flash. The intermediate bootloader binary (located at 0x8000) now uses USB PID 0x635b and the final bootloader binary (located at 0x0) uses USB PID 0x635c. This lets us find out what binary we're talking to depending on how it registers on the USB. --- src/bootloader/main.rs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/bootloader/main.rs b/src/bootloader/main.rs index 50c32a4..ca459fd 100644 --- a/src/bootloader/main.rs +++ b/src/bootloader/main.rs @@ -49,6 +49,12 @@ const APPLICATION_ADDR: u32 = 0x0; #[cfg(bootloader_type = "final")] const APPLICATION_ADDR: u32 = 0x8000; +#[cfg(bootloader_type = "intermediate")] +const USB_PID: u16 = 0x635b; + +#[cfg(bootloader_type = "final")] +const USB_PID: u16 = 0x635c; + unsafe fn application_missing() -> bool { let first_app_word = Reg32::new(APPLICATION_ADDR); @@ -79,7 +85,7 @@ pub unsafe extern fn main() { port::set_pull(port::PORTE, 24, port::Pull::Up); if application_missing() || bootloader_requested() { - usb_serial::init(0xf055, 0x635c); + usb_serial::init(0xf055, USB_PID); let mut b = bootloader::Bootloader::new(); -- 2.30.2