Можно ли из hex файла восстановить исходный скетч

Обновлено: 07.07.2024

Копируем содержимое одного микроконтроллера AVR в память другого микроконтроллера Копируем содержимое одного микроконтроллера AVR в память другого микроконтроллера

Подобная задача может возникнуть, если у нас нет исходного скетча, который загружен в микроконтроллер. Более того, кроме копирования скетча, который хранится во F lash памяти мы скопируем еще и данные, хранящиеся в EEPROM памяти микроконтроллера.

Возьмем 2 одинаковых микроконтроллера ATtiny13 . Один я отмечу красной изолентой, другой синей . Красный – это тот, с которого буду копировать, а синий тот, на который буду копировать.

Копируем содержимое одного микроконтроллера AVR в память другого микроконтроллера

Второй ( синий) микроконтроллер пуст, вернее в него загружен скетч BareMinimum ( Файл – Примеры – Basic - BareMinimum ).

Копирование памяти микроконтроллера в HEX файл

Начнем с красного микроконтроллера. Вначале, запишем в его энергонезависимую память EEPROM значение, которое мы в дальнейшем тоже перекопируем на другой микроконтроллер. Подробно о том, что такое E EPROM память и как с ней работать я рассказывал в статье " Работа с внутренней и внешней EEPROM на микроконтроллерах семейства ATtiny ".

Из примеров для ATtiny13 возьмем скетч eeprom _put и используем только одну строку, которая запишет в нулевой байт EEPROM памяти число 5. Это то количество миганий светодиода, которое будет осуществлять микроконтроллер после подачи на него питания. Потом он сделает паузу в 5 секунд и снова мигнет 5 раз.

Копируем содержимое одного микроконтроллера AVR в память другого микроконтроллера

Т.е. сколько раз мигать светодиоду будет записано в EEPROM памяти. Соответственно, если информация в памяти будет отсутствовать, вернее будет записан 0, светодиод ни мигнет, ни разу. А будет просто гореть. Таким образом, скопировав только флэш-память, мы не получим полного функционала. Нам понадобится скопировать и EEPROM память.

После того, как осуществили запись в EEPROM память, запишем в память того же красного микроконтроллера скетч, который будет считывать данные из EEPROM памяти и мигать светодиодом, подключенным к 5 пину (PB0) .

Копируем содержимое одного микроконтроллера AVR в память другого микроконтроллера

Загружаем скетч в ATtiny13. Можно не вынимая из программатора установить светодиод (с припаянным резистором на 220 Ом). И видим, что он мигает 5 раз.

Копируем содержимое одного микроконтроллера AVR в память другого микроконтроллера

Перейдем к решению задачи, как сделать полную копию записанной информации в памяти красного микроконтроллера и записать ее в память синего. Для этого я использую самописную утилиту, которая работает со стандартной программой для прошивки микроконтроллеров AVR avrdude. exe . Я уже использовал похожую утилиту для изменения фьюзов микроконтроллера - " Что такое фьюзы? Как работать с фьюзами на микроконтроллерах AVR ".

Данная утилита представляет из себя обычный bat файл, который упрощает работу с файлом avrdude.exe . Эти же команды, можно вводить в командную строку, результат будет такой же.

Копируем содержимое одного микроконтроллера AVR в память другого микроконтроллера

Как и в случае с изменение фьюзов, вначале выбираем микроконтроллер. У нас это ATtiny13. В дальнейшем в этот список я буду добавлять другие популярные микроконтроллеры. Далее выбираем COM порт, к которому у нас подключен программатор. В данном случае это COM3. И выбираем, что мы хотим сделать с подключенным микроконтроллером: прочитать данные F lash памяти, прочитать данные EEPROM памяти, прочитать всю память. Либо записать данные в микроконтроллер.

Копируем содержимое одного микроконтроллера AVR в память другого микроконтроллера

Т.к. прежде, чем загрузить данные во второй микроконтроллер, нам нужно прочитать их из памяти первого и нам нужна информация и из флэш-памяти, где хранится наш скетч и из EEPROM памяти, где хранится настройка режима работы скетча, то выбираем пункт 3 .

В папке с программой создается 2 фала с расширением hex . Где в 16-ричном представлении хранится информация, записанная во F lash и EEPROM память. Файлы всегда имеют одинаковые имена и при следующем запуске опции чтения памяти они будут перезаписаны.

