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