Не могу загружать шестнадцатеричные файлы вне Arduino IDE на Pro Micro

У меня странная проблема. Я пытаюсь загрузить файл .hex в свой прекрасный Arduino Pro Micro, но не могу этого сделать. Если я использую Arduino IDE, он отлично работает и загружает скетч. Однако, если я попытаюсь использовать avrdude из терминала, я получу:

avrdude: butterfly_recv(): programmer is not responding
avrdude: error: programmer did not respond to command: leave prog mode
avrdude: butterfly_recv(): programmer is not responding
avrdude: error: programmer did not respond to command: exit bootloader

Моя командная строка:

avrdude -patmega32u4 -cavr109 -P/dev/ttyACM0 -t

и полный вывод:

Connecting to programmer: .avrdude: butterfly_recv(): programmer is not responding

avrdude: butterfly_recv(): programmer is not responding
avrdude: butterfly_recv(): programmer is not responding
avrdude: butterfly_recv(): programmer is not responding
avrdude: butterfly_recv(): programmer is not responding
avrdude: butterfly_recv(): programmer is not responding
Found programmer: Id = ""; type = 
    Software Version = .; Hardware Version = .
avrdude: butterfly_recv(): programmer is not responding
avrdude: butterfly_recv(): programmer is not responding
avrdude: error: buffered memory access not supported. Maybe it isn't
a butterfly/AVR109 but a AVR910 device?
avrdude: initialization failed, rc=-1
         Double check connections and try again, or use -F to override
         this check.

Connecting to programmer: .avrdude: butterfly_recv(): programmer is not responding

avrdude: butterfly_recv(): programmer is not responding
avrdude: butterfly_recv(): programmer is not responding
avrdude: butterfly_recv(): programmer is not responding
avrdude: butterfly_recv(): programmer is not responding
avrdude: butterfly_recv(): programmer is not responding
Found programmer: Id = ""; type = 
Software Version = .; Hardware Version = .
avrdude: butterfly_recv(): programmer is not responding
avrdude: butterfly_recv(): programmer is not responding
avrdude: error: buffered memory access not supported. Maybe it isn't
a butterfly/AVR109 but a AVR910 device?
avrdude: initialization failed, rc=-1
         Double check connections and try again, or use -F to override
         this check.

avrdude: butterfly_recv(): programmer is not responding
    avrdude: error: programmer did not respond to command: leave prog mode
    avrdude: butterfly_recv(): programmer is not responding
    avrdude: error: programmer did not respond to command: exit bootloader

Спасибо за любую помощь, это очень ценится.

--Доминик

, 👍1

Обсуждение

Программист ошибается. У вас нет загрузчика avr109, включите подробную загрузку из IDE и скопируйте и вставьте использованную команду., @Avamander

Это то, что я сделал. Кроме того, на микросхеме моего Arduino прямо написано «MEGA32u4»…, @KilowattLaser

К сожалению, я прочитал это как Pro Mini, а не как Pro Micro., @Avamander


2 ответа


Лучший ответ:

2

В отличие от 328P и подобных плат, 32U4 не имеет аппаратного метода запуска сброса для входа в загрузчик.

На платах с интерфейсом UART -> USB микросхема интерфейса USB вручную переключает контакт RESET для активации загрузчика. Без этого чипа сброс невозможен.

Поэтому пришлось изобрести другой метод. Этот метод предполагает открытие последовательного порта на скорости 1200 бод и немедленное его закрытие. Это вызывает перезагрузку загрузчика.

Среда разработки Arduino вручную выполняет эту задачу, когда вы нажимаете кнопку загрузки. Это не то, что avrdude умеет делать.

Поэтому вам придется придумать какой-нибудь способ открытия последовательного порта на скорости 1200 бод непосредственно перед запуском avrdude. Конечно, это означает, что устройство последовательного интерфейса исчезает на короткое время, пока чип перезагружается и входит в загрузчик, поэтому вам необходимо обеспечить задержку между методом сброса и вызовом avrdude — задержку, достаточную для вашего ОС переопределяет чип, но не настолько долго, чтобы время ожидания загрузчика истекло.

,

Отличный! Спасибо. Я перезагрузил плату вручную, чтобы проверить ее, и я смог нормально загрузить свой шестнадцатеричный файл., @KilowattLaser


0

У меня была странная проблема с платами Leonardo и Uno. Я даже использовал Arduino IDE (v1.8.5) для загрузки кода. В некоторых экстремальных обстоятельствах один из платы даже не были указаны в списке последовательных портов (Инструменты->Порт)

После многих попыток я просто записал загрузчик с помощью другого Uno, и это решило проблему!

Мне до сих пор неясно, что произошло, но проблема была вызвана считывателем RFID-карт, использующим SPI (выводы ICSP на плате). Устройство чтения карт (PN532) отправляло данные в Arduino, когда либо я загружал код, либо плата загружалась.

ОБНОВЛЕНИЕ, январь 2020 г.

По прошествии времени и многих попыток я понял, что доступ к Arduino UNO через интерфейс ISP во время загрузки кода невозможен. Модуль PN532 произвольно массировал UNO, когда я очистил микроконтроллер, который испортил код.

,

Какой загрузчик и какая версия? Есть несколько загрузчиков. Можете ли вы уточнить? Вы пользовались официальными? Или [Optiboot](https://www.instructables.com/id/Atmega328P-PU-Bootloader-Optiboot-Burning-Guide/)?, @Peter Mortensen

@PeterMortensen, я не помню, какой загрузчик был самым последним в 2017 году, но это точно была официальная версия, доступная в то время в Arduino IDE., @Adam Bubela