Kann eine ATmega- oder ATtiny-Gerätesignatur während der Ausführung gelesen werden?

8

Während der Programmierung eines ATtiny oder ATmega druckt avrdude die Gerätesignatur. In diesem Beispiel handelt es sich um einen ATtiny.

avrdude: Device signature = 0x1e910a

Kann ich diese Signatur auf einem laufenden Gerät mit C ++ - Code (avr-gcc) lesen? Für ATmega1280 gibt es ein Kapitel 29.6.10, in dem darüber geschrieben wird, aber ich bin etwas verwirrt darüber, wie ich es in C ++ codieren kann.

Ich möchte in der Lage sein, das Gerät dazu zu bringen, seine Geräte-ID an den steuernden PC zurückzusenden, damit der PC Entscheidungen darüber treffen kann.

Jippie
quelle
Diese Frage ist eng verwandt: electronic.stackexchange.com/questions/58386/…
jippie

Antworten:

7

Sie können diese Makros verwenden, die automatisch definiert werden, wenn Sie Folgendes einschließen <avr/io.h>:

SIGNATURE_0
SIGNATURE_1
SIGNATURE_2

Für ATmega1280 sind sie definiert als:

/* Signature */
#define SIGNATURE_0 0x1E
#define SIGNATURE_1 0x97
#define SIGNATURE_2 0x03

in iom1280.h(das wird automatisch <avr/io.h>eingefügt, wenn Sie Code für den m1280 kompilieren)

Dies sendet beispielsweise die drei Bytes über UART:

uart_putc(SIGNATURE_0)
uart_putc(SIGNATURE_1)
uart_putc(SIGNATURE_2)

Wenn Sie die Sicherungen wirklich lesen möchten , müssen Sie das Makro boot_signature_byte_get von verwenden<avr/boot.h>

ksk
quelle
Früher habe ich boot_signature_byte_get( 0x00 ), boot_signature_byte_get( 0x02 ),boot_signature_byte_get( 0x04 )
jippie