Avrdude. Как скачать, забэкапить и залить заново прошивку

CraVeg
Идет загрузка
Загрузка
30.04.2016
45328
54
печатает на Anet A8
Техничка

Подпишитесь на автора

Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых постах.

Отписаться от уведомлений вы всегда сможете в профиле автора.

74
Представьте такую ситуацию. 'У вас есть плата от принтера (допустим китайского), которая содержит какую-то свою прошивку. И вот настал тот день и тот час, когда вы решили, что вам нужно эту прошивку поменять, по тем или иным причинам. Но вас всё ещё держит одно 'но'. Вы боитесь всё испортить и хотите иметь возможность откатиться обратно. Но как назло - нормальной информации в интернете по вопросу, как забэкапить прошивку особо не нагуглишь. Примерно с такой проблемой ко мне, намедни, обратился один из участников нашего сообщества. И я решил, что раз уж так, то почему бы не поведать всем о том, как же это можно сделать.
Но прежде чем писать умные мысли - всё надо проверять, чем я и занялся. Эксперименты я проводил с Arduino Mega 2560. О ней дальше я и буду писать.

Поначалу я попытался пойти привычным способом 'влоб', достал программатор китайский (на заглавной фотке), подключился по ISP, и скачал прошивку. Попытался её залить назад... Льётся, но верификацию не проходит. Битых несколько часов рыл интернет, чтобы понять, как же можно нормально скачать прошивку с Меги по ISP. Толком ничего вразумительного не нашёл, но зато понял, что прошивку можно скачать и залить обратно и без программатора. Об этом опыте я и напишу ниже. А вот о том, как скачивать прошивку не с Arduino платы, да так чтобы она потом назад заливалась я напишу как-нибудь в следующий раз, когда у меня появится плата, которую можно безбоязненно пускать и в огонь и в воду.

Ладно, к делу. Для начала нам нужна утилита Avrdude, она входит в поставку Arduino IDE и в моей версии лежала в папке '%appdata%Arduino15packagesarduino oolsavrdude6.0.1-arduino2in'. Открываем папку, жмём на пустом месте SHIFT + правая кнопка мыши, а в меню выбираем 'Открыть окно команд'. Теперь приведу простую команду, которая проверяет, что контроллер читается.
avrdude.exe -p atmega2560 -c wiring -P COM5
Если всё в порядке, то вы должны увидеть примерно такой текст (см. скриншот).
Атрибуты команды:

-p atmega2560 - установка типа контроллера.

-c wiring - установка программатора. Это внутренний программатор в плате Arduino Mega 2560. Может я и не правильно выразился, но тот же атрибут использует IDE, когда заливает скомпилированный скетч.

-P COM5 - настройка порта, в который воткнут USB шнурок от Arduin'ы. Подглядеть можно из IDE.

Дальше - скачаем '.hex' файл с прошивкой из контроллера. Для этого воспользуемся командой:
avrdude.exe -p atmega2560 -c wiring -PCOM5 -b115200 -Uflash:r:'printer_firmware'.hex:i
Если всё хорошо, ориентируемся на скриншот, прошивка сохраниться в файле 'printer_firmware.hex' рядом с avrdude.exe.
Новые атрибуты команды:

-b115200 - скорость порта для программатора.

Uflash:r:'printer_firmware'.hex:i - указание считать прошивку в файл 'printer_firmware.hex'.

Считать считали, теперь её можно бэкапить, но вот как её восстановить потом? Да тоже ничего сложного, команда не будет сильно отличаться от чтения.

avrdude.exe -p atmega2560 -c wiring -PCOM5 -b115200 -D -Uflash:w:'printer_firmware'.hex:i

Проверяем, что всё хорошо - смотрим на скриншот.

Новые атрибуты команды:

-D - запрещает автоматическую очистку памяти микроконтроллера перед прошиванием.

-Uflash:w:'printer_firmware'.hex:i - указывает на то, что нужно записать в память данные из файла 'printer_firmware.hex'.

