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.
> Signatur von der Software aus ... zu lesen
Das geht bei einem ATmega88? Gibt es dazu auch eine Stelle im
Datenblatt, ich finde 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.
S. Landolt schrieb: > Das geht bei einem ATmega88? Gibt es dazu auch eine Stelle im > Datenblatt, ich finde nichts. Hier steht's drinn: http://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-2545-8-bit-AVR-Microcontroller-ATmega48-88-168_Datasheet.pdf Kapitel 31.8.10
Atmel-8271I-AVR- ATmega-Datasheet_10/2014
1 | • Bit 5 – SIGRD: Signature Row Read |
2 | If this bit is written to one at the same time as SPMEN, the next LPM instruction within three clock cycles will |
3 | read a byte from the signature row into the destination register. see ”Reading the Signature Row from Software” |
4 | on page 271 for details. An SPM instruction within four cycles after SIGRD and SPMEN are set will have no |
5 | effect. This operation is reserved for future use and should not be used. |
Man beachte den letzten Satz. Wie ist der date code deines Controllers? Wie sieht deine Leseroutine aus?
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:
1 | #define __BOOT_SIGROW_READ (_BV(__SPM_ENABLE) | _BV(SIGRD))
|
2 | |
3 | #define boot_signature_byte_get(addr) \
|
4 | (__extension__({ \
|
5 | uint8_t __result; \
|
6 | __asm__ __volatile__ \
|
7 | ( \
|
8 | "sts %1, %2\n\t" \
|
9 | "lpm %0, Z" "\n\t" \
|
10 | : "=r" (__result) \
|
11 | : "i" (_SFR_MEM_ADDR(__SPM_REG)), \
|
12 | "r" ((uint8_t)(__BOOT_SIGROW_READ)), \
|
13 | "z" ((uint16_t)(addr)) \
|
14 | ); \
|
15 | __result; \
|
16 | }))
|
PS: Auf einem ATMega644 funktioniert der Code, und da steht der gleiche Abschnitt im Datenblatt.
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.
:
Bearbeitet durch User
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.
Peter D. schrieb: > Sollte uns das nicht zu denken geben? Wie gesagt, im Datenblatt steht's drinn, Seite 344. http://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-2545-8-bit-AVR-Microcontroller-ATmega48-88-168_Datasheet.pdf
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.
Frank Roggel schrieb: > Peter D. schrieb: >> Sollte uns das nicht zu denken geben? > > Wie gesagt, im Datenblatt steht's drinn, Seite 344. > http://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-2545-8-bit-AVR-Microcontroller-ATmega48-88-168_Datasheet.pdf Dort steht aber auch, dass es "read only" ist und nicht verwendet werden sollte.
> 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.
> völlig Wurscht. Fakt ist ... > Punkt. "Basta!" - um einen jetzt etwas umstrittenen Herrn zu zitieren.
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.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.