www.mikrocontroller.net

Forum: Compiler & IDEs avrdude cycle counter funktioniert nicht


Autor: Thomas Holland (innot)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe gerade mal den avrdude erase cycle counter ausprobiert und 
irgendwie scheint das nicht so zu funktionieren wie ich mir das 
vorgestellt habe.

Also zuerst setzt ich den Counter auf einen Wert:
C:\DOKUME~1\Thomas>avrdude -pm8515 -cstk500v2 -Y 20

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.00s

avrdude: Device signature = 0x1e9306
avrdude: setting erase-rewrite cycle count to 20

avrdude: safemode: Fuses OK

avrdude done.  Thank you.

Soweit - so gut, in den letzten vier bytes des eeproms steht jetzt 20.

C:\DOKUME~1\Thomas>avrdude -pm8515 -cstk500v2 -t

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.02s

avrdude: Device signature = 0x1e9306
avrdude: current erase-rewrite cycle count is 20 (if being tracked)
avrdude> dump eeprom 508 4
>>> dump eeprom 508 4
01fc  00 00 00 14                                       |....            |

avrdude>

Wenn ich aber ein chip erase mache, dann wird der counter wieder 
gnadenlos überschrieben:
>avrdude -pm8515 -cstk500v2 -y -e
vrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.00s

avrdude: Device signature = 0x1e9306
avrdude: erasing chip

avrdude: safemode: Fuses OK

avrdude done.  Thank you.

C:\DOKUME~1\Thomas>avrdude -pm8515 -cstk500v2 -t

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.00s

avrdude: Device signature = 0x1e9306
avrdude> dump eeprom 508 4
>>> dump eeprom 508 4
01fc  ff ff ff ff                                       |....            |

avrdude>

Mach ich was falsch oder hat avrdude 'ne macke? Ich habe mir auch den 
Sourcecode zu avrdude angeschaut und da sieht alles auf dem ersten Blick 
gut aus - vor dem Chip Erase wird der cycle counter gelesen und nach dem 
erase wieder zurückgeschrieben (avr.c:786ff)

Any ideas?

Gruss

Thomas

P.S. Bevor jemand sagt das ich den Counter nicht brauche: Es geht um 
mein AVR Eclipse Plugin, bei dem ich Support für den Cycle Counter 
grundsätzlich vorgesehen hatte.

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hast du schon -e in Kombination mit -y getestet?
-y 
Tells AVRDUDE to use the last four bytes of the connected parts' EEPROM memory to track the number of times the device has been erased. When this option is used and the `-e' flag is specified to generate a chip erase, the previous counter will be saved before the chip erase, it is then incremented, and written back after the erase cycle completes. Presumably, the device would only be erased just before being programmed, and thus, this can be utilized to give an indication of how many erase-rewrite cycles the part has undergone. Since the FLASH memory can only endure a finite number of erase-rewrite cycles, one can use this option to track when a part is nearing the limit. The typical limit for Atmel AVR FLASH is 1000 cycles. Of course, if the application needs the last four bytes of EEPROM memory, this option should not be used. 
http://www.nongnu.org/avrdude/user-manual/avrdude_...

Autor: Thomas Holland (innot)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Stefan "stefb" B. wrote:
> Hast du schon -e in Kombination mit -y getestet?
>
Natürlich (s.o.: -y ist auch in der command line dabei)

Autor: Ja mann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du mußt vermutlich das Fuse-Bit "Preserve EEPROM...." setzen.

Autor: Thomas Holland (innot)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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
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
  // attempt to read the status back
  status = stk500v2_recv(pgm,buf,maxlen);

  // if we got a successful readback, return
  if (status > 0) {
    DEBUG(" = %d\n",status);
    if (status < 2) {
      fprintf(stderr, "%s: stk500v2_command(): short reply\n", progname);
      return -1;
    }
    if (buf[1] == STATUS_CMD_OK)
      return status;

Ein paar Ebenen höher beisst sich das aber mit dem code von avr.c, da in
int avr_chip_erase(PROGRAMMER * pgm, AVRPART * p)
der cycle counter nur zurückgeschrieben wird, wenn der returncode genau 
0 ist.
  rc = pgm->chip_erase(pgm, p);

  /*
   * Don't update the cycle counter, if erase failed
   */
  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

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Thomas Holland wrote:

> Ich werde mal ein Bugreport an die avrdude Developer absetzen.

Danke, nun muss ich nur mal sehen, wann ich endlich mal Zeit für
all die aufgelaufenen avrdude-Dinge finden werde...

Autor: Thomas Holland (innot)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jörg Wunsch wrote:
> Danke, nun muss ich nur mal sehen, wann ich endlich mal Zeit für
> all die aufgelaufenen avrdude-Dinge finden werde...

:-)

Ich muss mich jetzt auch erst mal wieder von avrdude losreißen und mich 
mal um mein AVR Eclipse Plugin kümmern.

Würde ja gerne etwas mehr bei avrdude helfen, aber bei den meisten 
offenen Bugs in avrdude reicht mir schon die Überschrift, um zu wissen 
dass es meine Zeit-Kapazitäten übersteigt würde :-)

Vielleicht wenn das AVR Eclipse Plugin fertig ist...

LG

Thomas

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.