Как декомпилировать hex файл в arduino ide

Обновлено: 04.07.2024

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

Asoros

Задался я когда то давно этим вопросом, но однозначного ответа тогда не услышал, но через года задал мне этот вопрос коллега и я посыпался. Ответьте мне господа, возможно дамы. Можно ли извлечь скетч с ардуинки так как он был написан? Если да, то как?

Эдуард Анисимов

USBAsp - для считывания.
Дальше разбираться с Ассемблерным кодом или пройтись декомпилятором.
Но такой же смотрибельный, как изначально задумал автор, код не получить.

Arhat109

Ну .. ардуинка .. по ней ищется автор .. к нему в гости с паяльником .. и ву-а-ля, исходный скетч с комментами и даже несколько версий.

Эдуард Анисимов

Ну .. ардуинка .. по ней ищется автор .. к нему в гости с паяльником .. и ву-а-ля, исходный скетч с комментами и даже несколько версий.

stepko

Задался я когда то давно этим вопросом, но однозначного ответа тогда не услышал, но через года задал мне этот вопрос коллега и я посыпался. Ответьте мне господа, возможно дамы. Можно ли извлечь скетч с ардуинки так как он был написан? Если да, то как?

В загрузчике стоит защита от прочтение флеша, значит не сможешь так просто извлечь скетч из ардуинки

серёга73

Загрузчик легко считывается вместе с памятью контролера.
А скетча там нет.

Эдуард Анисимов

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

Загрузчик легко считывается вместе с памятью контролера

PiratFox

@серёга73, если установлен фьюз защиты - тогда вообще ничего не считать.

серёга73

Интересно , а из ардуино иде компилятора как это сделать?

PiratFox

@серёга73, а никак. Ардуино иде без загрузчика в самой ардуине вообще ничего в неё писать не будет.

серёга73

Я на это и намекаю.
Тут нужен программатор, чтобы фьюзы ковырять.

ПС.
Тема старая , но просто заканчивается неверным изречением.

PiratFox

Ну да. Я вот только не помню про загрузчик, есть ли уже в нём защита чтения. Я с Ардуино иде не работаю, предпочитаю Atmel Studio.

Некоторые проекты для Arduino распространяются не в виде файлов скетчей (*.ino), а в виде hex-файлов (*.hex). Я расскажу, как прошить такой файл в Arduino.

Получение hex-файла

Arduino Экспорт бинарного файла

Как получить hex-файл для своего проекта или скачанного скетча? Для получения hex-файла, соответствующего требуемому скетчу, необходимо открыть этот скетч (например, bike.ino) в Arduino IDE (я использую версию 1.6.6) и выбрать в меню Скетч (Sketch) команду Экспорт бинарного файла (Export Compiled Binary):

Arduino hex-файлы

После этого происходит компиляция и в папке скетча появляются два hex-файла (для скетча bike.ino - bike.ino.eightanaloginputs.hex и bike.ino.with_bootloader.eightanaloginputs.hex):

Hex-файл имеет текстовый формат и состоит из строк вида
:100020000C94DF030C94DF030C94DF030C94DF03C8

Arduino загрузчик

Отличие этих двух файлов заключается в наличии в файле *.ino.with_bootloader.eightanaloginputs.hex загрузчика Arduino:

Прошивка hex-файла

Arduino номер порта

Как же прошить имеющийся hex-файл? Сначала необходимо подключить прошиваемую плату (я использую Arduino Nano 3.0) к USB-порту компьютера и узнать COM-порт подключения. Номер порта можно посмотреть в Arduino IDE в меню Инструменты (Tools):

Для прошивки hex-файла *.ino.eightanaloginputs.hex (для рассматриваемого скетча - bike.ino.eightanaloginputs.hex) в микроконтроллер платы Arduino используется программа AVRDude - AVR Downloader-Uploader, предназначенная для прошивки микроконтроллеров AVR.

Arduino прошивка avrdude

В результате в папке avrdude содержатся три файла:

В эту же папку следует скопировать прошиваемый hex-файл (в рассматриваемом примере - файл bike.ino.eightanaloginputs.hex).

avrdude версия

В Arduino IDE версии 1.6.6 представлена программа avrdude версии 6.0.1

avrdude команда

Затем в консоли требуется ввести команду:

-v : вывод подробной информации
-patmega328p : указание типа микроконтроллера
-c arduino : указание программатора - программатор, используемый Arduino IDE
-P com11 : указание номера COM-порта (COM11)
-b 57600 : указание скорости COM-порта (57600 бод)
-D : не выполнять очистку FLASH-памяти микроконтроллера.
-U flash:w:"bike.ino.eightanaloginputs.hex":i : w - запись flash - во FLASH-память i - файла в формате Intel Hex

