Arduino Uno Gravitech Rev 3.0 с интерфейсом командной строки avrdude (Mac OS) – правильный ли мой сценарий?
Я имею дело с платой Arduino Nano версии 3.0 от Gravitech. Внутри есть программа, которую я хотел бы загрузить в HEX-файл. Таким образом, я могу загрузить его на другие платы Arduino Nano.
Я новичок в Arduino. Поэтому я прочитал много документации в Интернете и пришел к выводу, что нужно использовать avrdude
в командной строке, поскольку Arduino IDE не предоставляет функции для загрузки в HEX-файл (насколько это возможно). Я понял).
Я установил все необходимое программное обеспечение на свой Mac OS Mojave (avrdude v7.0, используя «Mac Ports»). И после включения питания и подключения платы Arduino Nano к USB-порту моего Mac я запустил следующую командную строку:
avrdude -p m328p -D -c arduino -P /dev/tty.usbserial-A9077L99 -U flash:r:programme_arduino.bin:r -v -x попыток=4
Я получаю классическое сообщение
stk500_recv(): программист не отвечает
Я заметил, что светодиоды «Rx» и «L» мигали во время попыток.
С вашей точки зрения, хорошие ли варианты (-p -c ...)?
@DavidM31, 👍3
Обсуждение1 ответ
Ваша первая проблема — жалоба об отсутствии ответа. Вы сказали: «Я заметил, что во время попыток индикатор «Rx» горел, а индикатор «L» не светился». Является ли «пустым»; опечатка (т.е. светодиоды моргают?) или вы имели в виду, что они ничего не делают? Используете ли вы тот же кабель, который использовали для программирования nano? Можно ли поменять кабель на другой? Проверить этот кабель с другим нано? Правильно ли введен идентификатор порта (/dev/...etc)?
Дважды проверьте идентификатор программатора (опция -c) и номер детали (опция -p), запросив AVRDUDE (в каждом из них укажите '?' вместо допустимого значения).
Для опции -U вам нужно присвоить выходному файлу расширение .hex и указать формат файла как 'i' для intel hex:
-U flash:r:programme_arduino.hex:i
Вот ссылка на AVRDUDE, которую я использовал.
Обновление:
Я согласен, что ваш идентификатор порта должен быть правильным и кабель работает, поскольку ваши светодиоды мигают. Но вы получаете сообщение об ошибке «не отвечает». Есть ли в Nano загрузчик? Мог ли загрузчик быть поврежден при загрузке кода (например, код достаточно велик, чтобы перезаписать часть загрузчика)?
Двоичный код в Nano — единственная копия или у вас есть его исходный код? Если у вас есть исходный код, вы можете перекомпилировать его (при необходимости) и получить полученный шестнадцатеричный файл. Решит ли это вашу проблему? Настроив среду IDE для создания подробного вывода, вы увидите путь к временным файлам, включая файл .hex. Затем используйте Finder (или команду терминала, если вам это удобно), чтобы скопировать этот временный файл .hex в безопасное место.
Обновление 2:
Является ли область ПЗУ загрузчика и область Флэш-ПЗУ двумя разными областями памяти?
Не отдельно — загрузчик размещается в верхней части Flash. Достаточно большая программа может перезаписать его - я не уверен, нужно ли это специально разрешать, например, путем установки предохранителей. Если он будет перезаписан, он, очевидно, станет непригодным для использования.
Интересно, можно ли прочитать флеш с помощью аппаратного программатора? Обратите внимание, что эти чипы имеют предохранители блокировки, которые можно настроить для предотвращения дальнейшего программирования или чтения флэш-памяти.
Поскольку код этого устройства кажется вам ценным, я бы предложил отложить эту плату Nano в сторону и экспериментировать только с другой, надеюсь, идентичной платой. На новой плате -
- Загрузить в него скетч;
- Скопируйте командную строку AVRDUDE, используемую IDE, для ее загрузки, и измените ее, как вы уже описали. Конечно, эта команда уже будет иметь параметры, специфичные для платы;
- Используйте измененную команду, чтобы загрузить скетч в другой файл и сравнить его с только что загруженным файлом.
Как только вы сможете сделать это успешно, примените последний шаг, чтобы скопировать скетч из вашего ценного нано, а затем снова уберите эту плату. Загрузите и протестируйте загруженный код на своем экспериментальном Nano. Не забудьте включить ценную EEPROM Nano — она может содержать некоторые важные данные.
Насчет «пробела» я написал неправильно (извините за мой английский, я француз ;-)). Я имел в виду «мигание», т.е. светодиод мигает во время попытки avrdude., @DavidM31
Я попробовал с двумя кабелями USB mini-B. Поведение строго такое же. Обратите внимание, что эти кабели не являются оригинальными, поставляемыми с платой Arduino., @DavidM31
У меня есть только одна плата Arduino Nano. Я не могу попробовать с другим., @DavidM31
Я считаю, что идентификатор порта введен правильно, так как во время попыток avrdude я вижу мигание светодиодов (Rx, L). Это означает, что по крайней мере через линию USB Rx Arduino проходят какие-то данные..., @DavidM31
Что касается идентификатора программатора (опция -c), я что-то не очень понимаю. У меня есть сомнения по поводу того, что выбрать: «arduino», «usbtiny»… Я оставляю «arduino», поскольку по крайней мере немного общаюсь с ним…, @DavidM31
Что касается номера детали (опция -p), я изначально использую «m328p» (значение, указанное при попытке использовать Arduino IDE). Однако теперь, глядя на схему Arduino Nano от Gravity, я вижу, что используется микроконтроллер ATmega168. Поэтому я предполагаю, что в конце мне следует использовать «m168»..., @DavidM31
Что касается работы с памятью (опция -U), я использовал настройку со следующего сайта: https://www.evilmadscientist.com/2011/avr-basics-reading-and-writing-flash-contents/ . Если прочитать еще раз, речь идет о загрузке необработанного двоичного формата., @DavidM31
Спасибо @JRobert за ваше обновление: двоичный код Arduino Nano — единственная копия, которая у меня есть. К сожалению, у меня нет исходного кода (парень, который это сделал, давно ушел. Поэтому восстановить исходный код невозможно)., @DavidM31
Хороший вопрос про загрузчик. Код работает, поскольку я могу взаимодействовать со всей электроникой, как и ожидалось. Являются ли область ПЗУ загрузчика и область Флэш-ПЗУ двумя разными областями памяти? Т.е. файл .HEX может быть загружен, перекрывая область ПЗУ загрузчика и Флэш-ПЗУ?!, @DavidM31
- Arduino не реагирует на macbook pro
- avrdude ser_open() can't set com-state
- Не удается снова загрузиться после смены платы
- Arduino UNO для получения подписи чипа ATmega328P-PU
- Поддерживают ли чипы ATMega 328/2560 JTAG-программатор и аппаратный отладчик?
- Arduino Uno R3 (с Atmega 16u2) и MAC OSX 10.11 (El Capitan) не работают
- Ошибка при записи загрузчика
- Что означает avrdude: Device signature = 0x000000? Неисправная проводка? Проблема с программным обеспечением? Неправильная инструкция?
выполнить загрузку в HEX-файл
... ваша командная строка не содержит текстаHEX
... У меня нет Mac, но я думаю, что вы что-то не понимаете в Arduino IDE, @jsotolaСпасибо, jsotola за ваш комментарий. Arduino IDE позволяет загрузить эскиз на плату Arduino. Утилита командной строки «avrdude» должна позволять загружать содержимое флэш-ПЗУ платы Arduino в шестнадцатеричный или двоичный файл. Правильно, в командной строке я поставил «programme_arduino.bin» вместо «programme_arduino.hex». Однако я думаю, что это не имеет значения., @DavidM31
Я добавляю точность, я использовал programme_arduino.bin на основе настроек, которые нашел на сайте https://www.evilmadscientist.com/2011/avr-basics-reading-and-writing-flash-contents/, @DavidM31
мои извинения, я неправильно понял, о чем вы спрашиваете... начните с чистого Arduino Nano и Arduino IDE... в настройках включите "показывать подробный вывод во время загрузки"... загрузите пустой скетч в Nano... Arduino IDE отобразит командную строку avrdude, необходимую для загрузки скетча... затем отредактируйте командную строку, чтобы вместо этого выполнить загрузку, @jsotola
показывать подробный вывод во время загрузки
звучит как хорошая подсказка, чтобы получить хороший справочник по моей командной строке. Однако, поскольку я не хочу перезаписывать существующий код, я попробовал эту настройку при отключенной плате. Arduino IDE не отображает командную строку, поскольку порт не подключен., @DavidM31