È possibile leggere una firma del dispositivo ATmega o ATtiny durante l'esecuzione?


8

Durante la programmazione di un ATtiny o ATmega, avrdude stampa la firma del dispositivo, in questo esempio è un ATtiny.

avrdude: Device signature = 0x1e910a

Posso leggere questa firma su un dispositivo in esecuzione usando il codice C ++ (avr-gcc)? Per ATmega1280 c'è un capitolo 29.6.10 che ne parla, ma sono un po 'perplesso da come posso codificarlo in C ++.

Voglio essere in grado di fare in modo che il dispositivo rispedisca l'ID dispositivo al PC di controllo, in modo che il PC possa prendere delle decisioni in merito.


Questa domanda è strettamente correlata: electronics.stackexchange.com/questions/58386/…
jippie

Risposte:


7

Puoi utilizzare queste macro che vengono definite automaticamente quando includi <avr/io.h>:

SIGNATURE_0
SIGNATURE_1
SIGNATURE_2

Per ATmega1280, sono definiti come:

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

in iom1280.h(che viene automaticamente incluso <avr/io.h>durante la compilazione del codice per m1280)

Ad esempio, questo invierà i tre byte tramite UART:

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

Se vuoi veramente leggere i fusibili, dovresti usare la macro boot_signature_byte_get da<avr/boot.h>


Ho usato boot_signature_byte_get( 0x00 ), boot_signature_byte_get( 0x02 ),boot_signature_byte_get( 0x04 )
jippie
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.