Arduino hex-файлы

После ввода команды выполняется прошивка hex-файла в Arduino:

Готово!

Сегодня вы узнаете как загрузить hex файл в ардуино. Это первая часть из серии уроков про hex формат. Я расскажу и покажу как сделать hex файл arduino используя arduino ide. Написав исходный код очень просто выполнить прошивку hex файла. Вы узнаете все плюсы и минусы использования HEX файла. Если вы не хотите или вам некогда заниматься программированием, то hex code это для вас. Во второй части я расскажу как прошивать HEX файл в ардуино используя различные внешние программы. Вы узнаете чем открыть hex файл прошивки.

Мне в последнее время всё чаще стали задавать вопросы, как можно проще загружать скетч в Ардуину. Я понимаю, что не все хотят вникать в азы программирования. Многим надо просто быстро сделать проект. У них нет интереса в установки Ардуино IDE, поиск различных библиотек, настройке и установке параметров. Хочется просто подключил Ардуину, нажал кнопку и всё готово. Вот для них я и буду теперь вместе со скетчем выкладывать ещё и HEX файл. Этот файл надо будет просто загрузить в Ардуино и всё. Больше не надо разбираться в коде, искать и устанавливать библиотеки, думать правильно я сделал или нет. Это очень удобно и быстро. Но всё же собирать схему придётся самому. Этого за вас никто не сделает.
Когда вы пишите свой код или как он по-другому называется - Скетч. То на выходе вы получаете исходный код. А когда прошиваете Ардуино, ваш исходный код компилируется в бинарный код, такой код Ардуине проще понять. И обычно он имеет расширение HEX.

  • Преимущество HEX файла – это простота ее использования:
  • Не нужны никакие библиотеки,
  • Легко загрузить в плату,
  • Можно перенести с одного устройства на другое.

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

Так же HEX файл нужен для работы с внешними программами, например с Протеусом. А ещё в последнее время, в интернете, всё чаще стали попадаться не исходники кода, а уже скомпилированный HEX файл. Для этого есть несколько причин.
Одна из них, разработчик не хочет делиться исходным кодом и для доработки приходиться с ним связываться, и скорее всего платить деньги.
Второй причина – это если проект очень сложный и для его настройки требуется много действий, то проще настроить всё самому, а потом выложить HEX файл. Что бы потом в комментариях не возникало много вопросов. От простых, где взять библиотеку, до «А у меня ничего не работает». Загрузив HEX файл вы можете быть уверены, что код рабочий, а если у вас «ничего не работает» , то значит вы что-то не так собрали. И разбираться нужно именно в этом.
Короче, что такое HEX и для чего он нужен мы разобрались. Теперь давайте научимся получать его из своего кода.
Получение HEX файла.
Давайте запустим Ардуино IDE и какой-нибудь из примеров. Все наверняка догадались что это будет пример BLINK.
Теперь проверим, подключена ли у нас плата Ардуино и к какому порту она подсоединена.
Хотя скажу по секрету, это нам не особо нужно. Получить HEX файл можно вообще не имея Ардуины в наличии.
Заходим в меню Файл и выбираем пункт Настройки.
Устанавливаем галочку в строке Показать подробный вывод, в чекбоксе Компиляция. И всё.
Теперь можно прошить Ардуину, а можно нажать на кнопку Проверить.
Начнётся компиляция вашего кода. Это можно увидеть по обилию текста снизу экрана.
После окончания нужно найти строчку кода с расширением HEX. Это адрес временной папки где будет сохранён HEX файл. Он там будет находиться до тех пор пока вы не закроете Arduino IDE .
Теперь давайте откроем этот файл и посмотрим как он выглядит. Я буду использовать TOTAL Commander, а вы, тут программу, что вам удобна.
У меня он открылся в NOTEPAD++.
Мы видим 60 строчек кода, который совсем не похож на тот что вы написали. Вот с этим кодом и работает Ардуина.
Теперь давайте сравним ваш исходный код и то что получилось после компиляции.
Согласитесь, Небо и Земля.

А теперь давайте перейдём в папку где хранится наш HEX файл.
Переходим по адресу который у нас в командной строке. И видим, что там целая папка с разными файлами. Мы некоторые из них рассмотрим чуть позже. Находим наш HEX файл. Для особо внимательных, там 2 HEX файла. С бутлоадером и без него.

Теперь давайте возьмём другой файл, посложнее. Там и кода побольше и чтобы была применена библиотека. Кстати эта библиотека не входит в стандартную установку Ардуино IDE. И для работы с этим скетчем, вам бы пришлось самому устанавливать эту библиотеку. Или просто загрузить её и весь скетч через HEX файл.
Делаем всё тоже самое что и раньше.
Нажимаем кнопку Проверить. Ждём окончания компиляции и переходим по адресу HEX файла.
Находим и открываем папку.

