forked from mfulz_github/qmk_firmware
Additional fix to the AVRISP-MKII clone project for 256KB AVRs.
This commit is contained in:
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…
Reference in New Issue