1

atmega32 の署名行を読み取ろうとしましboot_signature_byte_get(0);たが、このエラーが発生しました: 'SIGRD' undeclared (first use in this function)SPMCR に SIGRD ビットを持つ AVR でしか署名を読み取ることができないためです (私は推測します!)。
これは正しいですか?それでは、どうすれば署名行を別の方法で読むことができますか?

4

4 に答える 4

2

2007 年には、署名バイトを読み取るための関数がヘッダーにありませんでしたが、同じ年に導入されました。しかし、どうやら、それにはまだいくつかの問題があります。

データシートには次のように記載されています。

All Atmel microcontrollers have a three-byte signature code which identifies the device.
This code can be read in both serial and parallel mode, also when the device is locked.
The three bytes reside in a separate address space.

ATMEGA32 がこのバイトに読み取りアクセスできることを意味します。また、データシートでは、このバイトの読み取り方法を指定しています。また、ほとんどの MCU では同じ方法で読み取られますが、何らかの理由で、SIGRDATMEGA32 を含む一部のヘッダー ファイルで定義番号が欠落しています。

ただし、回避策として、手動で定義できますSIGRD。その価値を知る必要があります。この定義をヘッダー ファイルで検索すると、満場一致で値が 5 になりますfindstrgrep

したがって、回避策は次のようになります。

#define SIGRD 5
#include <avr/boot.h>

これを正常にコンパイルしましたが、現在 ATMEGA32 を持っていないため、シミュレーション ソフトウェアでプログラムをテストしようとしました。バイトを返すので、これが正しいバイトかどうかはあなた次第です...

おっしゃったSPMCRの件ですが、署名行が別のアドレス空間にあるようで(私の理解では、これが正しいかどうかはわかりません確認できません)、それを取得する方法は、いくつかの命令を使用しています、同様に、プログラムを MCU にアップロードするときも同様です。

于 2012-09-19T22:14:05.727 に答える
0

atmega32 は、ユーザー プログラム内の署名バイトの読み取りをサポートしていないと思います。

atmega32データシートは、このデバイスのレジスタ SPMCR に SIGRD と呼ばれるビットがなく、このレジスタの 5 番目のビットが予約されており、読み取り専用としてマークされていることを明らかにしています。

atmega640 /1280/2560プロセッサには、このビット SIGRD (ビット 5)を持つspmcSrと呼ばれる同様のレジスタがあります。ただし、データシートには、この操作は将来の使用のために予約されているため、このビットを使用すべきではないと説明されています (それでも、署名を読み取る手順はそこで説明されています)。

atmega32 にはこの SIGRD ビットがないため、コンパイラは正しく動作します。

于 2014-09-27T11:32:10.313 に答える