Unable to jump to HID bootloader from application

Tip / Sign in to post questions, reply, level up, and achieve exciting badges. Know more

cross mob
KaGr_1303411
Level 2
Level 2
First like received

I've been tearing my hair out trying to figure this one out for hours and hours and hours.

   

I have a HID bootloader.  It has a light, and a button to force enable it.  It works.  I also have HID firmware that works.

   

I'm trying to have software switch from the active firmware to the bootloader.  I call Bootloadable_Load, and the light flickers for a second, but it won't stay in the bootloader, and jumps back to the application immediately.

   

I've tried stopping and restarting USBFS on the bootloader, on the bootloadable application.  I've paused after calling stop, removed the start() commands from the bootloader (so it would match one of the cypress examples).  I've added delay loops in to try to delay starting the bootloader - it's acting almost like Bootloadable_Load is running the bootloader component directly, rather than the bootloadable firmware.

   

I've tried having the ISR set a global flag instead of directly jumping.

   

At this point, I don't know what could be causing the problem.  I've set my ISR to just call Bootloadable_Load every 10 seconds - the LED blinks for a very short time from the bootloader, then it goes right back into the main firmware.

   

The code is on GitHub (in the GHETT-IO folder, and Bootloader folder).  If anyone has experience with something like this, or ideas why it would happen, I'd be rather appreciative.

   

 

   

https://github.com/kategray/technomotion-io/tree/bootloader
https://github.com/kategray/technomotion-io/archive/bootloader.zip

0 Likes
1 Reply
AnkitaS_51
Employee
Employee
100 likes received 50 likes received 25 likes received

On device reset, the bootloader can wait for a command from the bootloader host or jump to the application code immediately. If this option is enabled, the bootloader waits for a command from the host until the timeout period specified by the Wait for command time parameter occurs. If the bootloader does not receive this command within the specified timeout interval, the active bootloadable project in the flash is executed after the timeout.

0 Likes