forked from mfulz_github/qmk_firmware
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).
This commit is contained in:
parent
73718d7c57
commit
279e1b6ece
|
@ -82,6 +82,8 @@
|
||||||
* - Fixed possible programming problem in the AVRISP-MKII clone project when programming specific patterns into a target
|
* - Fixed possible programming problem in the AVRISP-MKII clone project when programming specific patterns into a target
|
||||||
* memory space that is only byte (not page) addressable
|
* memory space that is only byte (not page) addressable
|
||||||
* - Fixed errors in the incomplete Test and Measurement device demo preventing proper operation (thanks to Pavel Plotnikov)
|
* - Fixed errors in the incomplete Test and Measurement device demo preventing proper operation (thanks to Pavel Plotnikov)
|
||||||
|
* - 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)
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
* \section Sec_ChangeLog101122 Version 101122
|
* \section Sec_ChangeLog101122 Version 101122
|
||||||
|
|
|
@ -85,6 +85,7 @@
|
||||||
* - Digital Survey Instruments Magnetometer and Pointer: http://www.digitalsurveyinstruments.com/
|
* - Digital Survey Instruments Magnetometer and Pointer: http://www.digitalsurveyinstruments.com/
|
||||||
* - Penguino, an Arduino Board With On-Board LUFA Powered Debugger/Programmer: http://wiki.icy.com.au/PenguinoAVR
|
* - Penguino, an Arduino Board With On-Board LUFA Powered Debugger/Programmer: http://wiki.icy.com.au/PenguinoAVR
|
||||||
* - PIR-1, an IR control interface for consumer electronics: http://www.promixis.com/pir-1.php
|
* - PIR-1, an IR control interface for consumer electronics: http://www.promixis.com/pir-1.php
|
||||||
|
* - PIR-4, a USB Connected 4 port IR transmitter: http://promixis.com/pir-4.php
|
||||||
* - Many of Busware's Products: http://www.busware.de/
|
* - Many of Busware's Products: http://www.busware.de/
|
||||||
* - MIDIFighter, a USB-MIDI controller: http://www.midifighter.com/
|
* - MIDIFighter, a USB-MIDI controller: http://www.midifighter.com/
|
||||||
* - Retrode, a USB Games Console Cartridge Reader: http://www.retrode.org
|
* - Retrode, a USB Games Console Cartridge Reader: http://www.retrode.org
|
||||||
|
|
|
@ -147,7 +147,7 @@ void ISPProtocol_ProgramMemory(uint8_t V2Command)
|
||||||
Endpoint_Read_Stream_LE(&Write_Memory_Params, (sizeof(Write_Memory_Params) -
|
Endpoint_Read_Stream_LE(&Write_Memory_Params, (sizeof(Write_Memory_Params) -
|
||||||
sizeof(Write_Memory_Params.ProgData)), NULL);
|
sizeof(Write_Memory_Params.ProgData)), NULL);
|
||||||
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))
|
if (Write_Memory_Params.BytesToWrite > sizeof(Write_Memory_Params.ProgData))
|
||||||
{
|
{
|
||||||
Endpoint_ClearOUT();
|
Endpoint_ClearOUT();
|
||||||
|
@ -162,6 +162,15 @@ void ISPProtocol_ProgramMemory(uint8_t V2Command)
|
||||||
|
|
||||||
Endpoint_Read_Stream_LE(&Write_Memory_Params.ProgData, Write_Memory_Params.BytesToWrite, NULL);
|
Endpoint_Read_Stream_LE(&Write_Memory_Params.ProgData, Write_Memory_Params.BytesToWrite, 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(Write_Memory_Params) - sizeof(Write_Memory_Params.ProgData)) +
|
||||||
|
Write_Memory_Params.BytesToWrite) % AVRISP_DATA_EPSIZE == 0)
|
||||||
|
{
|
||||||
|
Endpoint_ClearOUT();
|
||||||
|
Endpoint_WaitUntilReady();
|
||||||
|
}
|
||||||
|
|
||||||
Endpoint_ClearOUT();
|
Endpoint_ClearOUT();
|
||||||
Endpoint_SelectEndpoint(AVRISP_DATA_IN_EPNUM);
|
Endpoint_SelectEndpoint(AVRISP_DATA_IN_EPNUM);
|
||||||
Endpoint_SetEndpointDirection(ENDPOINT_DIR_IN);
|
Endpoint_SetEndpointDirection(ENDPOINT_DIR_IN);
|
||||||
|
@ -281,7 +290,7 @@ void ISPProtocol_ReadMemory(uint8_t V2Command)
|
||||||
|
|
||||||
Endpoint_Read_Stream_LE(&Read_Memory_Params, sizeof(Read_Memory_Params), NULL);
|
Endpoint_Read_Stream_LE(&Read_Memory_Params, sizeof(Read_Memory_Params), NULL);
|
||||||
Read_Memory_Params.BytesToRead = SwapEndian_16(Read_Memory_Params.BytesToRead);
|
Read_Memory_Params.BytesToRead = SwapEndian_16(Read_Memory_Params.BytesToRead);
|
||||||
|
|
||||||
Endpoint_ClearOUT();
|
Endpoint_ClearOUT();
|
||||||
Endpoint_SelectEndpoint(AVRISP_DATA_IN_EPNUM);
|
Endpoint_SelectEndpoint(AVRISP_DATA_IN_EPNUM);
|
||||||
Endpoint_SetEndpointDirection(ENDPOINT_DIR_IN);
|
Endpoint_SetEndpointDirection(ENDPOINT_DIR_IN);
|
||||||
|
|
|
@ -250,6 +250,15 @@ static void XPROGProtocol_WriteMemory(void)
|
||||||
WriteMemory_XPROG_Params.Length = SwapEndian_16(WriteMemory_XPROG_Params.Length);
|
WriteMemory_XPROG_Params.Length = SwapEndian_16(WriteMemory_XPROG_Params.Length);
|
||||||
Endpoint_Read_Stream_LE(&WriteMemory_XPROG_Params.ProgData, WriteMemory_XPROG_Params.Length, NULL);
|
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_ClearOUT();
|
||||||
Endpoint_SelectEndpoint(AVRISP_DATA_IN_EPNUM);
|
Endpoint_SelectEndpoint(AVRISP_DATA_IN_EPNUM);
|
||||||
Endpoint_SetEndpointDirection(ENDPOINT_DIR_IN);
|
Endpoint_SetEndpointDirection(ENDPOINT_DIR_IN);
|
||||||
|
|
Loading…
Reference in New Issue