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

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

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

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

Как же прошить имеющийся 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\
avrdude.conf (конфигурационный файл) — из папки \Arduino\hardware\tools\avr\etc\

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

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

Затем в консоли требуется ввести команду:
-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

После ввода команды выполняется прошивка hex-файла в Arduino:
Готово!
- Войдите, чтобы оставлять комментарии
Arduino и Hex-файлы

Как загрузить Hex-файл в Arduino IDE, что это такое и как с ним работать — говорим сегодня в новой информационной статье. Тема выбрана не случайно, многие пользователи интересуются программным обеспечением на более «продвинутом2 уровне. При этом конечно же не всем хочется бегать за помощью к специалистам, листать многочисленные форумы и т.д. но выход есть – наша инструкция.
Прежде чем начать обсуждение по сути, небольшое отступление с пояснениями, что такое Hex-прошивка. Рассказываем: речь идет о скомпилированном файле, который загружается в плату Ардуино, но не является исходным кодом, как скетч. Иными словами, это простой способ распространения программ для изучаемой нами среды. Такие файлы часто имеют расширение *.hex – отсюда и название. Они просты в использовании, не требуют скачивания дополнительных библиотек, легко переносятся на другие девайсы.
Важный момент! В этой прошивке отсутствует возможность получения читаемого исходного кода для внесения пользователями коррекций.
Как же получить hex-файл для создания собственного проекта либо скетча?
- Для начала откройте нужный вам скетч в среде разработки IDE.
- Выберите в меню «Скетч» команду «Экспорт бинарного файла».

- Дождитесь окончания компиляции — в папке со скетчами появятся 2 или больше hex-файла:
Поговорим о том, как прошить Hex-файлы в Arduino IDE. Процедура не сложная — подключаем плату (Uno, Nano, Pro Mini) к USB-порту ПК. Нам необходимо узнать номер порта. Запускаем IDE, открываем меню Инструменты – узнаем COM. В дальнейшем мы его применим.
- Создаем папку под названием avrdude.
- Копируем в нее следующие файлы: avrdude.exe и libusb0.dll из C:\Program Files (x86)\Arduino\hardware\tools\avr\bin и avrdude.conf из C:\Program Files (x86)\Arduino\hardware\tools\avr\etc
- Запускаем консоль 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, о которой пойдет речь дальше.
- Выбираем файл прошивки
- Настраиваем программатор: выбираем…
- Arduino,
- Порт
- Скорость передачи
Последняя версия – 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 прошивку Ардуино”
- 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 Просмотры: 6tretyakov_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.hexobjcopy.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
Исправил ошибку.
Спойлер: Скриншоты
Windows

Linux

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

Вложения
64 KB Просмотры: 12
81.4 KB Просмотры: 18
97.1 KB Просмотры: 6
99.3 KB Просмотры: 5
102 KB Просмотры: 4
113.4 KB Просмотры: 5fps
Active member
Там чушь написана. В русскоязычной вики это часто. См. оригинал https://en.wikipedia.org/wiki/RS-232
pvvx
Активный участник сообщества
Там чушь написана. В русскоязычной вики это часто. См. оригинал https://en.wikipedia.org/wiki/RS-232
Baud — Wikipedia

en.wikipedia.org
pvvx
Активный участник сообщества
Baud — Wikipedia

en.wikipedia.org
Как у вас будет 1.5 стоп бита?
У UART или RS-232 на символ идет от 10 до 12 бит при передаче 8-ми битных значений. Стоп бывает и 1.5.pvvx
Активный участник сообщества
В русскоязычной вики это часто.
Как раз там всё в норме.Бод — Википедия

ru.wikipedia.org
в бодах выражают полную ёмкость канала, включая служебные символы (биты), если они есть.
См. оригинал https://en.wikipedia.org/wiki/RS-2321. В данном случае тут нет никаких стандартов RS-232 по многим параметрам. UART, как ‘Последовательный порт’ есть, а RS-232 нет.
2. Стандарт RS-232 не определяет скорости передачи битов, за исключением того, что в нем говорится, что они предназначены для скоростей передачи данных ниже 20 000 бит в секунду. Стандарт RS-232 определяет уровни напряжения, которые соответствуют уровням логической единицы и логического нуля для линий передачи данных и сигналов управления.pvvx
Активный участник сообщества
Там чушь написана. В русскоязычной вики это часто. См. оригинал https://en.wikipedia.org/wiki/RS-232
Не забывайте главного – технический язык, это специализированный вариант естественного языка. Но не все языки годятся как технические, особенно для описания в таких науках как физика, что более близка к радио-электротехнике. Русский и немецкий язык годится для технических описаний и имеет большее количество уточняющих слов и сочетаний, как и слов описывающих подгруппы с малыми отличиями. Английский технический – это урезанный упрощенный сборник из разных естественных языков. Остальные бытующие языки малопригодны и созданы ради усложнения понимания и не могут точно описывать уточненные и множественные варианты. В техническом английском более часто одно значение слова обозначает совершенно разные вещи и описания в нем неточны, без большого контекста с уточнением.