Fixed software application start command broken in the DFU class bootloader when dfu-programmer is used due to application start address corruption.

This commit is contained in:
Dean Camera 2010-08-05 09:31:51 +00:00
parent 98947e3750
commit 3c72896e84
4 changed files with 20 additions and 12 deletions

View File

@ -121,6 +121,7 @@ LUFA_OPTS += -D USE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENAB
LUFA_OPTS += -D NO_INTERNAL_SERIAL LUFA_OPTS += -D NO_INTERNAL_SERIAL
LUFA_OPTS += -D NO_DEVICE_SELF_POWER LUFA_OPTS += -D NO_DEVICE_SELF_POWER
LUFA_OPTS += -D NO_DEVICE_REMOTE_WAKEUP LUFA_OPTS += -D NO_DEVICE_REMOTE_WAKEUP
LUFA_OPTS += -D NO_STREAM_CALLBACKS
# Create the LUFA source path variables by including the LUFA root makefile # Create the LUFA source path variables by including the LUFA root makefile

View File

@ -634,9 +634,22 @@ static void ProcessWriteCommand(void)
/* Indicate that the bootloader is terminating */ /* Indicate that the bootloader is terminating */
WaitForExit = true; WaitForExit = true;
/* Check if empty request data array - an empty request after a filled request retains the /* Check if data supplied for the Start Program command - no data executes the program */
previous valid request data, but initializes the reset */ if (SentCommand.DataSize)
if (!(SentCommand.DataSize)) {
if (SentCommand.Data[1] == 0x01) // Start via jump
{
union
{
uint8_t Bytes[2];
AppPtr_t FuncPtr;
} Address = {.Bytes = {SentCommand.Data[4], SentCommand.Data[3]}};
/* Load in the jump address into the application start address pointer */
AppStartPtr = Address.FuncPtr;
}
}
else
{ {
if (SentCommand.Data[1] == 0x00) // Start via watchdog if (SentCommand.Data[1] == 0x00) // Start via watchdog
{ {
@ -645,15 +658,6 @@ static void ProcessWriteCommand(void)
} }
else // Start via jump else // Start via jump
{ {
/* Load in the jump address into the application start address pointer */
union
{
uint8_t Bytes[2];
AppPtr_t FuncPtr;
} Address = {.Bytes = {SentCommand.Data[4], SentCommand.Data[3]}};
AppStartPtr = Address.FuncPtr;
/* Set the flag to terminate the bootloader at next opportunity */ /* Set the flag to terminate the bootloader at next opportunity */
RunBootloader = false; RunBootloader = false;
} }

View File

@ -122,6 +122,7 @@ LUFA_OPTS += -D USE_STATIC_OPTIONS="(USB_DEVICE_OPT_FULLSPEED | USB_OPT_REG_ENAB
LUFA_OPTS += -D NO_INTERNAL_SERIAL LUFA_OPTS += -D NO_INTERNAL_SERIAL
LUFA_OPTS += -D NO_DEVICE_SELF_POWER LUFA_OPTS += -D NO_DEVICE_SELF_POWER
LUFA_OPTS += -D NO_DEVICE_REMOTE_WAKEUP LUFA_OPTS += -D NO_DEVICE_REMOTE_WAKEUP
LUFA_OPTS += -D NO_STREAM_CALLBACKS
# Create the LUFA source path variables by including the LUFA root makefile # Create the LUFA source path variables by including the LUFA root makefile

View File

@ -67,6 +67,8 @@
* operation to occur (thanks to Bob Paddock) * operation to occur (thanks to Bob Paddock)
* - Fixed Serial peripheral driver not turning off the USART before reconfiguring it, which would cause incorrect operation * - Fixed Serial peripheral driver not turning off the USART before reconfiguring it, which would cause incorrect operation
* to occur (thanks to Bob Paddock) * to occur (thanks to Bob Paddock)
* - Fixed software application start command broken in the DFU class bootloader when dfu-programmer is used due to application
* start address corruption
* *
* \section Sec_ChangeLog100513 Version 100513 * \section Sec_ChangeLog100513 Version 100513
* <b>New:</b> * <b>New:</b>