运行时可以读取ATmega或ATtiny设备签名吗?


8

在对ATtiny或ATmega进行编程时,avrdude会打印设备签名,在此示例中,它是ATtiny。

avrdude: Device signature = 0x1e910a

我可以使用C ++代码(avr-gcc)在运行的设备上读取此签名吗?对于ATmega1280,有一章29.6.10对此进行了编写,但是我对如何用C ++编写代码感到有些困惑。

我希望能够使设备将其设备ID发送回控制PC,以便PC可以做出决定。


Answers:


7

您可以使用包含<avr/io.h>以下内容时自动定义的这些宏:

SIGNATURE_0
SIGNATURE_1
SIGNATURE_2

对于ATmega1280,它们的定义为:

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

in iom1280.h<avr/io.h>当您为m1280编译代码时会自动包括在内)

例如,这将通过UART发送三个字节:

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

如果您确实想阅读保险丝,则需要使用以下 命令中的boot_signature_byte_get<avr/boot.h>


我用boot_signature_byte_get( 0x00 )boot_signature_byte_get( 0x02 )boot_signature_byte_get( 0x04 )
jippie
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.