DFU bootloader AN2662
80/83 Doc ID 14156 Rev 1
The DFU Leave operation is effectively executed only when a DFU_GETSTATUS request is
issued by the Host. If the status returned by the device is other than dfuMANIFEST, then an
error has occurred. After this operation, the device frees all used resources, disconnects
itself and jumps to the destination given by the Address Pointer in order to execute the code
loaded in this address.
The Address Pointer has to be set (using Set Address Pointer command) before launching
the Leave DFU routine, otherwise, the bootloader will jump to the default address (internal
Flash memory start address: 0x08000000).
The Address Pointer can also be set through the last Write Memory operation: if a download
operation is performed, the Address Pointer used for this download will be stored and used
later for the jump.
Note: If the Address Pointer points to an address that doesn’t contain executable code, then the
device will be reset and, depending on the state of the boot pins, may re-enter bootloader
mode.
Since the Bootloader DFU application is not manifestation-tolerant, the device will not be
able to respond to Host requests after a manifestation phase is completed.
A second DFU_GETSTATUS request may also be issued (if the device is still connected) to
check if the command has been correctly executed. If the device fails to execute the
command it will return an error status (depending on the error type).
Note: 1 The Jump to application works only if the user application sets the vector table correctly to
point to the application address
2 When performing a jump from the Bootloader to a loaded application code which uses the
USB IP, the user application has to disable all pending USB interrupts and reset the core
before enabling interrupts. Otherwise, a pending interrupt (issued from the bootloader code)
may interfere with the user code and cause a functional failure. This procedure is not
needed after exiting system memory boot mode.