avrdude可以找到它连接的控制器吗?

时间:2014-03-26 11:12:23

标签: avr avr-gcc avrdude

我使用avrgcc和avrdude编程avr微控制器。如果我指定错误的控制器然后avrdude抛出错误消息syaing错误的设备签名。有没有一个avrdude方法,我可以从中找到它连接到哪个控制器,如Atmega8,Atmega324,Atmega644等。然后就控制器回复更改avrdude命令很容易。

1 个答案:

答案 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.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行以及我们的一个签名行:

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

现在为我们的签名提取相应的id行:

| grep -B 1 signature 
| head -n 1 

最后,除了id:

之外,我们删除了所有内容
| sed "s/.*\"\([a-z0-9]*\)\".*/\1/g"

结果输出应该可以与您的工具一起使用 - 希望有帮助...