¿Se puede leer la firma de un dispositivo ATmega o ATtiny mientras se ejecuta?

8

Mientras programa un ATtiny o ATmega, avrdude imprime la firma del dispositivo, en este ejemplo es un ATtiny.

avrdude: Device signature = 0x1e910a

¿Puedo leer esta firma en un dispositivo en ejecución usando el código C ++ (avr-gcc)? Para ATmega1280 hay un capítulo 29.6.10 escribiendo sobre él, pero estoy un poco desconcertado por cómo puedo codificarlo en C ++.

Quiero poder hacer que el dispositivo envíe su ID de dispositivo a la PC de control, para que la PC pueda tomar decisiones al respecto.

jippie
fuente
Esta pregunta está estrechamente relacionada: electronics.stackexchange.com/questions/58386/…
jippie

Respuestas:

7

Puede usar estas macros que se definen automáticamente cuando incluye <avr/io.h>:

SIGNATURE_0
SIGNATURE_1
SIGNATURE_2

Para ATmega1280, se definen como:

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

in iom1280.h(que se incluye automáticamente <avr/io.h>cuando compila el código para el m1280)

Por ejemplo, esto enviará los tres bytes a través de UART:

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

Si realmente desea leer los fusibles, necesitaría usar la macro boot_signature_byte_get de<avr/boot.h>

ksk
fuente
Solía boot_signature_byte_get( 0x00 ), boot_signature_byte_get( 0x02 ),boot_signature_byte_get( 0x04 )
Jippie