Как загрузить hex файл в arduino ide

Обновлено: 04.07.2024

Сегодня вы узнаете как загрузить 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.

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

О прошивках Arduino

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

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

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

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

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

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

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

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

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

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

XLoader

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

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

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

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

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

    SinaProg

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

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

    Avrdude

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

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

    Загрузка HEX прошивки в Arduino

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

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

    Arduino IDE, AVRDude

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

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

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

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

      Подготовка

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

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

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

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

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

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

      Ошибка avrdude, 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…


      Выбор COM-порта в Arduino IDE

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


      Определение COM-порта, к которому подключена Arduino через диспетчер устройств Windows.

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

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

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

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

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

      Чем регулируется частота и амплитуда , Какой кабель нужен для прошивки Arduino nano ?

      Она вводится через последовательный порт, аналогично тому как загружается прошивка.
      Кабель нужен mini-USB data

      Некоторые проекты для 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:

      Готово!

      Давайте немного отвлечемся от создания нашего робота и поговорим о том, как мы будем записывать прошивку в 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»

      Загрузчики Arduino

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

      Схемы 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

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