- /* Word/byte mode memory programming */
- for (uint16_t CurrentByte = 0; CurrentByte < Write_Memory_Params.BytesToWrite; CurrentByte++)
- {
- bool IsOddByte = (CurrentByte & 0x01);
- uint8_t ByteToWrite = *(NextWriteByte++);
-
- /* Check to see if we need to send a LOAD EXTENDED ADDRESS command to the target */
- if (MustLoadExtendedAddress)
- {
- ISPTarget_LoadExtendedAddress();
- MustLoadExtendedAddress = false;
- }
-
- SPI_SendByte(Write_Memory_Params.ProgrammingCommands[0]);
- SPI_SendByte(CurrentAddress >> 8);
- SPI_SendByte(CurrentAddress & 0xFF);
- SPI_SendByte(ByteToWrite);
-
- /* AVR FLASH addressing requires us to modify the write command based on if we are writing a high
- * or low byte at the current word address */
- if (V2Command == CMD_PROGRAM_FLASH_ISP)
- Write_Memory_Params.ProgrammingCommands[0] ^= READ_WRITE_HIGH_BYTE_MASK;
-
- if (ByteToWrite != PollValue)
- {
- if (IsOddByte && (V2Command == CMD_PROGRAM_FLASH_ISP))
- Write_Memory_Params.ProgrammingCommands[2] |= READ_WRITE_HIGH_BYTE_MASK;
-
- 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;
+ ISPTarget_SendByte(Write_Memory_Params.ProgrammingCommands[1]);
+ ISPTarget_SendByte(PageStartAddress >> 8);
+ ISPTarget_SendByte(PageStartAddress & 0xFF);
+ ISPTarget_SendByte(0x00);