diff --git a/LUFA/ManPages/ChangeLog.txt b/LUFA/ManPages/ChangeLog.txt index 09a168dc12..70c81dc006 100644 --- a/LUFA/ManPages/ChangeLog.txt +++ b/LUFA/ManPages/ChangeLog.txt @@ -17,6 +17,9 @@ * Fixed: * - Fixed possible device lockup when INTERRUPT_CONTROL_ENDPOINT is enabled and the control endpoint is not properly * selected when the ISR completes + * - Fixed AVRISP-MKII clone project not correctly issuing SET EXTENDED ADDRESS commands when the extended address + * boundary is crossed during programming or readback (thanks to Gerard Sexton) + * - Fixed warnings when building the AVRISP-MKII clone project with the ENABLE_XPROG_PROTOCOL compile time option disabled * * \section Sec_ChangeLog100512 Version 100512 * diff --git a/Projects/AVRISP-MKII/Lib/ISP/ISPProtocol.c b/Projects/AVRISP-MKII/Lib/ISP/ISPProtocol.c index a16504da14..430772ddc2 100644 --- a/Projects/AVRISP-MKII/Lib/ISP/ISPProtocol.c +++ b/Projects/AVRISP-MKII/Lib/ISP/ISPProtocol.c @@ -227,8 +227,18 @@ void ISPProtocol_ProgramMemory(uint8_t V2Command) PollAddress = (CurrentAddress & 0xFFFF); } - if (IsOddByte || (V2Command == CMD_PROGRAM_EEPROM_ISP)) - CurrentAddress++; + /* EEPROM just increments the address each byte, flash needs to increment on each word and + * also check to ensure that a LOAD EXTENDED ADDRESS command is issued each time the extended + * address boundary has been crossed */ + if (V2Command == CMD_PROGRAM_EEPROM_ISP) + { + CurrentAddress++; + } + else if (IsOddByte) + { + if (!(++CurrentAddress & 0xFFFF)) + ISPTarget_LoadExtendedAddress(); + } } /* If the current page must be committed, send the PROGRAM PAGE command to the target */ @@ -276,8 +286,18 @@ void ISPProtocol_ProgramMemory(uint8_t V2Command) PollAddress = (CurrentAddress & 0xFFFF); } - if (IsOddByte || (V2Command == CMD_PROGRAM_EEPROM_ISP)) - CurrentAddress++; + /* EEPROM just increments the address each byte, flash needs to increment on each word and + * also check to ensure that a LOAD EXTENDED ADDRESS command is issued each time the extended + * address boundary has been crossed */ + if (V2Command == CMD_PROGRAM_EEPROM_ISP) + { + CurrentAddress++; + } + else if (IsOddByte) + { + if (!(++CurrentAddress & 0xFFFF)) + ISPTarget_LoadExtendedAddress(); + } ProgrammingStatus = ISPTarget_WaitForProgComplete(Write_Memory_Params.ProgrammingMode, PollAddress, PollValue, Write_Memory_Params.DelayMS, Write_Memory_Params.ProgrammingCommands[2]); @@ -346,11 +366,19 @@ void ISPProtocol_ReadMemory(uint8_t V2Command) * or low byte at the current word address */ if (V2Command == CMD_READ_FLASH_ISP) Read_Memory_Params.ReadMemoryCommand ^= READ_WRITE_HIGH_BYTE_MASK; - - /* Only increment the current address if we have read both bytes in the current word when in FLASH - * read mode, or for each byte when in EEPROM read mode */ - if (((CurrentByte & 0x01) && (V2Command == CMD_READ_FLASH_ISP)) || (V2Command == CMD_READ_EEPROM_ISP)) - CurrentAddress++; + + /* EEPROM just increments the address each byte, flash needs to increment on each word and + * also check to ensure that a LOAD EXTENDED ADDRESS command is issued each time the extended + * address boundary has been crossed */ + if (V2Command == CMD_READ_EEPROM_ISP) + { + CurrentAddress++; + } + else if (CurrentByte & 0x01) + { + if (!(++CurrentAddress & 0xFFFF)) + ISPTarget_LoadExtendedAddress(); + } } Endpoint_Write_Byte(STATUS_CMD_OK); diff --git a/Projects/AVRISP-MKII/Lib/XPROG/TINYNVM.h b/Projects/AVRISP-MKII/Lib/XPROG/TINYNVM.h index 73bf1f9535..2daca16fcf 100644 --- a/Projects/AVRISP-MKII/Lib/XPROG/TINYNVM.h +++ b/Projects/AVRISP-MKII/Lib/XPROG/TINYNVM.h @@ -68,7 +68,7 @@ bool TINYNVM_WriteMemory(const uint16_t WriteAddress, uint8_t* WriteBuffer, uint16_t WriteLength); bool TINYNVM_EraseMemory(const uint8_t EraseCommand, const uint16_t Address); - #if defined(INCLUDE_FROM_TINYNVM_C) + #if (defined(INCLUDE_FROM_TINYNVM_C) && defined(ENABLE_XPROG_PROTOCOL)) static void TINYNVM_SendReadNVMRegister(const uint8_t Address); static void TINYNVM_SendWriteNVMRegister(const uint8_t Address); static void TINYNVM_SendPointerAddress(const uint16_t AbsoluteAddress); diff --git a/Projects/AVRISP-MKII/Lib/XPROG/XPROGProtocol.h b/Projects/AVRISP-MKII/Lib/XPROG/XPROGProtocol.h index 1fdb5a1b8a..c812578e51 100644 --- a/Projects/AVRISP-MKII/Lib/XPROG/XPROGProtocol.h +++ b/Projects/AVRISP-MKII/Lib/XPROG/XPROGProtocol.h @@ -119,7 +119,7 @@ void XPROGProtocol_SetMode(void); void XPROGProtocol_Command(void); - #if defined(INCLUDE_FROM_XPROGPROTOCOL_C) + #if (defined(INCLUDE_FROM_XPROGPROTOCOL_C) && defined(ENABLE_XPROG_PROTOCOL)) static void XPROGProtocol_EnterXPROGMode(void); static void XPROGProtocol_LeaveXPROGMode(void); static void XPROGProtocol_SetParam(void); diff --git a/Projects/AVRISP-MKII/Lib/XPROG/XPROGTarget.h b/Projects/AVRISP-MKII/Lib/XPROG/XPROGTarget.h index 436f0f30df..db233a1a49 100644 --- a/Projects/AVRISP-MKII/Lib/XPROG/XPROGTarget.h +++ b/Projects/AVRISP-MKII/Lib/XPROG/XPROGTarget.h @@ -118,7 +118,7 @@ void XPROGTarget_SendBreak(void); bool XPROGTarget_WaitWhileNVMBusBusy(void); - #if defined(INCLUDE_FROM_XPROGTARGET_C) + #if (defined(INCLUDE_FROM_XPROGTARGET_C) && defined(ENABLE_XPROG_PROTOCOL)) static void XPROGTarget_SetTxMode(void); static void XPROGTarget_SetRxMode(void); #endif diff --git a/Projects/Benito/Lib/RingBuff.h b/Projects/Benito/Lib/RingBuff.h index b4933aa4d5..30dbf104e8 100644 --- a/Projects/Benito/Lib/RingBuff.h +++ b/Projects/Benito/Lib/RingBuff.h @@ -30,7 +30,7 @@ /* Buffer Configuration: */ /* Buffer length - select static size of created ring buffers: */ - #define BUFF_STATICSIZE 128 // Set to the static ring buffer size for all ring buffers (place size after define) + #define BUFF_STATICSIZE 255 // Set to the static ring buffer size for all ring buffers (place size after define) /* Volatile mode - uncomment to make buffers volatile, for use in ISRs, etc: */ #define BUFF_VOLATILE // Uncomment to cause all ring buffers to become volatile (and atomic if multi-byte) in access diff --git a/Projects/Benito/makefile b/Projects/Benito/makefile index 4fadc10c19..5bab672f45 100644 --- a/Projects/Benito/makefile +++ b/Projects/Benito/makefile @@ -60,7 +60,7 @@ # MCU name -MCU = atmega32u4 +MCU = atmega32u2 # Target board (see library "Board Types" documentation, NONE for projects not requiring