Hallo MintUser.
Normalerweise macht avrdude vor jeder Programmierung ein Chiperase,
welches alle Seiten auf 0xff ruecksetzt. Dieses erase muss durchgefuehrt
werden, da der eigentliche ISP-Vorgang nur 1->0 setzten kann. (0->1 kann
nicht programmiert werden --> Aus diesem Grund faellt die AVRDUDE Option
"-D" schoneinmal aus.)
Im Zusammenhang mit USBaspLoader
(https://github.com/baerwolf/USBaspLoader) entfaellt die Notwendigkeit
des Chiperase (da der bootloader sich kuemmert etwaige Seiten ggf.
vorher zu loesen).
Somit werden immer nur die Seiten geloescht (und "verschleissen" daher),
welche tatsaechlich von AVRDUDE angefasst werden.
Um bei meinen MCUs die Flashlebensdauer zu verlaengern schreibe ich
meist eine default-firmware
(http://matrixstorm.com/avr/tinyusbboard/examples/empty.hex) an den
Anfang des Speichers, welche per RJUMPS die Interrupts spaeterer
Speicherstellen "verschiebt".
Nun muss ich nur noch verhindern, das bei "gewoehnlichen"
Programmiervorgaengen AVRDUDE "die zu schonenden Flashstellen" benutzt,
sondern stattdessen "ueberspringt".
Dies bringt mich schliesslich zum gleichen Problem, was du hast:
AVRDUDE muss gepatcht werden. Da ich nicht zu oft die Sprunggroesse
anendern muss ist demzufolge meine Loesung ein uebler HACK:
Ich hinterlege zuerst in der Datei ac_cfg.h das Makro "#define
STEPHAN_SKIPBYTES 0xC00" und patche, da ich USBasp als Protokoll
verwende, usbasp.c:
--- ../build/usbasp.c 2011-09-15 16:37:05.000000000 +0200
+++ usbasp.c 2012-07-24 17:21:23.318096473 +0200
@@ -676,6 +676,13 @@
if (strcmp(m->desc, "flash") == 0) {
function = USBASP_FUNC_WRITEFLASH;
+ // Stephan Patch
+ wbytes -= STEPHAN_SKIPBYTES;
+ buffer += STEPHAN_SKIPBYTES;
+ address += STEPHAN_SKIPBYTES;
+ fprintf(stderr,"\n\n SKIPPING %i bytes, only writing
%i bytes\n\n\n",(int)STEPHAN_SKIPBYTES,(int)wbytes);
+ fflush(stderr);
+ sleep(1);
} else if (strcmp(m->desc, "eeprom") == 0) {
function = USBASP_FUNC_WRITEEEPROM;
} else {
Der verify Prozess muesste theoretisch auch angepasst werden,
aber fuer den eigentlichen Zweck reicht das bereits.
Ich hoffe ich konnte helfen,
mfG Stephan