Linux avrdude: stk500_getsync()
При попытке прошить мой подлинный arduino micro с помощью avrdude из cmd в системе Manjaro я получаю печально известную ошибку
avrdude: stk500_getsync() попытка x из 10 ...
Я добавляю этот пост ко многим другим, которые спрашивают об этой ошибке, потому что все они пытаются использовать IDE для прошивки arduino, тогда как я могу использовать его без проблем как в Linux, так и в Windows, но при использовании avrdude из cmd в Linux я получаю эту ошибку. Это подтверждает, что плата в порядке, и на выводе сброса нет коротких замыканий или любой другой возможной физической причины этой проблемы, похоже, что-то не так в конфигурации avrdude.
Это мой Makefile:
default: build
build:
avr-gcc -mmcu=atmega32u4 main.c -o main
flash:
avr-objcopy -O ihex -R .eeprom main main.hex
avrdude -F -V -c arduino -p m32u4 -P /dev/ttyACM0 -b 115200 -U flash:w:main.hex
Можете ли вы в любом случае предложить, как это исправить?
Редактировать: Проблема решена!
Ошибка была в параметре -c
, для atmega 32u4 это должен быть avr109,
а не arduino
.
@Steve, 👍3
Обсуждение1 ответ
Существует два распространенных способа сброса Arduino в загрузчик:
- Для плат на базе UART (Uno, Mega2560 и т. Д.) Простое открытие порта сбрасывает плату
- Для плат на базе USB (Micro и т. Д. С чипом 32u4) Вы должны вручную указать ему сброс
Ваш вариант 2 - если вы не скажете ему сбросить плату, он ничего не сделает. Среда разработки обычно обрабатывает это за вас.
Но это просто: просто откройте порт CDC / ACM со скоростью 1200 бод и снова закройте. Самый простой способ - использовать stty
, чтобы сделать это за вас:
stty -F /dev/ttyACM0 speed 1200
Вы должны обнаружить, что затем он сбрасывает плату. Добавление короткой задержки для сброса USB-порта тоже было бы неплохо. Таким образом, вся ваша процедура программирования может выглядеть примерно так:
flash:
avr-objcopy -O ihex -R .eeprom main main.hex
stty -F /dev/ttyACM0 speed 1200
sleep 1
avrdude -F -V -c arduino -p m32u4 -P /dev/ttyACM0 -b 115200 -U flash:w:main.hex
В Makefiles я считаю полезным установить порт в качестве переопределяемой переменной:
PORT?=/dev/ttyACM0
Затем используйте ${PORT}
везде вместо /dev/ttyACM0
- тогда вы можете использовать make PORT=/dev/ttyACM1,
если вам нужно, без необходимости редактировать Makefile . Отлично, если у вас есть несколько плат.
Я действительно думал о перезагрузке, спасибо за объяснение! Когда я запускаю команду flash, я получаю следующее, а затем она останавливается, не продвигаясь дальше: `avr-objcopy -O ihex -R .eeprom main main.hex \ n
stty -F / dev / ttyACM0 скорость 1200 \ n
9600 \ n
` Что все это значит?, @Steve
Этот [Arduino Makefile](https://github.com/sudar/Arduino-Makefile ) поставляется с [небольшим скриптом] (https://github.com/sudar/Arduino-Makefile/blob/1.6.0/bin/ard-reset-arduino ), который делает именно это на микро, и имеет другую логику для других типов плат., @Edgar Bonet
@EdgarBonet Я пытаюсь изучить низкоуровневое программирование, вот почему я делаю это с помощью MakeFile, я не хочу использовать скрипт на python., @Steve
- Что нужно для компиляции Linux на Arduino, если это вообще возможно?
- Arduino IDE Отказано В Разрешении На Загрузку, Ubuntu
- В Linux, как идентифицировать несколько Arduino, подключенных через USB?
- Отключение Arduino при загрузке
- avr/io.h ошибка "No such file or directory" при компиляции с использованием avr-gcc
- Как отключить мигающий курсор/каретку в среде IDE Arduino?
- Выбранная плата зависит от ядра Arduino (Selected board depends on 'arduino' core (not installed))
- Как подключить Arduino Nano к ноутбуку с Linux
В среде IDE вы можете установить предпочтение подробному выводу при загрузке, а затем просмотреть журнал. В нем могут отображаться все команды, которые использует IDE., @the busybee