Как загрузить файлы .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. Есть идеи?

, 👍1

Обсуждение

Включите подробный режим, запрограммируйте его один раз с помощью 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


2 ответа


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


2

У меня была такая же проблема, и она была вызвана udev, я нашел ответ здесь

Это какая-то непонятная ошибка

Настройка правил udev решила проблему для меня, теперь все в порядке, вот процедура: https://learn.adafruit.com/adafruit-arduino-ide-setup/linux-setup#udev-rules

,

Была такая же проблема, и это решило ее для меня! (в основном - мне все равно приходилось использовать команды stty из ответа Маженко и пару раз запускать загрузку, чтобы все заработало... но это сработало!) Немного сложно найти этот ответ..., @codermonkeyfuel