Дальше я подключил свою Arduino Mega 2560 назад к рампам и проверил, что прошивка работает корректно. Как видите эксперимент хоть и частично, но удался. Так что и я и вы теперь знаете, как можно забэкапить прошивку из ATmega2560, что установлена на Arduino Mega2560.

Подпишитесь на автора

Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых постах.

Отписаться от уведомлений вы всегда сможете в профиле автора.

74
Комментарии к статье

Комментарии

30.04.2016 в 20:34
4

спасибо:D

ARR
30.04.2016 в 20:38
5

Да не за что. Хорошую идею подкинул, это тебе спасибо. ;)

30.04.2016 в 20:55
1

да ты монстр ( в хорошем смысле этого слова)))))))  8)

30.04.2016 в 20:57
3

Да ладно ;) Вот если бы с наскока через программатор по ISP вытащить и залить прошивку удалось бы, тогда бы был 8)

30.04.2016 в 21:38
2

Согласна, монстр. :)

30.04.2016 в 21:41
0

Ой ли? :)

30.04.2016 в 21:46
2

Прикольно, я думал нельзя из МК вытащить прошивку. Век живи, век учись :)

30.04.2016 в 21:50
2

Ну на самом деле не всегда можно. Есть ещё защита от скачивания. Тогда поможет только бэкап всей микросхемы. Я так прошивку от китайского транзистор-тестера бэкапил. 8)

30.04.2016 в 23:54
2

а смысл делать бекап не всей областити памяти программ и еепром? сохранить все, boot тоже, самый надежный вариант.

Кстати, если стоят фьюзы запрета считывания и верификации то фиг че вытащиш, только полная очистка(это я про микроконтроллеры в целом).
А есть еще ситуация когда ISP отключен, тогда только полноценным(не внутрисхемным) программатором шить.

30.04.2016 в 23:58
0

Ну на дуне, вряд ли будет защита от считывания, а так да. ;)

01.05.2016 в 18:39
1

Блин! Вот это реально полезная статья. Жаль нельзя поставить несколько плюсов. Мне несколько человек говорили, что это сделать нереально.

01.05.2016 в 21:04
2

Реально, но полезность небольшая. Вытаскивается бинарник, с которым потом ничего не сделать, кроме как прошить неизменным обратно. Лучше уж один раз разобраться с настройкой прошивки, чтобы иметь рабочий исходник.

01.05.2016 в 21:07
1

Ну вопрос был о бэкапе прошивки с неизвестными настройками ;) Так что, надеюсь, я на него смог достойно дать ответ. 8)

01.05.2016 в 21:15
1

Ну, ессно, в начале тернистого пути это может пригодится.

01.05.2016 в 20:26
0

у меня такой вопрос. если из дуни вытащить прошивку, можно ли ее потом редактировать. как увидеть на языке ардуино что куда и зачем?

01.05.2016 в 20:33
1

Нет, нельзя. Вытаскивается только скомпилированный файл прошивки. ;) Но вы можете попробовать провести дизассемблирование... Хотя, правда, не стоит ;)

01.05.2016 в 20:37
0

Мне притащили на модернизацию самопальный дозатор для майонеза. а код не дают, редиски. говорят - так вытащим. теперь ясно, что не вариант. пускай программера ловят, который изначально кодил.

01.05.2016 в 21:05
0

ИМХО, если это не коллайдер с миллионом датчиков, проще заново накодить.

01.05.2016 в 21:09
0

Ну может там программист был аккуратный? Который читал Макконнелла и пишет идеальный лаконичный код не нуждающийся в комментариях ;)

01.05.2016 в 21:16
1

Или там три с половиной команды, которые и так можно набить ;)

01.05.2016 в 21:19
0

они там с весами здорово заморочились. купили весы с  serial интерфейсом. но он оказался довольно медленным и ребята влезли в электронику и соединили ее с ардуиной по-своему. не охота в эту кухню сильно лезть. гораздо проще врубаться по готовому коду

