diff options
Diffstat (limited to 'Projects/AVRISP')
-rw-r--r-- | Projects/AVRISP/Lib/V2Protocol.c | 13 | ||||
-rw-r--r-- | Projects/AVRISP/Lib/V2ProtocolTarget.c | 4 | ||||
-rw-r--r-- | Projects/AVRISP/Lib/V2ProtocolTarget.h | 2 |
3 files changed, 16 insertions, 3 deletions
diff --git a/Projects/AVRISP/Lib/V2Protocol.c b/Projects/AVRISP/Lib/V2Protocol.c index 3a1b78efd..3aa2d89ca 100644 --- a/Projects/AVRISP/Lib/V2Protocol.c +++ b/Projects/AVRISP/Lib/V2Protocol.c @@ -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));
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_ClearOUT();
@@ -407,7 +419,6 @@ static void V2Protocol_Command_ProgramMemory(uint8_t V2Command) Endpoint_Write_Byte(V2Command);
Endpoint_Write_Byte(ProgrammingStatus);
-
Endpoint_ClearIN();
}
diff --git a/Projects/AVRISP/Lib/V2ProtocolTarget.c b/Projects/AVRISP/Lib/V2ProtocolTarget.c index 9c6ccf4c6..24cd941a4 100644 --- a/Projects/AVRISP/Lib/V2ProtocolTarget.c +++ b/Projects/AVRISP/Lib/V2ProtocolTarget.c @@ -155,13 +155,15 @@ uint8_t V2Protocol_WaitWhileTargetBusy(void) {
TCNT0 = 0;
+ bool DeviceBusy;
+
do
{
SPI_SendByte(0xF0);
SPI_SendByte(0x00);
SPI_SendByte(0x00);
- bool DeviceBusy = (SPI_ReceiveByte() & 0x01);
+ DeviceBusy = (SPI_ReceiveByte() & 0x01);
}
while (DeviceBusy && (TCNT0 < TARGET_BUSY_TIMEOUT_MS));
diff --git a/Projects/AVRISP/Lib/V2ProtocolTarget.h b/Projects/AVRISP/Lib/V2ProtocolTarget.h index 1e0364d9c..6322b9f33 100644 --- a/Projects/AVRISP/Lib/V2ProtocolTarget.h +++ b/Projects/AVRISP/Lib/V2ProtocolTarget.h @@ -52,7 +52,7 @@ #define TOTAL_PROGRAMMING_SPEEDS 7
/** 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: */
extern uint32_t CurrentAddress;
|