diff --git a/ChangeLog b/ChangeLog index fbdad817..600a1e4d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,16 @@ +2006-08-22 Joerg Wunsch + + * avrdude.conf.in: Add page mode parameters for all "eeprom" + memory definitions that are organized in pages. + * avr.c (avr_write_byte_default): Consider using the loadpage + instructions only if the respective memory is marked "paged". + Closes bug #17199: EEPROM fails verification on ATmega645 with + pony-stk200 hardware + Closes bug #16849: EEPROM write fails for AT90USB1287 with + mode 0x41 + Closes bug #15146: stk500v2_paged_write: loadpage instruction + not defined for part + 2006-08-22 Joerg Wunsch * doc/avrdude.info (-c): Change "avrispmk2" into "avrisp2" as that diff --git a/avr.c b/avr.c index 6846aa9f..56783409 100644 --- a/avr.c +++ b/avr.c @@ -345,7 +345,7 @@ int avr_write_byte_default(PROGRAMMER * pgm, AVRPART * p, AVRMEM * mem, writeop = mem->op[AVR_OP_WRITE_LO]; caddr = addr / 2; } - else if (mem->op[AVR_OP_LOADPAGE_LO]) { + else if (mem->paged && mem->op[AVR_OP_LOADPAGE_LO]) { if (addr & 0x01) writeop = mem->op[AVR_OP_LOADPAGE_HI]; else diff --git a/avrdude.conf.in b/avrdude.conf.in index 083ea054..438b3e51 100644 --- a/avrdude.conf.in +++ b/avrdude.conf.in @@ -902,6 +902,16 @@ part write = "1 1 0 0 0 0 0 0 0 0 0 x x x x x", "x x a5 a4 a3 a2 a1 a0 i i i i i i i i"; + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x x x", + " x x a5 a4 a3 a2 0 0", + " x x x x x x x x"; + mode = 0x41; delay = 5; blocksize = 4; @@ -2704,6 +2714,17 @@ part " a7 a6 a5 a4 a3 a2 a1 a0", " i i i i i i i i"; + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 0 0 0", + " x x x x x x x x"; + + mode = 0x41; delay = 20; blocksize = 8; @@ -2882,6 +2903,16 @@ part " a7 a6 a5 a4 a3 a2 a1 a0", " i i i i i i i i"; + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + mode = 0x04; delay = 10; blocksize = 128; @@ -3050,7 +3081,17 @@ part " a7 a6 a5 a4 a3 a2 a1 a0", " i i i i i i i i"; - mode = 0x04; + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; delay = 10; blocksize = 128; readsize = 256; @@ -3232,7 +3273,17 @@ part " a7 a6 a5 a4 a3 a2 a1 a0", " i i i i i i i i"; - mode = 0x04; + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x a10 a9 a8", + " a7 a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + + mode = 0x41; delay = 10; blocksize = 128; readsize = 256; @@ -3414,7 +3465,17 @@ part " a7 a6 a5 a4 a3 a2 a1 a0", " i i i i i i i i"; - mode = 0x04; + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 0 0 0", + " x x x x x x x x"; + + mode = 0x41; delay = 10; blocksize = 128; readsize = 256; @@ -3636,6 +3697,16 @@ part " a7 a6 a5 a4 a3 a2 a1 a0", " i i i i i i i i"; + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + mode = 0x41; delay = 20; blocksize = 4; @@ -4099,6 +4170,16 @@ part " a7 a6 a5 a4 a3 a2 a1 a0", " i i i i i i i i"; + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + mode = 0x41; delay = 20; blocksize = 8; @@ -4274,6 +4355,16 @@ part " a7 a6 a5 a4 a3 a2 a1 a0", " i i i i i i i i"; + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x a9 a8", + " a7 a6 a5 a4 a3 a3 0 0", + " x x x x x x x x"; + mode = 0x41; delay = 20; blocksize = 8; @@ -4447,6 +4538,16 @@ part " a7 a6 a5 a4 a3 a2 a1 a0", " i i i i i i i i"; + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x a10 a9 a8", + " a7 a6 a5 a4 a3 0 0 0", + " x x x x x x x x"; + mode = 0x41; delay = 20; blocksize = 8; @@ -4622,6 +4723,26 @@ part " a7 a6 a5 a4 a3 a2 a1 a0", " i i i i i i i i"; + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x x a8", + " a7 a6 a5 a4 a3 0 0 0", + " x x x x x x x x"; + + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x a10 a9 a8", + " a7 a6 a5 a4 a3 0 0 0", + " x x x x x x x x"; + mode = 0x41; delay = 20; blocksize = 8; @@ -4798,6 +4919,16 @@ part " a7 a6 a5 a4 a3 a2 a1 a0", " i i i i i i i i"; + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x a9 a8", + " a7 a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + mode = 0x04; delay = 10; blocksize = 64; @@ -6263,6 +6394,8 @@ part memory "eeprom" size = 128; + paged = no; + page_size = 4; min_write_delay = 4000; max_write_delay = 4500; readback_p1 = 0xff; @@ -6273,6 +6406,16 @@ part write = "1 1 0 0 0 0 0 0 0 0 0 x x x x x", "x a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x x x", + " x a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + mode = 0x41; delay = 6; blocksize = 4; @@ -6430,6 +6573,8 @@ part memory "eeprom" size = 512; + paged = no; + page_size = 4; min_write_delay = 4000; max_write_delay = 4500; readback_p1 = 0xff; @@ -6440,6 +6585,16 @@ part write = "1 1 0 0 0 0 0 0 0 0 0 x x x x a8", "a7 a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x x x", + " a7 a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + mode = 0x41; delay = 6; blocksize = 4; @@ -6597,6 +6752,8 @@ part memory "eeprom" size = 512; + paged = no; + page_size = 4; min_write_delay = 4000; max_write_delay = 4500; readback_p1 = 0xff; @@ -6607,6 +6764,16 @@ part write = "1 1 0 0 0 0 0 0 0 0 0 x x x x a8", "a7 a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x x x", + " a7 a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + mode = 0x41; delay = 6; blocksize = 4; @@ -6763,6 +6930,8 @@ part memory "eeprom" size = 128; + paged = no; + page_size = 4; min_write_delay = 4000; max_write_delay = 4500; readback_p1 = 0xff; @@ -6773,6 +6942,16 @@ part write = "1 1 0 0 0 0 0 0 0 0 0 x x x x x", "x a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x x x", + " x a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + mode = 0x41; delay = 6; blocksize = 4; @@ -6937,6 +7116,16 @@ part write = "1 1 0 0 0 0 0 0 0 0 0 x x x x x", "a7 a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x x x", + " a7 a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + mode = 0x41; delay = 6; blocksize = 4; @@ -7090,6 +7279,8 @@ part memory "eeprom" size = 512; + paged = no; + page_size = 4; min_write_delay = 4000; max_write_delay = 4500; readback_p1 = 0xff; @@ -7100,6 +7291,16 @@ part write = "1 1 0 0 0 0 0 0 0 0 0 x x x x a8", "a8 a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x x a8", + " a7 a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + mode = 0x41; delay = 6; blocksize = 4; @@ -7274,6 +7475,16 @@ part " a7 a6 a5 a4 a3 a2 a1 a0", " i i i i i i i i"; + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 0 0 0", + " x x x x x x x x"; + mode = 0x41; delay = 10; blocksize = 8; @@ -7452,6 +7663,16 @@ part " a7 a6 a5 a4 a3 a2 a1 a0", " i i i i i i i i"; + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 0 0 0", + " x x x x x x x x"; + mode = 0x41; delay = 10; blocksize = 8; @@ -7631,6 +7852,16 @@ part " a7 a6 a5 a4 a3 a2 a1 a0", " i i i i i i i i"; + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 0 0 0", + " x x x x x x x x"; + mode = 0x41; delay = 10; blocksize = 8; @@ -7809,6 +8040,16 @@ part " a7 a6 a5 a4 a3 a2 a1 a0", " i i i i i i i i"; + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 0 0 0", + " x x x x x x x x"; + mode = 0x41; delay = 10; blocksize = 8; @@ -7992,6 +8233,16 @@ part " a7 a6 a5 a4 a3 a2 a1 a0", " i i i i i i i i"; + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x a11 a10 a9 a8", + " a7 a6 a5 a4 a3 0 0 0", + " x x x x x x x x"; + mode = 0x41; delay = 10; blocksize = 8; @@ -8155,6 +8406,8 @@ part memory "eeprom" size = 128; + paged = no; + page_size = 4; min_write_delay = 4000; max_write_delay = 4500; readback_p1 = 0xff; @@ -8165,6 +8418,16 @@ part write = "1 1 0 0 0 0 0 0 0 0 0 x x x x x", "x a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x x x", + " x a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + mode = 0x41; delay = 6; blocksize = 4; @@ -8320,6 +8583,8 @@ part memory "eeprom" size = 256; + paged = no; + page_size = 4; min_write_delay = 4000; max_write_delay = 4500; readback_p1 = 0xff; @@ -8330,6 +8595,16 @@ part write = "1 1 0 0 0 0 0 0 0 0 0 x x x x x", "a7 a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x x x", + " x a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + mode = 0x41; delay = 6; blocksize = 4; @@ -8485,6 +8760,8 @@ part memory "eeprom" size = 512; + paged = no; + page_size = 4; min_write_delay = 4000; max_write_delay = 4500; readback_p1 = 0xff; @@ -8495,6 +8772,16 @@ part write = "1 1 0 0 0 0 0 0 0 0 0 x x x x a8", "a8 a6 a5 a4 a3 a2 a1 a0 i i i i i i i i"; + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 0 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x x x x", + " x a6 a5 a4 a3 a2 0 0", + " x x x x x x x x"; + mode = 0x41; delay = 6; blocksize = 4; @@ -8672,6 +8959,16 @@ part " a7 a6 a5 a4 a3 a2 a1 a0", " i i i i i i i i"; + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x a10 a9 a8", + " a7 a6 a5 a4 a3 0 0 0", + " x x x x x x x x"; + mode = 0x41; delay = 10; blocksize = 8; @@ -8852,6 +9149,16 @@ part " a7 a6 a5 a4 a3 a2 a1 a0", " i i i i i i i i"; + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x a10 a9 a8", + " a7 a6 a5 a4 a3 0 0 0", + " x x x x x x x x"; + mode = 0x41; delay = 10; blocksize = 8; @@ -9030,6 +9337,16 @@ part " a7 a6 a5 a4 a3 a2 a1 a0", " i i i i i i i i"; + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x a10 a9 a8", + " a7 a6 a5 a4 a3 0 0 0", + " x x x x x x x x"; + mode = 0x41; delay = 10; blocksize = 8; @@ -9209,6 +9526,16 @@ part " a7 a6 a5 a4 a3 a2 a1 a0", " i i i i i i i i"; + loadpage_lo = " 1 1 0 0 0 0 0 1", + " 0 0 0 0 0 0 0 0", + " 0 0 0 0 0 a2 a1 a0", + " i i i i i i i i"; + + writepage = " 1 1 0 0 0 0 1 0", + " 0 0 x x x a10 a9 a8", + " a7 a6 a5 a4 a3 0 0 0", + " x x x x x x x x"; + mode = 0x41; delay = 10; blocksize = 8;