Fix TPI memory writes for odd number of bytes
This commit is contained in:
parent
b08dd59ce2
commit
9706426d8f
17
src/avr.c
17
src/avr.c
|
@ -853,15 +853,11 @@ int avr_write(PROGRAMMER * pgm, AVRPART * p, char * memtype, int size,
|
||||||
/* setup for WORD_WRITE */
|
/* setup for WORD_WRITE */
|
||||||
avr_tpi_setup_rw(pgm, m, 0, TPI_NVMCMD_WORD_WRITE);
|
avr_tpi_setup_rw(pgm, m, 0, TPI_NVMCMD_WORD_WRITE);
|
||||||
|
|
||||||
/* make sure it's aligned to a word boundary */
|
|
||||||
if (wsize & 0x1) {
|
|
||||||
wsize++;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* write words, low byte first */
|
/* write words, low byte first */
|
||||||
for (lastaddr = i = 0; i < wsize; i += 2) {
|
for (lastaddr = i = 0; i < wsize; i += 2) {
|
||||||
|
bool have_two_bytes = i + 1 < wsize;
|
||||||
if ((m->tags[i] & TAG_ALLOCATED) != 0 ||
|
if ((m->tags[i] & TAG_ALLOCATED) != 0 ||
|
||||||
(m->tags[i + 1] & TAG_ALLOCATED) != 0) {
|
(have_two_bytes && m->tags[i + 1] & TAG_ALLOCATED) != 0) {
|
||||||
|
|
||||||
if (lastaddr != i) {
|
if (lastaddr != i) {
|
||||||
/* need to setup new address */
|
/* need to setup new address */
|
||||||
|
@ -873,8 +869,11 @@ int avr_write(PROGRAMMER * pgm, AVRPART * p, char * memtype, int size,
|
||||||
cmd[1] = m->buf[i];
|
cmd[1] = m->buf[i];
|
||||||
rc = pgm->cmd_tpi(pgm, cmd, 2, NULL, 0);
|
rc = pgm->cmd_tpi(pgm, cmd, 2, NULL, 0);
|
||||||
|
|
||||||
cmd[1] = m->buf[i + 1];
|
if (have_two_bytes)
|
||||||
rc = pgm->cmd_tpi(pgm, cmd, 2, NULL, 0);
|
{
|
||||||
|
cmd[1] = m->buf[i + 1];
|
||||||
|
rc = pgm->cmd_tpi(pgm, cmd, 2, NULL, 0);
|
||||||
|
}
|
||||||
|
|
||||||
lastaddr += 2;
|
lastaddr += 2;
|
||||||
|
|
||||||
|
@ -882,7 +881,7 @@ int avr_write(PROGRAMMER * pgm, AVRPART * p, char * memtype, int size,
|
||||||
}
|
}
|
||||||
report_progress(i, wsize, NULL);
|
report_progress(i, wsize, NULL);
|
||||||
}
|
}
|
||||||
return i;
|
return wsize;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pgm->paged_write != NULL && m->page_size > 1) {
|
if (pgm->paged_write != NULL && m->page_size > 1) {
|
||||||
|
|
Loading…
Reference in New Issue