Additional fix to the AVRISP-MKII clone project for 256KB AVRs.

pull/1469/head
Dean Camera 15 years ago
parent cd0093a14b
commit 571159df1b

@ -17,7 +17,7 @@
* <b>Fixed:</b> * <b>Fixed:</b>
* - Fixed possible device lockup when INTERRUPT_CONTROL_ENDPOINT is enabled and the control endpoint is not properly * - Fixed possible device lockup when INTERRUPT_CONTROL_ENDPOINT is enabled and the control endpoint is not properly
* selected when the ISR completes * selected when the ISR completes
* - Fixed AVRISP-MKII clone project not correctly issuing SET EXTENDED ADDRESS commands when the extended address * - Fixed AVRISP-MKII clone project not correctly issuing LOAD EXTENDED ADDRESS commands when the extended address
* boundary is crossed during programming or readback (thanks to Gerard Sexton) * 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 * - Fixed warnings when building the AVRISP-MKII clone project with the ENABLE_XPROG_PROTOCOL compile time option disabled
* *

@ -227,18 +227,9 @@ void ISPProtocol_ProgramMemory(uint8_t V2Command)
PollAddress = (CurrentAddress & 0xFFFF); PollAddress = (CurrentAddress & 0xFFFF);
} }
/* EEPROM just increments the address each byte, flash needs to increment on each word and /* EEPROM increments the address on each byte, flash needs to increment on each word */
* also check to ensure that a LOAD EXTENDED ADDRESS command is issued each time the extended if (IsOddByte || (V2Command == CMD_PROGRAM_EEPROM_ISP))
* address boundary has been crossed */ CurrentAddress++;
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 */ /* If the current page must be committed, send the PROGRAM PAGE command to the target */
@ -258,6 +249,10 @@ void ISPProtocol_ProgramMemory(uint8_t V2Command)
ProgrammingStatus = ISPTarget_WaitForProgComplete(Write_Memory_Params.ProgrammingMode, PollAddress, PollValue, ProgrammingStatus = ISPTarget_WaitForProgComplete(Write_Memory_Params.ProgrammingMode, PollAddress, PollValue,
Write_Memory_Params.DelayMS, Write_Memory_Params.ProgrammingCommands[2]); Write_Memory_Params.DelayMS, Write_Memory_Params.ProgrammingCommands[2]);
/* Check to see if the FLASH address has crossed the extended address boundary */
if ((V2Command == CMD_PROGRAM_FLASH_ISP) && !(CurrentAddress & 0xFFFF))
ISPTarget_LoadExtendedAddress();
} }
} }
else else
@ -285,6 +280,13 @@ void ISPProtocol_ProgramMemory(uint8_t V2Command)
PollAddress = (CurrentAddress & 0xFFFF); PollAddress = (CurrentAddress & 0xFFFF);
} }
ProgrammingStatus = ISPTarget_WaitForProgComplete(Write_Memory_Params.ProgrammingMode, PollAddress, PollValue,
Write_Memory_Params.DelayMS, Write_Memory_Params.ProgrammingCommands[2]);
/* Abort the programming loop early if the byte/word programming failed */
if (ProgrammingStatus != STATUS_CMD_OK)
break;
/* EEPROM just increments the address each byte, flash needs to increment on each word and /* 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 * also check to ensure that a LOAD EXTENDED ADDRESS command is issued each time the extended
@ -298,12 +300,6 @@ void ISPProtocol_ProgramMemory(uint8_t V2Command)
if (!(++CurrentAddress & 0xFFFF)) if (!(++CurrentAddress & 0xFFFF))
ISPTarget_LoadExtendedAddress(); ISPTarget_LoadExtendedAddress();
} }
ProgrammingStatus = ISPTarget_WaitForProgComplete(Write_Memory_Params.ProgrammingMode, PollAddress, PollValue,
Write_Memory_Params.DelayMS, Write_Memory_Params.ProgrammingCommands[2]);
if (ProgrammingStatus != STATUS_CMD_OK)
break;
} }
} }

Loading…
Cancel
Save