diff options
Diffstat (limited to 'firmware')
-rw-r--r-- | firmware/atmel_softpack_libraries/usb/device/dfu/dfu.h | 4 | ||||
-rw-r--r-- | firmware/atmel_softpack_libraries/usb/device/dfu/dfu_runtime.c | 7 |
2 files changed, 7 insertions, 4 deletions
diff --git a/firmware/atmel_softpack_libraries/usb/device/dfu/dfu.h b/firmware/atmel_softpack_libraries/usb/device/dfu/dfu.h index 5bd8684..84ce14e 100644 --- a/firmware/atmel_softpack_libraries/usb/device/dfu/dfu.h +++ b/firmware/atmel_softpack_libraries/usb/device/dfu/dfu.h @@ -39,8 +39,8 @@ struct dfu_desc { #define DFU_FUNC_DESC { \ .bLength = USB_DT_DFU_SIZE, \ .bDescriptorType = USB_DT_DFU, \ - .bmAttributes = USB_DFU_CAN_UPLOAD | USB_DFU_CAN_DOWNLOAD, \ - .wDetachTimeOut = 0xff00, \ + .bmAttributes = USB_DFU_CAN_UPLOAD | USB_DFU_CAN_DOWNLOAD | USB_DFU_WILL_DETACH, \ + .wDetachTimeOut = 0x00, \ .wTransferSize = BOARD_DFU_PAGE_SIZE, \ .bcdDFUVersion = 0x0100, \ } diff --git a/firmware/atmel_softpack_libraries/usb/device/dfu/dfu_runtime.c b/firmware/atmel_softpack_libraries/usb/device/dfu/dfu_runtime.c index 4467cc9..f2cf64c 100644 --- a/firmware/atmel_softpack_libraries/usb/device/dfu/dfu_runtime.c +++ b/firmware/atmel_softpack_libraries/usb/device/dfu/dfu_runtime.c @@ -165,6 +165,8 @@ void USBDFU_Runtime_RequestHandler(const USBGenericRequest *request) * will then trigger DFURT_SwitchToDFU() below */ TRACE_DEBUG("\r\n====dfu_detach\n\r"); g_dfu->state = DFU_STATE_appDETACH; + USBD_Write(0, 0, 0, 0, 0); + DFURT_SwitchToDFU(); ret = DFU_RET_ZLP; goto out; break; @@ -209,13 +211,14 @@ out: void DFURT_SwitchToDFU(void) { + __disable_irq(); + /* store the magic value that the DFU loader can detect and * activate itself, rather than boot into the application */ g_dfu->magic = USB_DFU_MAGIC; - + __DMB(); /* Disconnect the USB by removing the pull-up */ USBD_Disconnect(); - __disable_irq(); /* reset the processor, we will start execution with the * ResetVector of the bootloader */ |