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.


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>


Früher habe ich boot_signature_byte_get( 0x00 ), boot_signature_byte_get( 0x02 ),boot_signature_byte_get( 0x04 )
jippie
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.