Может ли 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"

Полученный результат должен быть пригоден для использования с вашими инструментами - надеюсь, это поможет...

Другие вопросы по тегам