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

CraVeg
Идет загрузка
Загрузка
30.04.2016
53565
54
Техничка

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

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

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

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, ... ;-)

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

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

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

3 д печать основы моделирования в Fusion360

Про использование защелок при 3D моделировании

Как я BL Touch воскресил.

REFR на Photon Mono

Забор для полки на кухню.

Мысли клиента. Hercules G2 два месяца спустя.