Increase AVRISP command timeout to 240ms up from 150ms to prevent some ISP commands from timing out too early.

Add check to the PROGRAM FLASH ISP and PROGRAM EEPROM ISP handler to return an explicit error when the host attempts to write more data than the device is able to buffer.
pull/1469/head
Dean Camera 16 years ago
parent 489515fbbf
commit 4bb236e9a0

@ -308,6 +308,18 @@ static void V2Protocol_Command_ProgramMemory(uint8_t V2Command)
Endpoint_Read_Stream_LE(&Write_Memory_Params, sizeof(Write_Memory_Params) - sizeof(Write_Memory_Params.ProgData)); Endpoint_Read_Stream_LE(&Write_Memory_Params, sizeof(Write_Memory_Params) - sizeof(Write_Memory_Params.ProgData));
Write_Memory_Params.BytesToWrite = SwapEndian_16(Write_Memory_Params.BytesToWrite); Write_Memory_Params.BytesToWrite = SwapEndian_16(Write_Memory_Params.BytesToWrite);
if (Write_Memory_Params.BytesToWrite > sizeof(Write_Memory_Params.ProgData))
{
Endpoint_ClearOUT();
Endpoint_SetEndpointDirection(ENDPOINT_DIR_IN);
Endpoint_Write_Byte(V2Command);
Endpoint_Write_Byte(STATUS_CMD_FAILED);
Endpoint_ClearIN();
return;
}
Endpoint_Read_Stream_LE(&Write_Memory_Params.ProgData, Write_Memory_Params.BytesToWrite); Endpoint_Read_Stream_LE(&Write_Memory_Params.ProgData, Write_Memory_Params.BytesToWrite);
Endpoint_ClearOUT(); Endpoint_ClearOUT();
@ -407,7 +419,6 @@ static void V2Protocol_Command_ProgramMemory(uint8_t V2Command)
Endpoint_Write_Byte(V2Command); Endpoint_Write_Byte(V2Command);
Endpoint_Write_Byte(ProgrammingStatus); Endpoint_Write_Byte(ProgrammingStatus);
Endpoint_ClearIN(); Endpoint_ClearIN();
} }

@ -155,13 +155,15 @@ uint8_t V2Protocol_WaitWhileTargetBusy(void)
{ {
TCNT0 = 0; TCNT0 = 0;
bool DeviceBusy;
do do
{ {
SPI_SendByte(0xF0); SPI_SendByte(0xF0);
SPI_SendByte(0x00); SPI_SendByte(0x00);
SPI_SendByte(0x00); SPI_SendByte(0x00);
bool DeviceBusy = (SPI_ReceiveByte() & 0x01); DeviceBusy = (SPI_ReceiveByte() & 0x01);
} }
while (DeviceBusy && (TCNT0 < TARGET_BUSY_TIMEOUT_MS)); while (DeviceBusy && (TCNT0 < TARGET_BUSY_TIMEOUT_MS));

@ -52,7 +52,7 @@
#define TOTAL_PROGRAMMING_SPEEDS 7 #define TOTAL_PROGRAMMING_SPEEDS 7
/** Timeout in milliseconds of target busy-wait loops waiting for a command to complete */ /** Timeout in milliseconds of target busy-wait loops waiting for a command to complete */
#define TARGET_BUSY_TIMEOUT_MS 150 #define TARGET_BUSY_TIMEOUT_MS 240
/* External Variables: */ /* External Variables: */
extern uint32_t CurrentAddress; extern uint32_t CurrentAddress;

Loading…
Cancel
Save