Forum: Mikrocontroller und Digitale Elektronik ATTiny25/45/85: "Device Signature" Lesekommandos


von Johannes (menschenskind)



Lesenswert?

Hallo,

Ich habe hier Arduino-Code zum Auslesen der Signatur-Bytes von AVRs.
Es werden die letzten 4 Bytes der Signatur (hier vom Tiny85) korrekt 
ausgelesen, aber ich habe Verständnisprobleme bei den verwendeten 
SPI-Kommandos.
Lt. der Adresstabelle aus dem Datenblatt müssten mit den verwendeten 
Kommandos andere Informationen ausgelesen werden.
1
  uint16_t target_type = 0;
2
  Serial.print("\nReading signature: ");
3
  
4
  SPI.beginTransaction(fuses_spisettings); 
5
  
6
  target_type = spi_transaction(0x30, 0x00, 0x01, 0x00);
7
  target_type <<= 8;
8
  target_type |= spi_transaction(0x30, 0x00, 0x02, 0x00);
9
  SPI.endTransaction();
10
  
11
  Serial.println(target_type, HEX);

Anstatt zuerst der Adresse 0x01 müsste es doch 0x00 bzw. 0x04 sein.
Blöderweise ist auch die Tabelle 20-7 im Datenblatt fehlerhaft.

Danke für eure Hilfe :)

von Martin B. (Firma: BINE Automatentechnik ◔) (pac-man)


Lesenswert?

Das mittlere Byte ist Byte(2), nicht 1.
Das rechte ist Byte(4), nicht 0.

Signature ist Byte 0,2,4

Oder hab ich das falsch verstanden?

Gruß, Martin

: Bearbeitet durch User
von Johannes (menschenskind)


Lesenswert?

Martin B. schrieb:
> Signature ist Byte 0,2,4
>
> Oder hab ich das falsch verstanden?

Ja 😅 Also die Byte-Indizierung ist schon 0 bis 2.

Aber die eigentlichen Adressen, die gelesen werden müssen sind 0x00, 
0x02 und 0x04.
Das passt aber nicht zu den angegebenen SPI-Kommandos

von S. Landolt (Gast)


Angehängte Dateien:

Lesenswert?

Vielleicht hilft die Zeile 'Read Signature Byte' im Anhang zum 
Verständnis.

von S. Landolt (Gast)


Lesenswert?

Nachtrag:
Es verhält sich hier wie bei 'Read Program Memory': $n0 liest das 
Low-Byte, $n8 das High-Byte des Wortes.

von Johannes (menschenskind)


Angehängte Dateien:

Lesenswert?

S. Landolt schrieb:
> Vielleicht hilft die Zeile 'Read Signature Byte' im Anhang zum
> Verständnis.

Das ist ja verstanden, was passiert, nur passen die Kommandos
1
target_type = spi_transaction(0x30, 0x00, 0x01, 0x00);
2
  
3
target_type |= spi_transaction(0x30, 0x00, 0x02, 0x00);

nicht zu der Tabelle 20-6 (siehe Screenshot im ersten Post).
Oder sendet man als Kommando tatsächlich den Byteindex, den man auslesen 
will, anstatt der Adresse?

Übrigens ein weiterer Tippfehler auf angehängtem Bild 🙄

Und lt. Microchip ist die Byteindizierung in der Tabelle von links nach 
rechts aufsteigend.

von S. Landolt (Gast)


Lesenswert?

> passen die Kommandos ... nicht zu der Tabelle 20-6

?
Dort steht 'Signature byte 0,1,2', und genau so wird im SPI-Befehl $30 
adressiert.
  Dass die 3 Bytes auf 3 Worte verteilt sind, steht (wortwörtlich) auf 
einem anderen Blatt.

von S. Landolt (Gast)


Angehängte Dateien:

Lesenswert?

Vor langer Zeit, zum Beispiel beim AT90S8515, war von einer 'Signature 
Imprint Table' nicht die Rede, man kam gar nicht auf die Idee, beim 
Auslesen der Signatur etwas anderes als 0, 1 und 2 zu benutzen.

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.