Копируем содержимое одного микроконтроллера AVR в память другого микроконтроллера

Можно открыть их через текстовый редактор, перейти в шестнадцатиричный режим просмотра и посмотреть, что из себя представляют файлы внутри. В файле eeprom.hex можно увидеть ту самою нашу записанную 5-ку.

Копируем содержимое одного микроконтроллера AVR в память другого микроконтроллера

Прошивка микроконтроллера HEX файлом

Теперь заменяем микроконтроллер, на тот, куда будем копировать информацию, т.е. отмеченный синей изолентой. Светодиод можем оставить. Нажимаем 1 , чтобы вернуться к меню выбора действий. И выбираем 6, чтобы записать данные из hex файлов в память второго синего микроконтроллера.

Копируем содержимое одного микроконтроллера AVR в память другого микроконтроллера

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

Кстати, этот же способ, можно использовать, если Вы где-то достали hex файл с прошивкой и вам нужно загрузить его в микроконтроллер.

Подтверждаем свой выбор. Происходит загрузка информации в микроконтроллер.

Копируем содержимое одного микроконтроллера AVR в память другого микроконтроллера

И видим, что светодиод мигает 5 раз подряд. Значит, мы успешно скопировали все данные с одного микроконтроллера на другой. Можно вставить еще один ATtiny13 и загрузить данные и в него. И так можем ставить производство на поток. Ниже можно посмотреть видео по материалам статьи.

Видео по материалам статьи:

Спасибо, что дочитали до конца! Если статья понравилась, нажмите, пожалуйста, соответствующую кнопку. Если интересна тематика электроники и различных электронных самоделок, подписывайтесь на канал. До встречи в новых статьях!

boot.hex и app.hex
Здравствуй, форум! Такой вопрос: при объединении файлов app.hex и boot.hex должна быть у них.

Конвертирование HEX to Float
Подскажите как конвертировать HEX в Float и наоборот Float в HEX

Конвертирование String в HEX теряется нулевой байт
Всем привет. :) Задача вроде простая но столкнулся с одной непоняткой. читаю MIB в стринг и.

Никак. Только лапками, предварительно выудив алгоритм.

Дизассемблировать дизассемблером и потом минимум недельку редактировать и причесывать результат дизассемблирования чтобы он выглядел написанным человеком. Получится что-то на ассемблере. Но это ручная работа в которой готовая программа дизассемблер используется только на первом этапе.

Добавлено через 9 минут
Я обычно делаю так. Добиваюсь чтобы результат дизассемблирования компилировался в исходный HEX байт в байт. Потом редактирую исходник и после каждой правки проверяю батником что он все еще компилируется байт в байт.
Редактируя отделяю код от данных, втыкаюсь в смысл кода, делаю говорящими метки, расписываю осмысленным образом данные и расставляю комментирии. После того как исходник на ассемблере стал приличен, глядя на него, записываю по смыслу тоже самое на си, если надо расписать на си. Но сделать чтобы исходник на си компилировался байт в байт я даже не пытаюсь. Это уже был бы геморрой какой-то добиваться такого, начиная с необходимости угадать с компилятором. На этом обратная инженерия hex-а заканчивается.

можно ли как то конвертировать этот файл в файл типа(например c) чтобы можно было читать код?? В общем-то можно. Есть интерактивный дизассемблер IDA Pro Ильфака Гильфанова, есть примочка к нему Hex Rays. Но вот получить сей инструмент не так просто. Результат работы Hex Rays сильно порнографичный. Даже в описании он назван "Си-подобный псевдокод". Но посмотреть что там в скомпилированном коде к чему для того кто не владеет ассемблером полезен. Я из Интернета даже скачивал какой-то взломанный вариант IDA с этим Hex-Rays, но вот беда в том варианте не было поддержки машинного кода AVR-ов.

Конвертирование HEX array в BYTE array
Собственно сабж. Накопипастил. И слепил это. Скажите а можно лаконичнее? //Художественный.

ASCII to HEX, HEX to Binary/Assembly 8086
Люди добрые, есть проблема, надо написать программу которая получает с клавиатуры какие-нибудь.

