Chữ ký của thiết bị ATmega hoặc ATtiny có thể được đọc trong khi chạy không?


8

Trong khi lập trình ATtiny hoặc ATmega, avrdude in chữ ký thiết bị, trong ví dụ này, đó là ATtiny.

avrdude: Device signature = 0x1e910a

Tôi có thể đọc chữ ký này trên thiết bị đang chạy bằng mã C ++ (avr-gcc) không? Đối với ATmega1280 có một chương 29.6.10 viết về nó, nhưng tôi hơi bối rối về cách tôi có thể mã hóa nó trong C ++.

Tôi muốn có thể làm cho thiết bị gửi ID thiết bị của mình trở lại PC đang kiểm soát, vì vậy PC có thể đưa ra quyết định về nó.


Câu hỏi này có liên quan chặt chẽ: Electronics.stackexchange.com/questions/58386/ trên
jippie

Câu trả lời:


7

Bạn có thể sử dụng các macro được xác định tự động khi bạn bao gồm <avr/io.h>:

SIGNATURE_0
SIGNATURE_1
SIGNATURE_2

Đối với ATmega1280, chúng được định nghĩa là:

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

trong iom1280.h(được bao gồm tự động thông qua <avr/io.h>khi bạn biên dịch mã cho m1280)

Ví dụ, điều này sẽ gửi ba byte qua UART:

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

Nếu bạn thực sự muốn đọc các cầu chì, bạn cần sử dụng macro boot_signature_byte_get từ<avr/boot.h>


Tôi đã sử dụng boot_signature_byte_get( 0x00 ), boot_signature_byte_get( 0x02 ),boot_signature_byte_get( 0x04 )
jippie
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.