0

avrgcc と avrdude を使用して avr マイクロコントローラーをプログラミングしています。間違ったコントローラーを指定している場合、avrdude は間違ったデバイス署名を示すエラー メッセージをスローします。Atmega8、Atmega324、Atmega644などのように、どのコントローラーに接続されているかを見つけることができるavrdudeメソッドはありますか。それから、取得しているコントローラーの応答に関してavrdudeコマンドを変更するのは簡単でしょう。

4

1 に答える 1

1

最初の試みとして、これを試すことができます(確かに非常に醜い解決策です):

SIGNATURE=`sudo avrdude -cusbtiny -p1200 -U signature:r:-:i -F 2>/dev/null 
| head -n1 
| sed "s/^:[0-9A-F]\{8\}\([0-9A-F]\{6\}\)[0-9A-F]*/\1/g" 
| sed "s/\([0-9A-F]\{2\}\)\([0-9A-F]\{2\}\)\([0-9A-F]\{2\}\)/0x\L\1 0x\L\2 0x\L\3/g"` 
&& cat /etc/avrdude.conf 
| grep "\(\<id\>\|$SIGNATURE\)" 
| grep -B 1 signature 
| head -n 1 
| sed "s/.*\"\([a-z0-9]*\)\".*/\1/g"

ATtiny2313a が USBTinyISP に接続され、avrdude.conf が /etc/ にある bash プロンプトで動作します。

簡単な説明のためにそれを分割しましょう。

デバイスの署名を取得する

sudo avrdude -cusbtiny -p1200 -U signature:r:-:i -F 2>/dev/null

avrdude.conf に一致するようにフォーマットを変更します

署名は、avrdude の出力の最初の行にあります。

| head -n1 

署名の 6 桁を抽出します。

| sed "s/^:[0-9A-F]\{8\}\([0-9A-F]\{6\}\)[0-9A-F]*/\1/g" 

小文字に変換し、「0x」と「,」を挿入

| sed "s/\([0-9A-F]\{2\}\)\([0-9A-F]\{2\}\)\([0-9A-F]\{2\}\)/0x\L\1 0x\L\2 0x\L\3/g"

avrdude.conf から対応する ID を抽出します

すべての ID 行と 1 つの署名行を検索します。

cat /etc/avrdude.conf 
| grep "\(\<id\>\|$SIGNATURE\)" 

ここで、署名に対応する id 行を抽出します。

| grep -B 1 signature 
| head -n 1 

最後に、id 以外のすべてを削除します。

| sed "s/.*\"\([a-z0-9]*\)\".*/\1/g"

結果の出力はツールで使用できるはずです-お役に立てば幸いです...

于 2014-03-27T12:10:44.013 に答える