Dapatkah tanda tangan perangkat ATmega atau ATtiny dibaca saat berjalan?

8

Saat memprogram ATtiny atau ATmega, avrdude mencetak tanda tangan perangkat, dalam contoh ini adalah ATtiny.

avrdude: Device signature = 0x1e910a

Dapatkah saya membaca tanda tangan ini pada perangkat yang sedang berjalan menggunakan kode C ++ (avr-gcc)? Untuk ATmega1280 ada bab 29.6.10 menulis tentang itu, tapi saya agak bingung dengan bagaimana saya bisa mengkodekannya di C ++.

Saya ingin dapat membuat perangkat mengirim ID perangkatnya kembali ke PC yang mengendalikan, sehingga PC dapat membuat keputusan tentang hal itu.

jippie
sumber
Pertanyaan ini terkait erat: electronics.stackexchange.com/questions/58386/…
jippie

Jawaban:

7

Anda dapat menggunakan makro ini yang didefinisikan secara otomatis saat Anda memasukkan <avr/io.h>:

SIGNATURE_0
SIGNATURE_1
SIGNATURE_2

Untuk ATmega1280, mereka didefinisikan sebagai:

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

di iom1280.h(yang secara otomatis disertakan <avr/io.h>saat Anda mengkompilasi kode untuk m1280)

Misalnya, ini akan mengirim tiga byte melalui UART:

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

Jika Anda benar-benar ingin membaca sekering, Anda harus menggunakan boot_signature_byte_get dari makro<avr/boot.h>

ksk
sumber
Saya menggunakan boot_signature_byte_get( 0x00 ), boot_signature_byte_get( 0x02 ),boot_signature_byte_get( 0x04 )
jippie