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

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 que escribe al respecto, pero estoy un poco desconcertado sobre 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.

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

Respuestas (1)

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, debe usar la macro boot_signature_byte_get de<avr/boot.h>

Yo usé boot_signature_byte_get( 0x00 ), boot_signature_byte_get( 0x02 ),boot_signature_byte_get( 0x04 )