Falsche Signature im ATMega88?

Gast #5126824
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.
#5126976
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.
Gast #5128036
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?
Gast #5128042
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
}))
Gast #5128068
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".
Gast #5128109
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.
Angehängte Dateien:
Gast #5128138
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.
#5128152
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 ;)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren