diff --git a/avrdude/serialupdi.c b/avrdude/serialupdi.c index 0f4e70c1..5da521ea 100644 --- a/avrdude/serialupdi.c +++ b/avrdude/serialupdi.c @@ -195,19 +195,33 @@ static int serialupdi_chip_erase(PROGRAMMER * pgm, AVRPART * p) static int serialupdi_read_byte(PROGRAMMER * pgm, AVRPART * p, AVRMEM * mem, unsigned long addr, unsigned char * value) { -// avrdude_message(MSG_INFO, "%s: error: read byte not implemented yet\n", -// progname); return updi_read_byte(pgm, mem->offset + addr, value); -// return -1; } static int serialupdi_paged_load(PROGRAMMER * pgm, AVRPART * p, AVRMEM * m, unsigned int page_size, unsigned int addr, unsigned int n_bytes) { - avrdude_message(MSG_INFO, "%s: error: paged load not implemented yet\n", - progname); - return -1; + if (n_bytes > m->readsize) { + unsigned int read_offset = addr; + unsigned int remaining_bytes = n_bytes; + int read_bytes = 0; + int rc; + while (remaining_bytes > 0) { + rc = updi_read_data(pgm, m->offset + read_offset, m->buf + read_offset, m->readsize); + if (rc < 0) { + avrdude_message(MSG_INFO, "%s: Paged load operation failed\n", progname); + return rc; + } else { + read_bytes+=rc; + read_offset+=m->readsize; + remaining_bytes-=m->readsize; + } + } + return read_bytes; + } else { + return updi_read_data(pgm, m->offset + addr, m->buf, n_bytes); + } } static int serialupdi_paged_write(PROGRAMMER * pgm, AVRPART * p, AVRMEM * m, diff --git a/avrdude/updi_readwrite.c b/avrdude/updi_readwrite.c index f36015b8..eecfb7f0 100644 --- a/avrdude/updi_readwrite.c +++ b/avrdude/updi_readwrite.c @@ -153,7 +153,7 @@ int updi_read_data(PROGRAMMER * pgm, uint32_t address, uint8_t * buffer, uint16_ # Do the read(s) return self.datalink.ld_ptr_inc(size) */ - avrdude_message(MSG_DEBUG, "%s: Reading %d bytes from 0x%06X", progname, size, address); + avrdude_message(MSG_DEBUG, "%s: Reading %d bytes from 0x%06X\n", progname, size, address); if (size > UPDI_MAX_REPEAT_SIZE) { avrdude_message(MSG_INFO, "%s: Can't read that many bytes in one go\n", progname);