Как загрузить файлы .hex на Pro Micro с помощью Linux?
У меня есть клавиатура, собранная вручную, на плате Pro Micro с чипом ATmega32u4. Кажется, я не могу прошить на него прошивку. Команды, которые я пробовал, являются вариациями:
avrdude -p m32U4 -P /dev/ttyACM0 -c avr109 -U flash:w:atreus62.hex
Ошибки, которые я получаю, начинаются:
Writing | #######avrdude: error: programmer did not respond to command: set addr
####avrdude: error: programmer did not respond to command: set addr
avrdude: error: programmer did not respond to command: write block
***failed;
***failed;
***failed;
***failed;
И конец:
#avrdude: error: programmer did not respond to command: set addr
avrdude: error: programmer did not respond to command: set addr
avrdude: error: programmer did not respond to command: set addr
#avrdude: error: programmer did not respond to command: set addr
avrdude: error: programmer did not respond to command: set addr
avrdude: error: programmer did not respond to command: set addr
# | 100% 0.16s
avrdude: verifying ...
avrdude: verification error, first mismatch at byte 0x0000
0x0d != 0x0c
avrdude: verification error; content mismatch
avrdude: error: programmer did not respond to command: leave prog mode
avrdude: error: programmer did not respond to command: exit bootloader
Я использую Arch Linux. Есть идеи?
@Jonathan, 👍1
Обсуждение2 ответа
Загрузка шестнадцатеричного файла в Arduino на базе USB состоит из двух этапов, и вы выполняете только второй этап.
Первый этап — сбросить плату в загрузчик, чтобы она могла принять инструкции второго этапа. Обычно IDE делает это вручную, когда вы нажимаете кнопку ЗАГРУЗИТЬ.
Способ сброса этих плат заключается в том, чтобы сначала открыть порт CDC/ACM и установить скорость передачи данных на 1200 бод, а затем снова закрыть порт. Это запускает код для сброса платы в загрузчик.
Вероятно, вы можете сделать это с помощью инструмента stty
в Linux:
$ stty -F /dev/ttyACM0 speed 1200
$ stty -F /dev/ttyACM0 speed 115200
$ avrdude -p m32U4 -P /dev/ttyACM0 -c avr109 -U flash:w:atreus62.hex
Второй stty
на самом деле может и не понадобиться, но полезно сбросить скорость передачи данных до нормального значения, готового к загрузке. Однако сейчас у меня нет под рукой доски, чтобы протестировать ее.
К сожалению, эти команды, похоже, не помогают. Они оба возвращают «9600», если это вообще полезно. Я все еще получаю ошибки «Программист не ответил»., @Jonathan
Возвращаемое значение — это значение, которое было до его изменения. Второй должен возвращать 1200, а не 9600. Вместо этого вы можете попробовать использовать stty -F /dev/ttyACM0 ospeed 1200 ispeed 1200
., @Majenko
Боюсь, это тоже не поможет., @Jonathan
У вас вообще это работало в IDE?, @Majenko
Я не понимаю, как загружать файлы .hex в чип с помощью IDE. (Более того, IDE для меня почти полностью бесполезна, поскольку пользовательский интерфейс не поддерживает HiDPI.), @Jonathan
Вы не загружаете шестнадцатеричные файлы с помощью IDE. Вы пишете код, компилируете его и загружаете. Попробуйте пример Блинка., @Majenko
@Jon Суть IDE и причина, по которой мы все твердим об этом, заключается в том, что успех в использовании автоматизации IDE для загрузки тривиального примера кода, который вас не интересует, показывает вам команды, которые вы затем можете использовать для загрузки своего собственного шестнадцатеричного файла. . Это позволяет вам извлечь выгоду из работы, которую кто-то другой вложил в выяснение того, как это сделать, вместо того, чтобы придумывать это заново с нуля. Когда дело доходит до реальной разработки программного обеспечения, в среде Arduino IDE больше неправильного, чем правильного, но что она хороша, так это внесение тривиального кода в чип, не тратя ни дня на чтение документации., @Chris Stratton
Также это подтверждает, что ваша плата действительно работает и способна принимать код. Некоторые дешевые китайские клоны поставляются без загрузчика., @Majenko
Однако если я не могу загружать шестнадцатеричные файлы с помощью IDE, как я могу их использовать? База кода, генерирующая мои шестнадцатеричные файлы, довольно сложна и разбросана по множеству файлов по всему QMK. Существует реальная сеть инструкций include, env var и makefile, в которых я, как программист, не использующий C, не могу разобраться. Попытка объединить все это таким образом, чтобы IDE могла его понять, кажется невероятно сложной. Поэтому я думаю, что все советуют использовать IDE из лучших побуждений, но это не поможет мне просто загрузить этот уже скомпилированный шестнадцатеричный файл на свою плату, что должно быть простой задачей., @Jonathan
Мы не советуем вам использовать IDE для выполнения вашей задачи. Мы советуем вам использовать IDE для проверки работоспособности платы и всего остального. Как только это подтвердится, мы сможем перейти к более низкоуровневым вещам., @Majenko
@Маженко, ты только что спас мой день, спасибо! Не удалось заставить QMK прошить мой pro micro с помощью любого обычного инструмента, но установка ospeed
и ispeed
явно заставила его волшебным образом работать. Для справки, я использую OSX., @RobertMcReed
У меня была такая же проблема, и она была вызвана udev, я нашел ответ здесь
Это какая-то непонятная ошибка
Настройка правил udev решила проблему для меня, теперь все в порядке, вот процедура: https://learn.adafruit.com/adafruit-arduino-ide-setup/linux-setup#udev-rules
Была такая же проблема, и это решило ее для меня! (в основном - мне все равно приходилось использовать команды stty из ответа Маженко и пару раз запускать загрузку, чтобы все заработало... но это сработало!) Немного сложно найти этот ответ..., @codermonkeyfuel
- "avrdude: stk500_getsync(): not in sync: resp=0x00", или некто по имени Avr не позволяет мне загрузить мою программу
- avrdude ser_open() can't set com-state
- При использовании Arduino Uno в качестве ISP: "Yikes! Invalid device signature" - плохое соединение, неверную конфигурацию или неверную версию avrdude?
- Не удается снова загрузиться после смены платы
- Тайм-аут связи Arduino Mega с ошибкой программатора
- avrdude: ошибка проверки, первое несоответствие в байте 0x0000 : 0x00 != 0x16 с использованием USBasp
- Как загрузить шестнадцатеричный файл в arduino uno?
- Arduino UNO для получения подписи чипа ATmega328P-PU
Включите подробный режим, запрограммируйте его один раз с помощью IDE и скопируйте используемую им командную строку., @Chris Stratton
Что такое IDE?, @Jonathan
И что вы подразумеваете под «запрограммировать это»? Не могли бы вы мне рассказать, что такое команда avrdude? У меня не установлена никакая IDE., @Jonathan
Кроме того, подробные режимы -v, -vv, -vvv и -vvvv, похоже, ни на что не влияют., @Jonathan
Вы задаете вопрос на сайте Arduino, предположительно вы знакомы с инструментами Arduino? Если нет, попробуйте сначала проверить настройку вашего оборудования и инструментов (прежде чем пытаться сделать что-то сложным способом. Используйте avrdude и файл конфигурации для него, который поставляется с современной версией Arduino IDE, и позвольте IDE управлять им в первый раз, выбрав в раскрывающемся меню подробный режим, чтобы вы увидели подходящую команду., @Chris Stratton
Я понятия не имею, что такое Arduino IDE, но я установил ее и не могу ничего понять. Как я могу открыть с его помощью шестнадцатеричный файл? Если бы я мог заставить IDE программировать плату, это тоже было бы хорошо, но я понятия не имею, что происходит в этой программе., @Jonathan
Кроме того, в IDE, похоже, нет моей платы (pro micro)., @Jonathan
@Джон, как ты создал шестнадцатеричный файл? ... странно, что вы не знаете, что такое IDE., @jsotola
Использование КМК. Я знаю, что такое IDE, но не знаю, что Arduino IDE должна делать с шестнадцатеричными файлами или как она должна работать., @Jonathan