Как создать hex файл для прошивки
Перейти к содержимому

Как создать hex файл для прошивки

  • автор:

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

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

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

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

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

Arduino hex-файлы

После этого происходит компиляция и в папке скетча появляются два hex-файла (для скетча bike.inobike.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.

Для упрощения процедуры прошивки можно создать папку avrdude. Затем в эту папку следует скопировать файлы avrdude из папок Arduino IDE:
avrdude.exe и libusb0.dll (библиотека из проекта libusb-win32 https://github.com/libusb/libusb) — из папки \Arduino\hardware\tools\avr\bin\
Arduino avrdude
avrdude.conf (конфигурационный файл) — из папки \Arduino\hardware\tools\avr\etc\
Arduino avrdude

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:

Готово!

  • Войдите, чтобы оставлять комментарии

Arduino и Hex-файлы

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

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

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

Как же получить hex-файл для создания собственного проекта либо скетча?

  • Для начала откройте нужный вам скетч в среде разработки IDE.
  • Выберите в меню «Скетч» команду «Экспорт бинарного файла».
  • Дождитесь окончания компиляции — в папке со скетчами появятся 2 или больше hex-файла:

Поговорим о том, как прошить Hex-файлы в Arduino IDE. Процедура не сложная — подключаем плату (Uno, Nano, Pro Mini) к USB-порту ПК. Нам необходимо узнать номер порта. Запускаем IDE, открываем меню Инструменты – узнаем COM. В дальнейшем мы его применим.

  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, переходим в папку с файлами, вводим:
avrdude -v -patmega328p -c arduino -P com10 -b 57600 -D -U flash:w:"girlanda.hex":i

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

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

Как загрузить HEX прошивку Ардуино

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

Здесь описана процедура загрузки прошивки микроконтроллера платы Arduino.

Данная инструкция позволит вам установить прошивку на наиболее популярные платы такие как Nano, UNO, Leonardo, Mini, Pro Micro и другие, собранные на микроконтроллере atmega328p, atmega168, atmega32u4 и других.

Для прошивки других типов плат обратитесь за помощью (http://jarduino.ru/support).

О прошивках Arduino

Не стоит путать прошивку со скетчем!

Скетч – это исходный код прошивки.

Прошивка ардуино – это скомпилированный (бинарный) файл, загружаемый в плату Arduino (в микроконтроллер). Прошивка не является исходным кодом программы (скетча). Файл прошивки обычно имеет расширение HEX.

Преимущество прошивки – это простота ее использования:

  • Не нужны никакие библиотеки,
  • Легко загрузить и выгрузить,
  • Можно перенести с одного устройства на другое.

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

Вместе с прошивкой часто может поставляться и копия памяти ПЗУ (EEPROM), в которой хранятся данные, необходимые для работы устройства.

Способы прошивки Arduino

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

Рассмотрим пару наиболее популярных программ прошивки.

XLoader

Самая простая и лаконичная программа, которая подойдет любому, кому просто надо загрузить hex на популярную Arduino.

Загрузка прошивки интуитивно понятна:

  • Выбираем…
    • файл прошивки
    • плату ардуино
    • COM-порт
    • Скорость передачи данных

    Последняя версия – 1.0.

    Не может загружать EEPROM.

    SinaProg

    SinaProg – это уже более профессиональная и универсальная программа, разработанная неизвестными иранскими программистами. Однако сразу надо сказать, что данная программа – не более чем графическая оболочка для утилиты AVRDude, о которой пойдет речь дальше.

    1. Выбираем файл прошивки
    2. Настраиваем программатор: выбираем…
    3. Arduino,
    4. Порт
    5. Скорость передачи

    Последняя версия – 2.1.1

    Avrdude

    Большинство всех загрузчиков используют одну и ту же утилиту – AVRDude (AVR Downloader-Uploader), которая давно вошла во многие среды разработки для ардуино, в т.м. числе и в Arduino IDE.

    Это мощнейшая утилита для работы с чипами AVR, но все-таки это утилита командной строки, что многим неудобно.

    Читайте в следующем параграфе как прошить ардуино и с его помощью.

    Последняя версия – 6.3.

    Arduino IDE, AVRDude

    Рассмотрим как загрузить прошивку, имея только Arduino IDE на компьютере с Windows.

    Напомню, что вместе с Arduino IDE ставится и AVRDude, с помощью которого мы и загрузим прошивку.

    Установка программного обеспечения

    • Установить программу Arduino IDE, если она не установлена
      • В ряде случаев потребуется установить дополнительный драйвер вашей платы (если плата – китайский клон). Драйвер нужен только в случае если вы не видите вашу плату в Arduino IDE.

      Подготовка

      • Подключить плату к компьютеру
      • Запустить Arduino IDE
      • Определить к какому порту подключена Arduino, через меню, как показано ниже:
      • Определите в какой папке установлена Arduino IDE

      Обычно – “C:Program Files (x86)Arduino”

      Загрузка прошивки ардуино

      • Открываете командную строку и вводите следующую команду, предварительно скорректировав ее под свои условия:

      “ C:Program Files (x86)Arduino hardwaretoolsavr/bin/avrdude” -“ C:Program Files (x86)Arduino hardwaretoolsavr/etc/avrdude.conf” -v -patmega328p -carduino -PCOM 3 -b 115200 -D -Uflash:w: Firware .hex:i

      Обратите внимание на:

      • Путь к Arduino IDE ( желтым ),
      • Номер порта ( голубым ),
      • Скорость передачи данных ( зеленым )
      • Название (путь) файла прошивки ( фиолетовым )

      Если при выполнении команды вы увидите ошибку как ниже

      avrdude: stk500_recv(): programmer is not responding avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0xd2

      , значит ваша плата не может работать со скоростью 115200, и необходимо установить скорость 57600.

      Нажмите CTRL+C, чтобы прервать процесс.

      Получение помощи

      Если у вас что-то не получилось, и вы являетесь нашим клиентом, обратитесь на страницу поддержки.

      Часто задаваемые вопросы о прошивке

      Какой COM-порт выбирать?

      Такой вопрос возникает обычно, когда программа не может автоматически выбрать COM-порт, к которому подключена Arduino.

      Прежде всего, чтобы ардуино определялась, необходимо, чтобы на компьютере были установлены ее драйвера. Они ставятся вместе с Arduino IDE. Для китайских удешевлённых колонов может понадобится поставить драйвер CH340.

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

      Порт можно посмотреть в Arduino IDE…

      … или, если вы на Windows, в диспетчере устройств:

      Однозначно, это не COM1. Поэтому, в моем случае это будет COM3.

      Какую скорость выбрать?

      Скорость передачи зависит от версии платы. Если мы говорим о популярных Nano или UNO, то скорость будет 115200. Однако, если вы имеете дело с китайский клоном, то, возможно, придется выбрать 57600.

      В общем, рецепт прост: если не получается с одной скоростью, тут же пробуете другую.

      7 Replies to “Как загрузить HEX прошивку Ардуино”

      1. Serg62 20.03.2020 at 16:59 Чем регулируется частота и амплитуда , Какой кабель нужен для прошивки Arduino nano ?
      • jarduino Post author 20.03.2020 at 18:43 Она вводится через последовательный порт, аналогично тому как загружается прошивка.
        Кабель нужен mini-USB data

      ESP_HexFlasher — приложение для прошивки ESP8266

      ESP_HexFlasher это приложение позволяющие прошивать в ESP8266 прошивки в формате Intel hex. Такая прошивка состоит из одного файла с расширением hex, содержащего в себе все данные. Это намного удобнее чем в случае нескольких bin файлов, которые можно по ошибке прошить не по тем адресам что следует или некоторые из них забыть прошить. Обычно такая путаница возникает у начинающих. Формат hex свободен от этих недостатков.
      Для примера AT прошивка и Blink в виде HEX файлов в архиве HEX.zip. Собраны в этой IDE.
      Скриншоты приложения ESP_HexFlasher

      Спойлер: Скриншоты

      Спойлер: Анимационная картинка показывающая процесс прошивки программой ESP_HexFlasher.

      Окошко «Очистить память» предназначено для записи данных по умолчанию в системные области флеш-памяти.
      Это может понадобится если ESP8266 не работает, а в UART отправляет что-то похожее на это.

      ets Jan 8 2013,rst cause:2, boot mode:(3,6) load 0x40100000, len 30372, room 16 tail 4 chksum 0x05 load 0x3ffe8000, len 2008, room 4 tail 4 chksum 0x62 load 0x3ffe87e0, len 580, room 4 tail 0 chksum 0xa3 csum 0xa3 OS SDK ver: 2.0.0(e271380) compiled @ Mar 30 2018 18:54:06 rf_cal[0] !=0x05,is 0xFF
      Вложения

      648.7 KB Просмотры: 16
      113.4 KB Просмотры: 14
      87.9 KB Просмотры: 20
      102 KB Просмотры: 9
      67.9 KB Просмотры: 9
      99.3 KB Просмотры: 7
      109.8 KB Просмотры: 6

      tretyakov_sa
      Moderator

      Команда форума

      Как перевести bin в hex. Стоит в программу добавить такую возможность. Так же оставить возможность шить из bin формата. Ну и читать в bin из esp тоже бы не помешало.

      espprog
      New member

      Из bin в hex автоматически перевести не получится, как это можно сделать переводя с hex в bin (кнопка Экспорт). В bin файлах не хранятся адреса и нет информации о начальном адресе (entry point).
      Hex файл можно создать из elf (иногда у него расширение out).

      objcopy.exe -O ihex file.elf file.hex

      objcopy.exe входит в состав GCC для ESP.

      Ну и читать в bin из esp тоже бы не помешало.
      Стандартный загрузчик ESP8266 не поддерживает чтение.

      tretyakov_sa
      Moderator

      Команда форума

      Из bin в hex автоматически перевести не получится, как это можно сделать переводя с hex в bin (кнопка Экспорт). В bin файлах не хранятся адреса и нет информации о начальном адресе (entry point).

      Так и сделайте дополнительную вкладку с выбором файлов и установкой адресов. После этого либо загрузить в esp либо сохранить в hex. Так сказать вкладка эксперта

      fps
      Active member

      На скриноштах 1 и 2 в логе прошивка успешно «завешивается»

      Скорость порта измеряется не в ‘бод’ а в ‘бит/с’

      tretyakov_sa
      Moderator

      Команда форума
      Стандартный загрузчик ESP8266 не поддерживает чтение.

      Вложения

      97.4 KB Просмотры: 18

      espprog
      New member

      Скорость порта измеряется не в ‘бод’ а в ‘бит/с’

      tretyakov_sa, esptool заливает в ОЗУ ESP8266 программный загрузчик https://github.com/espressif/esptool/wiki/Serial-Protocol
      Посмотрите список доступных команд в таблице Supported by software loader and ROM loaders
      Команда READ_FLASH есть только в software loader.

      На скриноштах 1 и 2 в логе прошивка успешно «завешивается»
      Точно.
      Чуть позже исправлю ошибку и пересоберу под все платформы.

      espprog
      New member

      Исправил ошибку.
      Спойлер: Скриншоты

      Winows.png

      Windows

      Linux.png

      Linux

      Mac OS X.png

      MacOS X

      Спойлер: Анимация

      Anim.gif

      Вложения

      64 KB Просмотры: 12
      81.4 KB Просмотры: 18
      97.1 KB Просмотры: 6
      99.3 KB Просмотры: 5
      102 KB Просмотры: 4
      113.4 KB Просмотры: 5

      fps
      Active member

      Там чушь написана. В русскоязычной вики это часто. См. оригинал https://en.wikipedia.org/wiki/RS-232

      pvvx
      Активный участник сообщества

      Там чушь написана. В русскоязычной вики это часто. См. оригинал https://en.wikipedia.org/wiki/RS-232

      Baud — Wikipedia

      en.wikipedia.org

      en.wikipedia.org

      pvvx
      Активный участник сообщества

      Baud — Wikipedia

      en.wikipedia.org

      en.wikipedia.org

      Как у вас будет 1.5 стоп бита?
      У UART или RS-232 на символ идет от 10 до 12 бит при передаче 8-ми битных значений. Стоп бывает и 1.5.

      pvvx
      Активный участник сообщества

      В русскоязычной вики это часто.
      Как раз там всё в норме.

      Бод — Википедия

      ru.wikipedia.org

      ru.wikipedia.org

      в бодах выражают полную ёмкость канала, включая служебные символы (биты), если они есть.
      См. оригинал https://en.wikipedia.org/wiki/RS-232

      1. В данном случае тут нет никаких стандартов RS-232 по многим параметрам. UART, как ‘Последовательный порт’ есть, а RS-232 нет.
      2. Стандарт RS-232 не определяет скорости передачи битов, за исключением того, что в нем говорится, что они предназначены для скоростей передачи данных ниже 20 000 бит в секунду. Стандарт RS-232 определяет уровни напряжения, которые соответствуют уровням логической единицы и логического нуля для линий передачи данных и сигналов управления.

      pvvx
      Активный участник сообщества

      Там чушь написана. В русскоязычной вики это часто. См. оригинал https://en.wikipedia.org/wiki/RS-232

      Не забывайте главного – технический язык, это специализированный вариант естественного языка. Но не все языки годятся как технические, особенно для описания в таких науках как физика, что более близка к радио-электротехнике. Русский и немецкий язык годится для технических описаний и имеет большее количество уточняющих слов и сочетаний, как и слов описывающих подгруппы с малыми отличиями. Английский технический – это урезанный упрощенный сборник из разных естественных языков. Остальные бытующие языки малопригодны и созданы ради усложнения понимания и не могут точно описывать уточненные и множественные варианты. В техническом английском более часто одно значение слова обозначает совершенно разные вещи и описания в нем неточны, без большого контекста с уточнением.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *