projects
/
pub
/
lufa.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fix endianness of LOAD_ADDRESS command data, add correct PROGRAM_FLASH_ISP/PROGRAM_EE...
[pub/lufa.git]
/
Projects
/
Incomplete
/
AVRISP
/
Lib
/
V2Protocol.c
diff --git
a/Projects/Incomplete/AVRISP/Lib/V2Protocol.c
b/Projects/Incomplete/AVRISP/Lib/V2Protocol.c
index
2c29669
..
8d14802
100644
(file)
--- a/
Projects/Incomplete/AVRISP/Lib/V2Protocol.c
+++ b/
Projects/Incomplete/AVRISP/Lib/V2Protocol.c
@@
-158,7
+158,7
@@
static void V2Protocol_Command_GetSetParam(uint8_t V2Command)
\r
static void V2Protocol_Command_LoadAddress(void)
\r
{
\r
\r
static void V2Protocol_Command_LoadAddress(void)
\r
{
\r
- Endpoint_Read_Stream_
L
E(&CurrentAddress, sizeof(CurrentAddress));
\r
+ Endpoint_Read_Stream_
B
E(&CurrentAddress, sizeof(CurrentAddress));
\r
\r
Endpoint_ClearOUT();
\r
Endpoint_SetEndpointDirection(ENDPOINT_DIR_IN);
\r
\r
Endpoint_ClearOUT();
\r
Endpoint_SetEndpointDirection(ENDPOINT_DIR_IN);
\r
@@
-282,14
+282,16
@@
static void V2Protocol_Command_ProgramMemory(uint8_t V2Command)
\r
if (Write_Memory_Params.ProgrammingMode & PROG_MODE_PAGED_WRITES_MASK)
\r
{
\r
\r
if (Write_Memory_Params.ProgrammingMode & PROG_MODE_PAGED_WRITES_MASK)
\r
{
\r
+ uint16_t StartAddress = (CurrentAddress & 0xFFFF);
\r
+
\r
/* Paged mode memory programming */
\r
for (uint16_t CurrentByte = 0; CurrentByte < Write_Memory_Params.BytesToWrite; CurrentByte++)
\r
{
\r
bool IsOddByte = (CurrentByte & 0x01);
\r
uint8_t ByteToWrite = Endpoint_Read_Byte();
\r
\r
/* Paged mode memory programming */
\r
for (uint16_t CurrentByte = 0; CurrentByte < Write_Memory_Params.BytesToWrite; CurrentByte++)
\r
{
\r
bool IsOddByte = (CurrentByte & 0x01);
\r
uint8_t ByteToWrite = Endpoint_Read_Byte();
\r
\r
- if (
(V2Command == CMD_READ_FLASH_ISP) && IsOddByte
)
\r
- Write_Memory_Params.ProgrammingCommands[0] ^= READ_WRITE_
ODD
_BYTE_MASK;
\r
+ if (
IsOddByte && (V2Command == CMD_PROGRAM_FLASH_ISP)
)
\r
+ Write_Memory_Params.ProgrammingCommands[0] ^= READ_WRITE_
HIGH
_BYTE_MASK;
\r
\r
SPI_SendByte(Write_Memory_Params.ProgrammingCommands[0]);
\r
SPI_SendByte(CurrentAddress >> 8);
\r
\r
SPI_SendByte(Write_Memory_Params.ProgrammingCommands[0]);
\r
SPI_SendByte(CurrentAddress >> 8);
\r
@@
-298,11
+300,18
@@
static void V2Protocol_Command_ProgramMemory(uint8_t V2Command)
\r
if (!(PollAddress) && (ByteToWrite != PollValue))
\r
{
\r
\r
if (!(PollAddress) && (ByteToWrite != PollValue))
\r
{
\r
- if (
V2Command == CMD_PROGRAM_FLASH_ISP
)
\r
-
PollAddress = (((CurrentAddress & 0xFFFF) << 1) | IsOddByte)
;
\r
- else
\r
- PollAddress = (CurrentAddress & 0xFFFF);
\r
+ if (
IsOddByte && (V2Command == CMD_PROGRAM_FLASH_ISP)
)
\r
+
Write_Memory_Params.ProgrammingCommands[2] |= READ_WRITE_HIGH_BYTE_MASK
;
\r
+
\r
+ PollAddress = (CurrentAddress & 0xFFFF);
\r
}
\r
}
\r
+
\r
+ /* Check if the endpoint bank is currently empty */
\r
+ if (!(Endpoint_IsReadWriteAllowed()))
\r
+ {
\r
+ Endpoint_ClearOUT();
\r
+ Endpoint_WaitUntilReady();
\r
+ }
\r
\r
if (IsOddByte || (V2Command == CMD_PROGRAM_EEPROM_ISP))
\r
CurrentAddress++;
\r
\r
if (IsOddByte || (V2Command == CMD_PROGRAM_EEPROM_ISP))
\r
CurrentAddress++;
\r
@@
-312,8
+321,8
@@
static void V2Protocol_Command_ProgramMemory(uint8_t V2Command)
if (Write_Memory_Params.ProgrammingMode & PROG_MODE_COMMIT_PAGE_MASK)
\r
{
\r
SPI_SendByte(Write_Memory_Params.ProgrammingCommands[1]);
\r
if (Write_Memory_Params.ProgrammingMode & PROG_MODE_COMMIT_PAGE_MASK)
\r
{
\r
SPI_SendByte(Write_Memory_Params.ProgrammingCommands[1]);
\r
- SPI_SendByte(
Curren
tAddress >> 8);
\r
- SPI_SendByte(
Curren
tAddress & 0xFF);
\r
+ SPI_SendByte(
Star
tAddress >> 8);
\r
+ SPI_SendByte(
Star
tAddress & 0xFF);
\r
SPI_SendByte(0x00);
\r
\r
/* Check if polling is possible, if not switch to timed delay mode */
\r
SPI_SendByte(0x00);
\r
\r
/* Check if polling is possible, if not switch to timed delay mode */
\r
@@
-322,11
+331,10
@@
static void V2Protocol_Command_ProgramMemory(uint8_t V2Command)
Write_Memory_Params.ProgrammingMode &= ~PROG_MODE_PAGED_VALUE_MASK;
\r
Write_Memory_Params.ProgrammingMode &= ~PROG_MODE_PAGED_TIMEDELAY_MASK;
\r
}
\r
Write_Memory_Params.ProgrammingMode &= ~PROG_MODE_PAGED_VALUE_MASK;
\r
Write_Memory_Params.ProgrammingMode &= ~PROG_MODE_PAGED_TIMEDELAY_MASK;
\r
}
\r
+
\r
+ ProgrammingStatus = V2Protocol_WaitForProgComplete(Write_Memory_Params.ProgrammingMode, PollAddress, PollValue,
\r
+ Write_Memory_Params.DelayMS, Write_Memory_Params.ProgrammingCommands[2]);
\r
}
\r
}
\r
-
\r
- ProgrammingStatus = V2Protocol_WaitForProgComplete(Write_Memory_Params.ProgrammingMode, PollAddress, PollValue,
\r
- Write_Memory_Params.DelayMS, (V2Command == CMD_READ_FLASH_ISP),
\r
- Write_Memory_Params.ProgrammingCommands[2]);
\r
}
\r
else
\r
{
\r
}
\r
else
\r
{
\r
@@
-336,8
+344,8
@@
static void V2Protocol_Command_ProgramMemory(uint8_t V2Command)
bool IsOddByte = (CurrentByte & 0x01);
\r
uint8_t ByteToWrite = Endpoint_Read_Byte();
\r
\r
bool IsOddByte = (CurrentByte & 0x01);
\r
uint8_t ByteToWrite = Endpoint_Read_Byte();
\r
\r
- if (
(V2Command == CMD_READ_FLASH_ISP) && IsOddByte
)
\r
- Write_Memory_Params.ProgrammingCommands[0] ^= READ_WRITE_
ODD
_BYTE_MASK;
\r
+ if (
IsOddByte && (V2Command == CMD_READ_FLASH_ISP)
)
\r
+ Write_Memory_Params.ProgrammingCommands[0] ^= READ_WRITE_
HIGH
_BYTE_MASK;
\r
\r
SPI_SendByte(Write_Memory_Params.ProgrammingCommands[0]);
\r
SPI_SendByte(CurrentAddress >> 8);
\r
\r
SPI_SendByte(Write_Memory_Params.ProgrammingCommands[0]);
\r
SPI_SendByte(CurrentAddress >> 8);
\r
@@
-346,18
+354,24
@@
static void V2Protocol_Command_ProgramMemory(uint8_t V2Command)
\r
if (ByteToWrite != PollValue)
\r
{
\r
\r
if (ByteToWrite != PollValue)
\r
{
\r
- if (
V2Command == CMD_PROGRAM_FLASH_ISP
)
\r
-
PollAddress = (((CurrentAddress & 0xFFFF) << 1) | IsOddByte)
;
\r
- else
\r
-
PollAddress = (CurrentAddress & 0xFFFF);
\r
+ if (
IsOddByte && (V2Command == CMD_PROGRAM_FLASH_ISP)
)
\r
+
Write_Memory_Params.ProgrammingCommands[2] |= READ_WRITE_HIGH_BYTE_MASK
;
\r
+
\r
+ PollAddress = (CurrentAddress & 0xFFFF);
\r
}
\r
\r
}
\r
\r
+ /* Check if the endpoint bank is currently empty */
\r
+ if (!(Endpoint_IsReadWriteAllowed()))
\r
+ {
\r
+ Endpoint_ClearOUT();
\r
+ Endpoint_WaitUntilReady();
\r
+ }
\r
+
\r
if (IsOddByte || (V2Command == CMD_PROGRAM_EEPROM_ISP))
\r
CurrentAddress++;
\r
\r
ProgrammingStatus = V2Protocol_WaitForProgComplete(Write_Memory_Params.ProgrammingMode, PollAddress, PollValue,
\r
if (IsOddByte || (V2Command == CMD_PROGRAM_EEPROM_ISP))
\r
CurrentAddress++;
\r
\r
ProgrammingStatus = V2Protocol_WaitForProgComplete(Write_Memory_Params.ProgrammingMode, PollAddress, PollValue,
\r
- Write_Memory_Params.DelayMS, (V2Command == CMD_READ_FLASH_ISP),
\r
- Write_Memory_Params.ProgrammingCommands[2]);
\r
+ Write_Memory_Params.DelayMS, Write_Memory_Params.ProgrammingCommands[2]);
\r
\r
if (ProgrammingStatus != STATUS_CMD_OK)
\r
break;
\r
\r
if (ProgrammingStatus != STATUS_CMD_OK)
\r
break;
\r
@@
-393,7
+407,7
@@
static void V2Protocol_Command_ReadMemory(uint8_t V2Command)
for (uint16_t CurrentByte = 0; CurrentByte < Read_Memory_Params.BytesToRead; CurrentByte++)
\r
{
\r
if ((V2Command == CMD_READ_FLASH_ISP) && (CurrentByte & 0x01))
\r
for (uint16_t CurrentByte = 0; CurrentByte < Read_Memory_Params.BytesToRead; CurrentByte++)
\r
{
\r
if ((V2Command == CMD_READ_FLASH_ISP) && (CurrentByte & 0x01))
\r
- Read_Memory_Params.ReadMemoryCommand ^= READ_WRITE_
ODD
_BYTE_MASK;
\r
+ Read_Memory_Params.ReadMemoryCommand ^= READ_WRITE_
HIGH
_BYTE_MASK;
\r
\r
SPI_SendByte(Read_Memory_Params.ReadMemoryCommand);
\r
SPI_SendByte(CurrentAddress >> 8);
\r
\r
SPI_SendByte(Read_Memory_Params.ReadMemoryCommand);
\r
SPI_SendByte(CurrentAddress >> 8);
\r