我正在使用 avrgcc 和 avrdude 对 avr 微控制器进行编程。如果我指定了错误的控制器,那么 avrdude 会抛出错误消息,指出错误的设备签名。是否有一种 avrdude 方法,我可以从中找到它连接到哪个控制器,例如 Atmega8、Atmega324、Atmega644 等。然后根据收到的控制器回复更改 avrdude 命令很容易。
问问题
675 次
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"
它在 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"
生成的输出应该可以与您的工具一起使用-希望对您有所帮助...
于 2014-03-27T12:10:44.013 回答