From c8b72f955f1fd17dbc90254b56e6596ba70660cd Mon Sep 17 00:00:00 2001 From: Dean Camera Date: Mon, 7 Sep 2009 07:57:00 +0000 Subject: [PATCH] Corrected incorrect signature bytes for the AT90USB82 and added support for the ATMEGAXX2 variant AVRs to the DFU bootloader. Added warning to the EVENT_USB_Device_Connect() and EVENT_USB_Device_Disconnect() events that they may be fired multiple times during device enumeration on the series 2 AVRs. --- Bootloaders/DFU/BootloaderDFU.c | 1 + Bootloaders/DFU/Descriptors.h | 40 ++++++++++++++++++----------- LUFA/Drivers/USB/HighLevel/Events.h | 10 ++++++-- LUFA/ManPages/ChangeLog.txt | 3 ++- 4 files changed, 36 insertions(+), 18 deletions(-) diff --git a/Bootloaders/DFU/BootloaderDFU.c b/Bootloaders/DFU/BootloaderDFU.c index d7af1e6ca6..71b37ea68d 100644 --- a/Bootloaders/DFU/BootloaderDFU.c +++ b/Bootloaders/DFU/BootloaderDFU.c @@ -92,6 +92,7 @@ uint16_t StartAddr = 0x0000; */ uint16_t EndAddr = 0x0000; + /** Main program entry point. This routine configures the hardware required by the bootloader, then continuously * runs the bootloader processing routine until instructed to soft-exit, or hard-reset via the watchdog to start * the loaded application code. diff --git a/Bootloaders/DFU/Descriptors.h b/Bootloaders/DFU/Descriptors.h index 0943ef32b7..9eadf9d4e1 100644 --- a/Bootloaders/DFU/Descriptors.h +++ b/Bootloaders/DFU/Descriptors.h @@ -78,26 +78,16 @@ #define AVR_SIGNATURE_1 0x1E #define AVR_SIGNATURE_2 0x96 #define AVR_SIGNATURE_3 0x82 - #elif defined(__AVR_AT90USB647__) - #define PRODUCT_ID_CODE 0x2FF9 - #define AVR_SIGNATURE_1 0x1E - #define AVR_SIGNATURE_2 0x96 - #define AVR_SIGNATURE_3 0x82 - #elif defined(__AVR_AT90USB162__) - #define PRODUCT_ID_CODE 0x2FFA - #define AVR_SIGNATURE_1 0x1E - #define AVR_SIGNATURE_2 0x94 - #define AVR_SIGNATURE_3 0x82 - #elif defined(__AVR_AT90USB82__) - #define PRODUCT_ID_CODE 0x2FF7 - #define AVR_SIGNATURE_1 0x1E - #define AVR_SIGNATURE_2 0x94 - #define AVR_SIGNATURE_3 0x82 #elif defined(__AVR_ATmega32U6__) #define PRODUCT_ID_CODE 0x2FFB #define AVR_SIGNATURE_1 0x1E #define AVR_SIGNATURE_2 0x95 #define AVR_SIGNATURE_3 0x88 + #elif defined(__AVR_AT90USB647__) + #define PRODUCT_ID_CODE 0x2FF9 + #define AVR_SIGNATURE_1 0x1E + #define AVR_SIGNATURE_2 0x96 + #define AVR_SIGNATURE_3 0x82 #elif defined(__AVR_ATmega32U4__) #define PRODUCT_ID_CODE 0x2FF4 #define AVR_SIGNATURE_1 0x1E @@ -108,6 +98,26 @@ #define AVR_SIGNATURE_1 0x1E #define AVR_SIGNATURE_2 0x94 #define AVR_SIGNATURE_3 0x88 + #elif defined(__AVR_AT90USB162__) + #define PRODUCT_ID_CODE 0x2FFA + #define AVR_SIGNATURE_1 0x1E + #define AVR_SIGNATURE_2 0x94 + #define AVR_SIGNATURE_3 0x82 + #elif defined(__AVR_ATmega8U2__) + #define PRODUCT_ID_CODE 0x2FF7 + #define AVR_SIGNATURE_1 0x1E + #define AVR_SIGNATURE_2 0x93 + #define AVR_SIGNATURE_3 0x82 + #elif defined(__AVR_ATmega16U2__) + #define PRODUCT_ID_CODE 0x2FEF + #define AVR_SIGNATURE_1 0x1E + #define AVR_SIGNATURE_2 0x94 + #define AVR_SIGNATURE_3 0x89 + #elif defined(__AVR_AT90USB82__) + #define PRODUCT_ID_CODE 0x2FEE + #define AVR_SIGNATURE_1 0x1E + #define AVR_SIGNATURE_2 0x93 + #define AVR_SIGNATURE_3 0x89 #else #error The selected AVR part is not currently supported by this bootloader. #endif diff --git a/LUFA/Drivers/USB/HighLevel/Events.h b/LUFA/Drivers/USB/HighLevel/Events.h index 9b60a957b1..5a007ff2a4 100644 --- a/LUFA/Drivers/USB/HighLevel/Events.h +++ b/LUFA/Drivers/USB/HighLevel/Events.h @@ -148,13 +148,16 @@ /** Event for USB device connection. This event fires when the AVR in device mode and the device is connected * to a host, beginning the enumeration process, measured by a rising level on the AVR's VBUS pin. * - * \note For the smaller USB AVRs (AT90USBXX2) with limited USB controllers, VBUS is not available to the USB controller. + * \note For the smaller series 2 USB AVRs with limited USB controllers, VBUS is not available to the USB controller. * this means that the current connection state is derived from the bus suspension and wake up events by default, * which is not always accurate (host may suspend the bus while still connected). If the actual connection state * needs to be determined, VBUS should be routed to an external pin, and the auto-detect behaviour turned off by * passing the NO_LIMITED_CONTROLLER_CONNECT token to the compiler via the -D switch at compile time. The connection * and disconnection events may be manually fired, and the \ref USB_DeviceState global changed manually. * + * \note This event may fire multiple times during device enumeration on the series 2 USB AVRs with limited USB controllers + * if NO_LIMITED_CONTROLLER_CONNECT is not defined. + * * \see USBTask.h for more information on the USB management task and reducing CPU usage. */ void EVENT_USB_Device_Connect(void); @@ -162,13 +165,16 @@ /** Event for USB device disconnection. This event fires when the AVR in device mode and the device is disconnected * from a host, measured by a falling level on the AVR's VBUS pin. * - * \note For the smaller USB AVRs (AT90USBXX2) with limited USB controllers, VBUS is not available to the USB controller. + * \note For the smaller series 2 USB AVRs with limited USB controllers, VBUS is not available to the USB controller. * this means that the current connection state is derived from the bus suspension and wake up events by default, * which is not always accurate (host may suspend the bus while still connected). If the actual connection state * needs to be determined, VBUS should be routed to an external pin, and the auto-detect behaviour turned off by * passing the NO_LIMITED_CONTROLLER_CONNECT token to the compiler via the -D switch at compile time. The connection * and disconnection events may be manually fired, and the \ref USB_DeviceState global changed manually. * + * \note This event may fire multiple times during device enumeration on the series 2 USB AVRs with limited USB controllers + * if NO_LIMITED_CONTROLLER_CONNECT is not defined. + * * \see USBTask.h for more information on the USB management task and reducing CPU usage. */ void EVENT_USB_Device_Disconnect(void); diff --git a/LUFA/ManPages/ChangeLog.txt b/LUFA/ManPages/ChangeLog.txt index 0bdb57ebf7..b27b724ed7 100644 --- a/LUFA/ManPages/ChangeLog.txt +++ b/LUFA/ManPages/ChangeLog.txt @@ -60,7 +60,8 @@ * - CDC based demos and project now work under 64 bit versions of Windows (thanks to Ronny Hanson, Thomas Bleeker) * - Re-add in flip, flip-ee, dfu and dfu-ee targets to project makefiles (thanks to Opendous Inc.) * - Fix allowable F_CPU values comment in project makefiles - * - Fixed DFU and CDC class bootloaders on the AT90USBXXX2 series USB AVRs + * - Fixed DFU and CDC class bootloaders on the series 2 USB AVRs, corrected invalid signatures, added support for the new + * ATMEGAxxx2 series 2 variant AVRs to the DFU bootloader * * * \section Sec_ChangeLog090810 Version 090810