Ich habe hier einen ATMega88.
Wenn seine Signatur mittels JTAGICE3 lese, ist sie korrekt: 0x1E 0x93
0x0A
Wenn ich versuche die Signatur von der Software aus mittels
boot_signature_byte_get() zu lesen...
1. Ist das SIGRD-Bit nicht definiert
2. Wenn ich das SIGRD-Bit definiere (5), wird folgendes ausgelesen: 0x21
0x30 0x2F
In den Errata steht nichts.
S. Landolt schrieb:> Das geht bei einem ATmega88? Gibt es dazu auch eine Stelle im> Datenblatt, ich finde nichts.
Ich denke auch, dass das nicht geht, u.a. weil es das SIGRD beim
Atmega88 auch nicht gibt.
Frank Roggel schrieb:> 1. Ist das SIGRD-Bit nicht definiert
Wird über die air/io.h definiert, aber nur wenn dein Atmega das auch hat
was beim Atmega88 anscheinend nicht der Fall ist.
Baldrian schrieb:> Man beachte den letzten Satz.
Aber der bezieht sich auf SPM, oder nicht?
> Wie ist der date code deines Controllers?
ATMega88-20PU 1636.
>Wie sieht deine Leseroutine aus?
Aus avr/boot.h:
Frank Roggel schrieb:> 1. Ist das SIGRD-Bit nicht definiert
Sollte uns das nicht zu denken geben?
Frank Roggel schrieb:> 2. Wenn ich das SIGRD-Bit definiere (5)
Nur weil Du ein Bit definierst, ändert sich dadurch nicht die Hardware
des ATmega88. Das Bit bleibt nicht implementiert.
an Frank Roggel:
Okay, ich bezog mich auf ein älteres Datenblatt, die neuesten sind zwar
stellenweise schön bunt, enthalten aber einige Fehler, zu viele für
meinen Geschmack.
In dem von Ihnen verlinkten von 11/2016 steht, ähnlich wie von
Baldrian zitiert, auf Seite 362 unter dem Punkt 'Bit 5 – SIGRD:
Signature Row Read' "This operation is reserved for future use and
should not be used".
PS: den Begriff "future use" fasse ich nicht so auf, dass jetzt
Microchip das alte Atmel-Design des ATmega88 überarbeitet und unter
derselben Bezeichnung neu herausgibt, wo wäre da der Sinn? Er wird sich
auf neuere Typen beziehen.
Im Datenblatt vom ATMega644 steht auch "This operation is reserved for
future use and should not be used" und dort funktioniert es ja.
Ich gehe davon aus, dass sich diese Einschränkung auf die Verwendung von
"SPM" bezieht.
Worauf sich das bezieht ist völlig Wurscht. Fakt ist und bleibt, dass
das Bit SGRID auf dem Atmega88 nicht implementiert ist und von daher
kann man das Signaturbit auch nicht auslesen.
> Im Datenblatt vom ATMega644 steht auch ... future use ...
Das stimmt, und trotzdem geht es bei meinem zehn Jahre alten ATmega644;
andererseits ist in dessen inc-Datei von 2011-08-25 das Bit SIGRD
definiert.
Der_Blister schrieb:> Dort steht aber auch, dass es "read only" ist und nicht verwendet werden> sollte.
Im Abschnitt "31.8.10. Reading the Signature Row from Software"
steht folgendes geschrieben:
"To read the Signature Row from software, load the Z-pointer
with the signature byte address given in the following table
and set the SIGRD and SPMEN bits in SPMCSR (SPMCSR.SIGRD and
SPMCSR.SPMEN)."
"set the SIGRD" - sieht das für dich wie "read only" aus?
Aber unabhängig davon, wenn das Bit im m88 nicht implementiert ist,
funktioniert das ganze nicht. Punkt.
npn schrieb:> "set the SIGRD" - sieht das für dich wie "read only" aus?
Ja, da gibts mehrere Fehler in dem Datenblatt. Wie du ja auch gesehen
hast ist das Bit im Register lediglich als Read gekennzeichnet, nicht
als Read/Write. Was stimmt denn nun? Deine zitierte Beschreibung
beschreibt ja auch nur, was man machen muss um ein Signatur-Byte zu
lesen. Da steht ja nicht explizit, obs auch wirklich geht ;)
M. K. schrieb:> Deine zitierte Beschreibung> beschreibt ja auch nur, was man machen muss um ein Signatur-Byte zu> lesen. Da steht ja nicht explizit, obs auch wirklich geht ;)
Richtig! Deshalb mein letzter Satz:
npn schrieb:> Aber unabhängig davon, wenn das Bit im m88 nicht implementiert ist,> funktioniert das ganze nicht. Punkt.