From 5eea41bfce716f0e44ca94d66fbac2eee1a37566 Mon Sep 17 00:00:00 2001 From: Joerg Wunsch Date: Mon, 16 Feb 2009 12:26:44 +0000 Subject: [PATCH] Submitted by Mark Litwack: patch #6261: avrdude won't use dragon/debugwire to write a file to eeprom * jtagmkII.c (jtagmkII_paged_write): when in debugWire mode, implement a paged write to EEPROM as a series of byte writes. git-svn-id: svn://svn.savannah.nongnu.org/avrdude/trunk/avrdude@792 81a1dc3b-b13d-400b-aceb-764788c761c2 --- ChangeLog | 8 ++++++++ NEWS | 2 ++ jtagmkII.c | 20 ++++++++++++++++---- 3 files changed, 26 insertions(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index 9c3bf0d6..f017a2d7 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2009-02-16 Joerg Wunsch + + Submitted by Mark Litwack: + patch #6261: avrdude won't use dragon/debugwire to write a file + to eeprom + * jtagmkII.c (jtagmkII_paged_write): when in debugWire mode, + implement a paged write to EEPROM as a series of byte writes. + 2009-02-16 Joerg Wunsch Submitted by Janos Sallai: diff --git a/NEWS b/NEWS index 6fb7b298..56dc93ff 100644 --- a/NEWS +++ b/NEWS @@ -35,6 +35,8 @@ Current: * Add preliminary support for ATxmega128A1 for the JTAG ICE mkII using JTAG. + * Bugfixes. + Version 5.5: * Add support for the USBtinyISP programmer (patch #6233) diff --git a/jtagmkII.c b/jtagmkII.c index 44086bfc..30743b5d 100644 --- a/jtagmkII.c +++ b/jtagmkII.c @@ -1534,13 +1534,25 @@ static int jtagmkII_paged_write(PROGRAMMER * pgm, AVRPART * p, AVRMEM * m, PDATA(pgm)->flash_pageaddr = (unsigned long)-1L; page_size = PDATA(pgm)->flash_pagesize; } else if (strcmp(m->desc, "eeprom") == 0) { + if (pgm->flag & PGM_FL_IS_DW) { + /* + * jtagmkII_paged_write() to EEPROM attempted while in + * DW mode. Use jtagmkII_write_byte() instead. + */ + for (addr = 0; addr < n_bytes; addr++) { + status = jtagmkII_write_byte(pgm, p, m, addr, m->buf[addr]); + report_progress(addr, n_bytes, NULL); + if (status < 0) { + free(cmd); + return -1; + } + } + free(cmd); + return n_bytes; + } cmd[1] = MTYPE_EEPROM_PAGE; PDATA(pgm)->eeprom_pageaddr = (unsigned long)-1L; page_size = PDATA(pgm)->eeprom_pagesize; - if (pgm->flag & PGM_FL_IS_DW) { - free(cmd); - return -1; - } } serial_recv_timeout = 100;