Заходим в папку Библиотека и видим там библиотеку Нео пиксель.
В папке скетч находится исходный код нашего скетча. Для сравнения посмотрим код в Arduino IDE.
Переходим к функции loop и сравниваем. Всё одинаковое.
Дальше я буду сравнивать в Visual Studio Code.
Помните я говорил, что в папке лежат 2 HEX файла. Вот их и сравним.
Один из них с загрузчиком, а второй без него.
Видим что в начале идут полностью одинаковые строчки кода. Например сравним 50 строчку.
Теперь прокручиваем файл без загрузчика до конца.
Видим, что на 117 строчке код закончился. Теперь прокручиваем файл с загрузчиком. До 117 строки.
А всё что дальше это и есть код загрузчика. Кстати загрузчик занимает столько же места, как и код программы с библиотекой.

Вот мы и научились получать HEX файл из своего исходного кода.
Следующий шаг это загрузка HEX файла в Ардуино.

Давайте немного отвлечемся от создания нашего робота и поговорим о том, как мы будем записывать прошивку в Arduino.

Во всех вышеописанных платах используется микроконтроллер ATmega328 (в более старых версиях ATmega168).

Одной из главных причин выбора платы Arduino для проекта робота была возможность записывать прошивку устройства в МК не применяя программатора и каких либо дополнительных устройств. Все что нужно для прошивки микроконтроллера Arduino – это стандартный USB шнур (который входит в комплект Arduino).


Это значит, если Вы имеете Ардуину – Вы имеете любое устройство ZiChip!

Запись программы в МК через USB происходит через специальный загрузчик (Bootloader), который записан в МК при изготовлении платы. Вообще, загрузчик предназначен для работы со своим специальным программным обеспечением Arduino IDE, но в случае, когда необходимо прошить в Ардуину что-то постороннее (свой Hex-файл), есть программки позволяющее это реализовать.

Начнем, конечно, с моей программы загрузчика
GC-Uploader



Это все! Ничего сложного. Прошивка через несколько секунд будет записана в МК и автоматически запустится. Один минус – программа никак не сообщает о том, что прошивка уже записана, но это можно увидеть по прекращению мерцания светодиодов RXD и TXD на Ардуине.

XLoader использует для записи прошивки AVR Dude и в качестве протокола программирования используется STK500. Но, похоже, в настройках AVR Dude, произведена коррекция, так как использование стандартного AVR Dude с такими же настройками не дает результатов.

Автоматизация XLoader.


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

Автоматизация ARP Uploader.
ARP Uploader как и XLoader работает через AVR Dude, но, в отличие от XLoader, показывает командную строку. Это дает возможность использовать AVR Dude напрямую в Make или Bat файле.

Дополнительные материалы.
Драйвера Arduino.

Считаю не лишним напомнить, что для связи Arduino с компьютером в последнем должны присутствовать драйвера. Оставляю здесь архив с драйверами для Arduino (включая и старые драйвера в Old_Arduino_Drivers.zip и драйвера для FTDI-чипа в папке «FTDI USB Drivers»

Стали появляться недорогие китайские Ардуины с драйвером CH340G
Driver-CH340G.zip (9833 Загрузки)

Загрузчики Arduino

Если Вы решите собрать свою плату Arduino (а сложного там ничего нет, фактически, это голый ATmega328 или ATmega168), Вам понадобится загрузчик Bootloader который должен содержать МК для работы со средой (или программками для заливки Hex-файлов). Конечно, Вам для записи Hex-файлов в чистый МК понадобится программатор и придется выставить фьюзы.

ATmegaBOOT_168_atmega328.zip (12403 Загрузки)
Для правильной работы нужно установить фьюзы следующим образом Low: FF High: DA Ext: 05

Схемы Arduino

Фьюзы установленные по умолчанию в Arduino (только с ATmega328)
Arduino Uno
Low Fuse 0xFF
High Fuse 0xDE
Extended Fuse 0x05

Arduino Duemilanove or Nano w/ ATmega328
Low Fuse 0xFF
High Fuse 0xDA
Extended Fuse 0x05

Arduino BT w/ ATmega328
Low Fuse 0xFF
High Fuse 0xD8
Extended Fuse 0x05

LilyPad Arduino w/ ATmega328
Low Fuse 0xFF
High Fuse 0xDA
Extended Fuse 0x05

Arduino Pro or Pro Mini (5V, 16 MHz) w/ ATmega328
Low Fuse 0xFF
High Fuse 0xDA
Extended Fuse 0x05

Читайте также: