我使用avrgcc和avrdude编程avr微控制器。如果我指定错误的控制器然后avrdude抛出错误消息syaing错误的设备签名。有没有一个avrdude方法,我可以从中找到它连接到哪个控制器,如Atmega8,Atmega324,Atmega644等。然后就控制器回复更改avrdude命令很容易。
答案 0 :(得分:0)
作为第一次尝试,你可以试试这个(当然是非常丑陋的解决方案):
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"
它适用于bash提示符,ATtiny2313a连接到USBTinyISP,avrdude.conf位于/ etc /。
让我们把它分开来做一个简短的解释。
sudo avrdude -cusbtiny -p1200 -U signature:r:-:i -F 2>/dev/null
签名位于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"
查找所有id行以及我们的一个签名行:
cat /etc/avrdude.conf
| grep "\(\<id\>\|$SIGNATURE\)"
现在为我们的签名提取相应的id行:
| grep -B 1 signature
| head -n 1
最后,除了id:
之外,我们删除了所有内容| sed "s/.*\"\([a-z0-9]*\)\".*/\1/g"
结果输出应该可以与您的工具一起使用 - 希望有帮助...