01.05.2016 в 21:26
2

Ну, да, все зависит от длины предварительно построенных костылей.

05.05.2016 в 18:28
0


Ну, да, все зависит от длины предварительно построенных костылей.
это точно ...

05.05.2016 в 18:34
1

Craveg, Спасибо!
В Избранном.
Хорошая идея для еженедельного бэкапа при одном типе филамента.
Интересно, никому не попадалась инфа про долгоживучесть встроенной флеш-памяти (циклов стирания и записи) ???

И потом, для Ардуино Нано v.3 (самаяраспространённая 'нанка') такая-же процедура или нет?

ski
02.02.2017 в 19:38
1

Количество циклов перезаписи согласно документации Atmel - гарантированные 100 000 раз, реально - порядка нескольких миллионов раз.
Во всяком случае, о случаях полного 'износа' ардуинок науке пока неизвестно...:D

06.05.2016 в 08:40
0

Хм... А данные епрома, видимо, сохранять не нужно ? Плохо изученный вопрос, эта статья создаст только проблемы взявшим ее за руководство. Могу только посочувствовать. 
Что же касается слива прошивки через USBasp. Автор не найдет решения, никогда :) Ибо проблема в прошивке самого программатора. Ну не работает этот программатор полноценно с мегой. Решение - другой программатор ;) А это денег стоит. 
И вообще, вопрос - 'ЗАЧЕМ ЭТО НУЖНО ?'. Исходники в общем доступе...   

06.05.2016 в 12:13
3

Хм... А данные епрома, видимо, сохранять не нужно ? Плохо изученный вопрос, эта статья создаст только проблемы взявшим ее за руководство. Могу только посочувствовать.
Изучите вопрос для начала сами, а потом давайте 'советы с дивана'. Данные EEPROM'а действительно не нужно сохранять в конкретном случае.
Что же касается слива прошивки через USBasp. Автор не найдет решения, никогда Ибо проблема в прошивке самого программатора. Ну не работает этот программатор полноценно с мегой. Решение - другой программатор А это денег стоит.
Вы представьте себе, что в процессе поиска решения, я прекрасно это осознал. Но зачем загружать сложностями людей? Вы об этом подумали? ;)
И вообще, вопрос - 'ЗАЧЕМ ЭТО НУЖНО ?'. Исходники в общем доступе...
Читать тексты между строк это хорошо. Но вступление-то хоть прочитали бы внимательно. ;)

06.05.2016 в 16:41
0

В каком таком 'конкретном случае' ? В Вашем ? А в моем надо ? Все зависит от конфигурации  прошивки. Сохранение данных епрома НЕОБХОДИМО в одном случае и не не помешает в другом. Так что этот момент важен. 
Я прочитал вступление, оно не объясняет кому и зачем понадобился этот гимор. Тем более, без сохранения епрома , половина ваших 'учеников' угробит настройки своих прошивок.
Так что вылезайте из под дивана и больше не беритесь учить людей тому в чем сами не понимаете :) 

06.12.2017 в 15:55
1

Дружище, как говаривал товарищ Гамлет 'Есть многое на свете, друг Гораций, что и не снилось нашим мудрецам...'. Человек проделал работу и поделился итогами. Насколько это востребовано или нет - решать, уж извините, не вам. Статья есть и эта статья полноценная. Спасибо автору.
--------------
Вот 'буржуинские' авторы печатают свои изыскания без оглядки на мнения других и рады если ХОТЬ КТО-НИБУДЬ отклится. Именно поэтому и приходится разного рода инфу у буржуинов искать.
Ибо они уверены, что критика будет подавлена заинтересованными и вообще, не интересно - не читай.

24.05.2016 в 16:28
1

