aboutsummaryrefslogtreecommitdiffstats
path: root/Projects
diff options
context:
space:
mode:
authorDean Camera <dean@fourwalledcubicle.com>2009-08-28 08:24:50 +0000
committerDean Camera <dean@fourwalledcubicle.com>2009-08-28 08:24:50 +0000
commit4bb236e9a05c5bae7a3ae6ee5c17572fa6af7d61 (patch)
treea28b86f2a5781512ddf67fcf211236528c6583fe /Projects
parent489515fbbf0f61ae63bcdd4b858a5fe59e90c0be (diff)
downloadlufa-4bb236e9a05c5bae7a3ae6ee5c17572fa6af7d61.tar.gz
lufa-4bb236e9a05c5bae7a3ae6ee5c17572fa6af7d61.tar.bz2
lufa-4bb236e9a05c5bae7a3ae6ee5c17572fa6af7d61.zip
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.
Diffstat (limited to 'Projects')
-rw-r--r--Projects/AVRISP/Lib/V2Protocol.c13
-rw-r--r--Projects/AVRISP/Lib/V2ProtocolTarget.c4
-rw-r--r--Projects/AVRISP/Lib/V2ProtocolTarget.h2
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;