Может ли avrdude найти, к какому контроллеру он подключен?
Я программирую микроконтроллеры AVR, используя avrgcc и avrdude . Если я указываю неправильные контроллеры, то avrdude выдает сообщение об ошибке, указывающее неверную сигнатуру устройства. Есть ли метод avrdude, из которого я могу найти, к какому контроллеру он подключен, например, Atmega8,Atmega324,Atmega644 и т. Д. Тогда было бы легко изменить команду avrdude в зависимости от того, какой ответ контроллера получает.
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
Найдите все строки идентификатора плюс нашу одну строку подписи:
cat /etc/avrdude.conf
| grep "\(\<id\>\|$SIGNATURE\)"
Теперь извлеките соответствующую строку id для нашей подписи:
| grep -B 1 signature
| head -n 1
Наконец, мы удаляем все, кроме id:
| sed "s/.*\"\([a-z0-9]*\)\".*/\1/g"
Полученный результат должен быть пригоден для использования с вашими инструментами - надеюсь, это поможет...