Ja mann wrote:
> Du mußt vermutlich das Fuse-Bit "Preserve EEPROM...." setzen.
Nein, daran lag es nicht.
Es sieht doch nach einem Bug in avrdude aus.
Ich habe cygwin installiert, avrdude compiliert, den debugger
angeschmissen und gesehen, dass in stk500v2.c in
1 | static int stk500v2_command(PROGRAMMER * pgm, unsigned char * buf, size_t len, size_t maxlen)
|
als Statuscode nicht 0 für Erfolg sondern die Anzahl der empfangenen
Bytes zurückgegeben wird
1 | // attempt to read the status back
|
2 | status = stk500v2_recv(pgm,buf,maxlen);
|
3 |
|
4 | // if we got a successful readback, return
|
5 | if (status > 0) {
|
6 | DEBUG(" = %d\n",status);
|
7 | if (status < 2) {
|
8 | fprintf(stderr, "%s: stk500v2_command(): short reply\n", progname);
|
9 | return -1;
|
10 | }
|
11 | if (buf[1] == STATUS_CMD_OK)
|
12 | return status;
|
Ein paar Ebenen höher beisst sich das aber mit dem code von avr.c, da in
1 | int avr_chip_erase(PROGRAMMER * pgm, AVRPART * p)
|
der cycle counter nur zurückgeschrieben wird, wenn der returncode genau
0 ist.
1 | rc = pgm->chip_erase(pgm, p);
|
2 |
|
3 | /*
|
4 | * Don't update the cycle counter, if erase failed
|
5 | */
|
6 | if (do_cycles && (rc == 0)) {
|
Wenn ich "(rc == 0)" durch "(rc >= 0)" ersetze funktioniert der cycle
count zumindest für meinen stk500v2 wieder wie beschrieben.
Ich werde mal ein Bugreport an die avrdude Developer absetzen.
brgds
Thomas