Представьте такую ситуацию. "У вас есть плата от принтера (допустим китайского), которая содержит какую-то свою прошивку. И вот настал тот день и тот час, когда вы решили, что вам нужно эту прошивку поменять, по тем или иным причинам. Но вас всё ещё держит одно "но". Вы боитесь всё испортить и хотите иметь возможность откатиться обратно. Но как назло - нормальной информации в интернете по вопросу, как забэкапить прошивку особо не нагуглишь. Примерно с такой проблемой ко мне, намедни, обратился один из участников сообщества 3dtoday. И я решил, что раз уж так, то почему бы не поведать всем о том, как же это можно сделать.
Но прежде чем писать умные мысли - всё надо проверять, чем я и занялся. Эксперименты я проводил с Arduino Mega 2560. О ней дальше я и буду писать.
Поначалу я попытался пойти привычным способом "влоб", достал программатор китайский (на заглавной фотке), подключился по ISP, и скачал прошивку. Попытался её залить назад... Льётся, но верификацию не проходит. Битых несколько часов рыл интернет, чтобы понять, как же можно нормально скачать прошивку с Меги по ISP. Толком ничего вразумительного не нашёл, но зато понял, что прошивку можно скачать и залить обратно и без программатора. Об этом опыте я и напишу ниже. А вот о том, как скачивать прошивку не с Arduino платы, да так чтобы она потом назад заливалась я напишу как-нибудь в следующий раз, когда у меня появится плата, которую можно безбоязненно пускать и в огонь и в воду.
Ладно, к делу. Для начала нам нужна утилита Avrdude, она входит в поставку Arduino IDE и в моей версии лежала в папке "%appdata%\Arduino15\packages\arduino\tools\avrdude\6.0.1-arduino2\bin". Открываем папку, жмём на пустом месте 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.