Make CDC class bootloader hard-reset the AVR when exited instead of a soft-reset. Reduce size of the TeensyHID bootloader slightly.

Fix the TeensyHID bootloader for the larger USB AVR devices, since Paul uses a different (undocumented) addressing scheme on these devices.
This commit is contained in:
Dean Camera 2010-05-06 07:27:13 +00:00
parent add5192366
commit c3db72afdc
7 changed files with 29 additions and 35 deletions

View file

@ -93,7 +93,7 @@
/** Vendor usage page for the Teensy 2.0 board */
#define TEENSY_USAGEPAGE_20 0x1B
/** Vendor usage page for the Teensy++ 1.0 board */
/** Vendor usage page for the Teensy++ 2.0 board */
#define TEENSY_USAGEPAGE_20PP 0x1C
#if defined(USB_SERIES_2_AVR)

View file

@ -105,18 +105,24 @@ void EVENT_USB_Device_UnhandledControlRequest(void)
/* Wait until the command has been sent by the host */
while (!(Endpoint_IsOUTReceived()));
/* Read in the write destination address */
uint16_t PageAddress = Endpoint_Read_Word_LE();
/* Read in the write destination index */
uint16_t PageIndex = Endpoint_Read_Word_LE();
/* Check if the command is a program page command, or a start application command */
if (PageAddress == TEENSY_STARTAPPLICATION)
if (PageIndex == TEENSY_STARTAPPLICATION)
{
RunBootloader = false;
}
else
{
#if (SPM_PAGESIZE == 128)
uint16_t PageByteAddress = PageIndex;
#else
uint32_t PageByteAddress = ((uint32_t)PageIndex << 8);
#endif
/* Erase the given FLASH page, ready to be programmed */
boot_page_erase(PageAddress);
boot_page_erase(PageByteAddress);
boot_spm_busy_wait();
/* Write each of the FLASH page's bytes in sequence */
@ -134,15 +140,12 @@ void EVENT_USB_Device_UnhandledControlRequest(void)
}
/* Write the next data word to the FLASH page */
boot_page_fill(PageAddress + PageByte, Endpoint_Read_Word_LE());
boot_page_fill(PageByteAddress + PageByte, Endpoint_Read_Word_LE());
}
/* Write the filled FLASH page to memory */
boot_page_write(PageAddress);
boot_page_write(PageByteAddress);
boot_spm_busy_wait();
/* Re-enable RWW section */
boot_rww_enable();
}
Endpoint_ClearOUT();

View file

@ -13,7 +13,7 @@
* - AT90USB162 (Teensy 1.0)
* - AT90USB646 (Teensy++ 1.0)
* - ATMEGA32U4 (Teensy 2.0)
* - AT90USB1287 (Teensy++ 2.0)
* - AT90USB1286 (Teensy++ 2.0)
*
* \section SSec_Info USB Information:
*
@ -51,7 +51,9 @@
*
* Out of the box this bootloader builds for the ATMEGA32U4, and will fit into 2-4KB of bootloader space. For other
* devices, the makefile will need to be updated to reflect the altered MCU model and bootloader start address. When
* calculating the bootloader start address, use (TARGET_FLASH_SIZE_BYTES - 4096).
* calculating the bootloader start address, use (TARGET_FLASH_SIZE_BYTES - 4096) for targets where the bootloader
* compiles larger than 2KB, or (TARGET_FLASH_SIZE_BYTES - 2048) for smaller targets where the bootloader compiles
* under 2KB.
*
* This spoofs (with permission) the official Teensy bootloader's VID and PID, so that the software remains
* compatible with no changes.

View file

@ -68,7 +68,7 @@ BOARD =
# does not *change* the processor frequency - it should merely be updated to
# reflect the processor speed set externally so that the code can use accurate
# software delays.
F_CPU = 16000000
F_CPU = 8000000
# Input clock frequency.