Une signature d'appareil ATmega ou ATtiny peut-elle être lue pendant l'exécution?

8

Lors de la programmation d'un ATtiny ou ATmega, avrdude imprime la signature du périphérique, dans cet exemple, il s'agit d'un ATtiny.

avrdude: Device signature = 0x1e910a

Puis-je lire cette signature sur un appareil en cours d'exécution à l'aide du code C ++ (avr-gcc)? Pour ATmega1280, il y a un chapitre 29.6.10 qui écrit à ce sujet, mais je suis un peu perplexe sur la façon dont je peux le coder en C ++.

Je souhaite que l'appareil puisse renvoyer son ID d'appareil au PC de contrôle, afin que le PC puisse prendre des décisions à ce sujet.

jippie
la source
Cette question est étroitement liée: electronics.stackexchange.com/questions/58386/…
jippie

Réponses:

7

Vous pouvez utiliser ces macros qui sont définies automatiquement lorsque vous incluez <avr/io.h>:

SIGNATURE_0
SIGNATURE_1
SIGNATURE_2

Pour ATmega1280, ils sont définis comme:

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

dans iom1280.h(qui est automatiquement inclus <avr/io.h>lors de la compilation du code pour le m1280)

Par exemple, cela enverra les trois octets via UART:

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

Si vous voulez vraiment lire les fusibles, vous devez utiliser la macro boot_signature_byte_get de<avr/boot.h>

ksk
la source
Je boot_signature_byte_get( 0x00 ), boot_signature_byte_get( 0x02 ),boot_signature_byte_get( 0x04 )
Jippie