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 ...)?

Arduino Nano Gravitech v3.0

, 👍3

Обсуждение

выполнить загрузку в 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


1 ответ


2

Ваша первая проблема — жалоба об отсутствии ответа. Вы сказали: «Я заметил, что во время попыток индикатор «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