Как преобразовать hex в ascii (HEX редактор)
Написал: String ^in; openFileDialog1->Filter = "hex Files|*.hex"; openFileDialog1->Title =.

Я хочу сделать сам себе mp3 плеер (EchoMP3), но у меня возникла проблема: программа написанная для контроллера есть только в формате HEX, а так хочется посмотреть как реализовано взаимодействие программы и железа. Первоначально программа написана на Си компилятор CCS compiler , программа предназначена для контролера PIC18LF452 PLCC44 .
Сам я пробовал получить исходники, но у меня мало что получилось максимум чего удалось достичь это получить кривые коды ASM с помощью программы PicDis18.
Исходники HEX в архиве

Пожалуйста помогите получить исходники на Си или хотябы на ASM (с которыми можно работать в MPLA v8.0 ).

Архив: здесь! , Простите не смог залить файлы на прямую.

Если очень хочеться , как мне например то можно общими усилиями попробовать.Конечно полностью восстановить не удасться один в один .
В принципе работу с vs и с дисплеем выдрать не сложно,
одно смущает там работа с флешкой а это уже fat16 или еще хуже fat32 , хотя примеры всего этого есть на форуме компилятора.
Я беглым взглядом уже выделил иницилизацию .
В ИДУ грузить бесполезно .

А это похоже бутлоадер.

Снова LCD , может уже комманды?

И так ищи блоки кода так сказать работающие автономно
то есть без переходов из блока и без прыжков внутрь блока , заканчивающихся на RETURN . Это будут " низкоуровневый процедуры" по тому к чему они обращаються легко понять их смысл.
Надо будет удалить все ACCES ,BANKED что мплаб навтыкал.

По ссылкам на эти процедуры вылавливать процедуры более выокого уровня и т.д и т.п.

Еще надо сразу отделить(выделить бутлоадер , чтоб не мешался)
Определить иницилизацию и главный цикл .
Также легко выцепить прерывания.
Еще не забывай что здесь не все код , используеться LCD значит есть не хилый знакогенератор
и весит он смотря какой фонт и сколько букв и цифр используеться , вероятно но не факт есть картинка.

З.Ы. Вспомнил как раньше спектрумовские игрушки
ковырял.

Все и дисплей и флешка и vs используют SPI.
Vs аппаратный , остальные програмный.

Как загрузить Hex-файл в Arduino IDE, что это такое и как с ним работать - говорим сегодня в новой информационной статье. Тема выбрана не случайно, многие пользователи интересуются программным обеспечением на более «продвинутом2 уровне. При этом конечно же не всем хочется бегать за помощью к специалистам, листать многочисленные форумы и т.д. но выход есть – наша инструкция.

Прежде чем начать обсуждение по сути, небольшое отступление с пояснениями, что такое Hex-прошивка. Рассказываем: речь идет о скомпилированном файле, который загружается в плату Ардуино, но не является исходным кодом, как скетч. Иными словами, это простой способ распространения программ для изучаемой нами среды. Такие файлы часто имеют расширение *.hex – отсюда и название. Они просты в использовании, не требуют скачивания дополнительных библиотек, легко переносятся на другие девайсы.

Важный момент! В этой прошивке отсутствует возможность получения читаемого исходного кода для внесения пользователями коррекций.


  • Для начала откройте нужный вам скетч в среде разработки IDE.
  • Выберите в меню "Скетч" команду "Экспорт бинарного файла".

  • Дождитесь окончания компиляции - в папке со скетчами появятся 2 или больше hex-файла:
  1. Создаем папку под названием avrdude.
  2. Копируем в нее следующие файлы: avrdude.exe и libusb0.dll из C:\Program Files (x86)\Arduino\hardware\tools\avr\bin и avrdude.conf из C:\Program Files (x86)\Arduino\hardware\tools\avr\etc
  3. Запускаем консоль cmd, переходим в папку с файлами, вводим:

Скорость выбираете согласно типу плат (Уно, Нано – можно 115200, для других, особенно китайских моделей – 57600, тут нужно экспериментировать).

Среди других приложений, которые советуют использовать, можем назвать: GC-Uploader (автоматическая заливка ПО), SinaProg (более профессиональный софт) и XLoader. Выбирайте оптимальный для себя вариант!

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