Круто, но вот сейчас столкнулись с необходимостью апгрейда прошивки всем покупателям. Заставлять людей ставить Arduino IDE - уже само по себе сложно. Самое простое - дать готовый бинарник и батник, чтобы его зашить. И здесь новая проблема: люди нынче не знают, что такое командная строка и боятся ее, как огня. Так что Level up - надо писать скипт, который перечисляет все ком-порты и ищет нужный :)

24.05.2016 в 17:07
1

Сделайте интерактивный скрипт, который говорит 'Отключите принтер от компа, нажмите Enter' - 'Подключите принтер к компу, нажмите Enter'. По-моему, простейший способ найти нужный порт.

24.05.2016 в 17:30
1

Мне кажется, проще тупо постучаться AVRDude'ом во все найденные порты и попытаться прошить ардуину, висящую на этих портах.

Правда, может быть проблема, если у кого-то висит еще одна ардуина, занимающаяся чем-то совсем иным, тогда прошьет и ее. Впрочем, если у кого-то висит ардуина, ему скрипт для зашивки, думаю, уже будет не нужен :)

24.05.2016 в 17:31
1

В принципе, логично.

24.05.2016 в 17:41
1

А можно на каждом порту дернуть DTR и посмотреть, что в ответ придет. На нужном порту же будет ответ от текущей прошивки.

24.05.2016 в 18:18
1

Кстати, мысль. Открыть порт, подсоединиться к марлину, пообщаться, убедиться, что он - это он, и уже заливать.

02.02.2017 в 19:44
1

Все проще.
Отключаем USB-кабель ардуинки от компа, заходим в перечень СОМ-портов в диспетчере устройств.
Подключаем кабель обратно и смотрим, какой СОМ-порт появился...:)

17.03.2017 в 01:14
1

Буду рад если поможете по моей проблеме советом, как вытащить прошивку... http://3dtoday.ru/questions/arduino-mega-2560sgorela-vytashchit-proshivku-realno-/?commentId=208522#208522   Спасибо))

17.03.2017 в 09:17
1

Вам, как бы, уже все приходящие мне в голову варианты уже описали в вашем вопросе.

17.03.2017 в 16:12
1

:) Но я не до конца понял. Смогу ли по ISP вытащить прошивку с дохлой платы. на ней не работает USB. Надо вытащить прошивку и залить на новую ардуину. Наставьте на путь истинный.спасибо)

17.03.2017 в 16:17
1

У меня с живой не получилось это корректно сделать. Я гуглил, но на момент написания данного материала мне найти решение не удалось. Может вам повезёт больше.

17.03.2017 в 16:21
1

вот в этом и проблема. спасибо.буду искать ....

19.06.2017 в 10:21
1

Здравствуйте. Пытался сделать всё по вашей инструкции и столкнулся с проблемой - ни в одном пакете ArduinoIDE нет путей к аврдуде как у вас в статье. Дудка лежит в некой общей папке и при вводе команд ругается на всевозможные вещи, от конфига до программатора.
Не могли бы вы дополнить пост архивом с работающей avrdude. Не сочтите ламером, дудкой пользуюсь давно, фьюзы не путаю, но в этот раз по мануалу ничего не заработало)

19.06.2017 в 10:44
1

Как же вы ей давно пользуетесь, если найти не можете? ;)
[url]http://download.savannah.gnu.org/releases/avrdude/

19.06.2017 в 11:02
1

Спасибо. Моя дудка (правда с GUI) при вводе команд отвечает 'парень, штоэта???':)
Попробую закачать чего нибудь по ссылке

14.08.2017 в 14:48
1

у меня выдает ошибку открытия конфиг файла

09.02.2018 в 09:20
1

C:Program FilesArduinohardware oolsavrin
У меня здесь лежит.

09.02.2018 в 11:00
1

Что бы не было ошибки конфиг файла, я этот файл с расширением cfg перенес из C:Program FilesArduinohardware oolsavretc
в C:Program FilesArduinohardware oolsavrin

Потом
C:Program FilesArduinohardware oolsavrin>avrdude.exe -p ATmega2560 -c wiring -P com3

