From 279e1b6ece7fbc90db6cb642f1c289b45648cf9c Mon Sep 17 00:00:00 2001 From: Dean Camera Date: Fri, 4 Feb 2011 18:17:31 +0000 Subject: Fixed programming errors in the AVRISP-MKII project when the programming packet is a round multiple of the endpoint bank size under avrdude (thanks to Steffan Woltjer). --- Projects/AVRISP-MKII/Lib/XPROG/XPROGProtocol.c | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'Projects/AVRISP-MKII/Lib/XPROG/XPROGProtocol.c') diff --git a/Projects/AVRISP-MKII/Lib/XPROG/XPROGProtocol.c b/Projects/AVRISP-MKII/Lib/XPROG/XPROGProtocol.c index 1b105ddb0..ffc07ad33 100644 --- a/Projects/AVRISP-MKII/Lib/XPROG/XPROGProtocol.c +++ b/Projects/AVRISP-MKII/Lib/XPROG/XPROGProtocol.c @@ -250,6 +250,15 @@ static void XPROGProtocol_WriteMemory(void) WriteMemory_XPROG_Params.Length = SwapEndian_16(WriteMemory_XPROG_Params.Length); Endpoint_Read_Stream_LE(&WriteMemory_XPROG_Params.ProgData, WriteMemory_XPROG_Params.Length, NULL); + // The driver will terminate transfers that are a round multiple of the endpoint bank in size with a ZLP, need + // to catch this and discard it before continuing on with packet processing to prevent communication issues + if (((sizeof(uint8_t) + sizeof(WriteMemory_XPROG_Params) - sizeof(WriteMemory_XPROG_Params.ProgData)) + + WriteMemory_XPROG_Params.Length) % AVRISP_DATA_EPSIZE == 0) + { + Endpoint_ClearOUT(); + Endpoint_WaitUntilReady(); + } + Endpoint_ClearOUT(); Endpoint_SelectEndpoint(AVRISP_DATA_IN_EPNUM); Endpoint_SetEndpointDirection(ENDPOINT_DIR_IN); -- cgit v1.2.3