Forum: Mikrocontroller und Digitale Elektronik Falsche Signature im ATMega88?


von Frank Roggel (Gast)


Lesenswert?

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.

von S. Landolt (Gast)


Lesenswert?

> Signatur von der Software aus ... zu lesen

Das geht bei einem ATmega88? Gibt es dazu auch eine Stelle im 
Datenblatt, ich finde nichts.

von M. K. (sylaina)


Lesenswert?

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.

von Frank Roggel (Gast)


Lesenswert?

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

von Baldrian (Gast)


Lesenswert?

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?

von Frank Roggel (Gast)


Lesenswert?

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
}))

von Frank Roggel (Gast)


Lesenswert?

PS: Auf einem ATMega644 funktioniert der Code, und da steht der gleiche 
Abschnitt im Datenblatt.

von Peter D. (peda)


Angehängte Dateien:

Lesenswert?

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
von S. Landolt (Gast)


Lesenswert?

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".

von S. Landolt (Gast)


Lesenswert?

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.

von Frank Roggel (Gast)


Lesenswert?

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.

von Frank Roggel (Gast)


Angehängte Dateien:

Lesenswert?

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

von M. K. (sylaina)


Lesenswert?

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.

von Der_Blister (Gast)


Angehängte Dateien:

Lesenswert?

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.

von S. Landolt (Gast)


Lesenswert?

> 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.

von npn (Gast)


Lesenswert?

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.

von S. Landolt (Gast)


Lesenswert?

> völlig Wurscht. Fakt ist ...
> Punkt.

"Basta!" - um einen jetzt etwas umstrittenen Herrn zu zitieren.

von M. K. (sylaina)


Lesenswert?

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 ;)

von Peter D. (peda)


Lesenswert?

Zusammengefaßt: Beim 644 gehts, beim 88 nicht.

von npn (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.