Потом
C:Program FilesArduinohardware oolsavrin>avrdude.exe -p ATmega2560 -c wiring -P com3 -b115200 -Uflash:r:'printer_firmware20180209'.hex:i

И самое главное, принтер не должен быть подключен в это время к репетиерхосту, а то ком порт будет занят и ничего не выйдет.

09.03.2018 в 12:11
1

Пробовал я этот метод. Первая команда проходит успешно, а вторая...

Я в аврдюд ничего не понимаю, а во фьюзах тем более. Возможно ли считать прошивку? Плата у меня RobotDyn Mega 2560 R3 CH340.

Сам нашел ответ. Не смотря на то, что принтер подключался на скорости 250000, команда должна содержать 115200.

15.07.2018 в 21:14
1

Спасибо. Как раз тот случай. Софт в комплекте с китайским принтером отличается от залитого. Ругнулась на конфиг, но быстро все исправил и скачал.

15.12.2018 в 17:48
1

Спасибо, инфа нужна была совсем для других нужд, но это первая адекватная статья на данную тему)

18.12.2018 в 20:39
1

Всем привет! Не подскажете а с Arduino UNO как-то можно считать прошивку? У меня вылезает Timeout 6 раз и чтение слетает. 2560 читает нормально.

10.01.2019 в 09:27
1

Добавлю свои 5 копеек. 
Под Linux команды следующие.

~$ sudo avrdude -p m2560 -P /dev/ttyACM0 -b 115200 -c wiring

Ответ:

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.01s

avrdude: Device signature = 0x1e9801 (probably m2560)

avrdude: safemode: Fuses OK (E:FD, H:D8, L:FF)

avrdude done.  Thank you.

~$ sudo avrdude -p m2560 -P /dev/ttyACM0 -b 115200 -c wiring -U flash:r:'print_firmware'.hex:i

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.01s

avrdude: Device signature = 0x1e9801 (probably m2560)
avrdude: reading flash memory:

Reading | ################################################## | 100% 33.50s

avrdude: writing output file 'print_firmware.hex'

avrdude: safemode: Fuses OK (E:FD, H:D8, L:FF)

avrdude done.  Thank you.

13.01.2019 в 07:27
1

Хорошая и практически единственная статья в Интернете. Но для работы по ней нужно сделать следующее (из другой статьи):
Первое, что нужно сделать, это найти у себя avrdude. Он нашелся где-то в папке ардуины/hardware/tools/avr/bin/. Для работы нужен ещё конфигурационный файл avrdude.conf - он находится по соседству в /etc/. Я не заморачивался и просто скопировал оба файла в одну папку. Если этого не сделать, нужно будет прямо указывать где находится conf или ничего работать не будет. А в одной папке все находится автоматически.(UPD: или можно просто добавить -C ../etc/avrdude.conf в командную строку)

13.01.2019 в 16:06
0

Хорошая и практически единственная статья в Интернете
Согласен.
Причём с ростом процессорной мощности и количества этих самых процессоров(разной битности)  - на первый план выходит ИМЕННО ПРАВИЛЬНО ВЫБРАННАЯ и ОТРЕГУЛИРОВАННАЯ 'ДУДКА' !!!

Вот - для запоминалочки и в качестве иллюстрации, работа с дудкой и без неё.

Замечу, что нанесение грима и выражение морды лица - опционально... 0, 1, 2, 3, 4, ... ;-)

Не надо забывать, что в написании Марлина участвовали индусы...

Для написания комментариев, пожалуйста, авторизуйтесь.

Читайте в блогах

ROKIT‌ ‌Healthcare‌ ‌разрабатывает‌ ‌новый‌ ‌метод‌ ‌3D-биопечати‌ ‌для‌ лечения‌ ‌поражений‌ ‌кожи‌

Покупка б/у принтера PRUSA I4

Моя первая печать миниатюр

Мой первый 3d принтер

Marlin 2.0 для Anet E16

О точности печати фотополимерных принтеров