Uma assinatura de dispositivo ATmega ou ATtiny pode ser lida durante a execução?

8

Ao programar um ATtiny ou ATmega, o avrdude imprime a assinatura do dispositivo, neste exemplo, é um ATtiny.

avrdude: Device signature = 0x1e910a

Posso ler esta assinatura em um dispositivo em execução usando o código C ++ (avr-gcc)? Para o ATmega1280, há um capítulo 29.6.10 escrevendo sobre isso, mas estou um pouco confuso sobre como posso codificá-lo em C ++.

Quero poder fazer com que o dispositivo envie sua ID de dispositivo de volta ao PC controlador, para que ele possa tomar decisões.

jippie
fonte
Esta pergunta está intimamente relacionada: electronics.stackexchange.com/questions/58386/…
jippie

Respostas:

7

Você pode usar essas macros definidas automaticamente quando incluir <avr/io.h>:

SIGNATURE_0
SIGNATURE_1
SIGNATURE_2

Para ATmega1280, eles são definidos como:

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

in iom1280.h(incluído automaticamente <avr/io.h>quando você compila o código para o m1280)

Por exemplo, isso enviará os três bytes via UART:

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

Se você realmente deseja ler os fusíveis, precisará usar a macro boot_signature_byte_get de<avr/boot.h>

ksk
fonte
Eu costumava boot_signature_byte_get( 0x00 ), boot_signature_byte_get( 0x02 ),boot_signature_byte_get( 0x04 )
jippie