104-Прошивка любого Hex-файла в Arduino при помощи штатного загрузчика (Bootloader).

Автор: | 15.12.2013

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

Нас, прежде всего, интересуют три платы Arduino:
Arduino Uno – как самый распространенный вариант
Arduino Nano – компактный вариант, удобный для применения в небольших конструкциях
Arduino Pro Mini – дешевый компактный вариант без встроенного USB-UART преобразователя (для работы с ним понадобится внешний USB-UART преобразователь), но удобный в случае применения сети устройств.

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

ATmega48_88_168_328.pdf - Даташит на ATmega48A-48PA-88A-88PA-168A-168PA-328-328P

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

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

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

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

GC Uploader.zip - автоматический загрузчик HEX-файлов для Arduino

Программа интересна тем, что выбранный HEX-файл будет заливаться в Ардуину автоматически после каждого его изменения. Это удобно, так как при разработке проекта каждая компиляция (обновление хекса) будет инициировать прошивку Ардуины — Вам ничего не придется делать самому! Кроме того в программе есть и ручной режим прошивки.

 

Следующая — маленькая и удобная
XLoader (Arduino HEX uploader)

XLoader.zip - Программа для записи Hex-файла в Arduino

Программка имеет аскетичный интерфейс и работать с ней предельно просто:
— подключаем Arduino в USB-порт (отдельного питания не нужно)
— выбираем Hex файл
— выбираем тип Вашего Arduino
— выбираем COM порт, который создался при подключении Arduino к USB (скорость порта автоматически подставится при выборе типа Arduino)
— жмем Upload

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

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

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

При разработке ПО для микроконтроллера производится очень много прошивок и всегда нужно стремиться автоматизировать этот процесс после сборки проекта — это экономит время и нервы. В данном случае автоматизация усложнена, так как программа не показывает командную строку для AVR Dude (разве что подбирать опытным путем), но некоторое упрощение процесса возможно. Делается это следующим способом – после первой прошивки не закрываем окно программы (COM порт после прошивки программа отпускает) и после следующей сборки проекта просто жмем кнопку «Upload». Конечно, сборка должна осуществляться в один и тот же Hex-файл.

 

Еще одна программка
ARP Uploader (Arduino Hex Uploader and Programmer)

ArduinoUploader.zip - Программа для записи Hex-файла в Arduino

Как и предыдущая, программка имеет простой интерфейс.
Процесс прошивки тот же:
— подключаем Arduino в USB-порт (отдельного питания не нужно)
— выбираем Hex файл
— выбираем тип Вашего Arduino
— выбираем COM порт
— жмем Upload

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

При попытке прошить Arduino Nano программа отказывалась видеть МК. Причиной стала неправильная установка скорости COM порта. По умолчанию скорость стоит 19200, а нужно 57600. Скорость порта в программе не задается явно, она прописывается в строчке «AVR Dude Params» — поменяйте в ней значение 19200 на 57600.

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

 

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

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

Arduino_drivers.zip - Драйвера для Arduino

Стали появляться недорогие китайские Ардуины с драйвером CH340G
Driver CH340G.zip - Драйвер для преобразователя USB-UART

 

Загрузчики Arduino

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

ATmegaBOOT_168_atmega328.hex - Bootloader для ATmega328
Для правильной работы нужно установить фьюзы следующим образом Low: FF   High: DA   Ext: 05

ATmegaBOOT_168_diecimila.hex - Bootloader для ATmega168
Фьюзы Low: FF   High: DD   Ext: 00

 

Схемы Arduino

Cхемы вышеописанных Ардуин.
Arduino_Uno_Rev3-schematic.pdf - Схема Arduino Uno
ArduinoNano30Schematic.pdf - Схема Arduino Nano
Arduino-Pro-Mini-schematic.pdf - Схема Arduino Pro Mini

 

Фьюзы установленные по умолчанию в 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

(Visited 44 128 times, 94 visits today)

104-Прошивка любого Hex-файла в Arduino при помощи штатного загрузчика (Bootloader).: 56 комментариев

  1. Juris

    Спасибо, полезная информация. Я тут держу при себе горстку Nano и Pro Mini, на разные случаи жизни 🙂
    Немного о другом, вопрос к уважаемому Aвтору, может есть к праздникам какая доработанная версия управляющей программы к устройству «Эффектор-12»? Устройством и предыдущей версией программы пользуюсь регулярно (режим цветомузыки), раньше тут и на форуме накапливались идеи и замечания для доработки программы, вот я подумал, может к этому Новому Году назревает какой подарочек всем? 😉 Спасибо!

  2. GetChiper Автор записи

    С эффектором до Нового года вряд-ли чего получится сделать, но в планах есть его доработка (и похоже новый эффектор можно будет заливать в ардуину).
    Есть желание немного обновить эффекты в супергирлянде — надеюсь хоть это успею.

  3. Juris

    По Эффектору я имел ввиду на данный момент только программу, там раньше у нас был небольшой список пожеланий и поправок, таких как запоминание ползунков к режимам цветомузыки «полный» и «зеркало», добавление режима «не-зеркало» (каналы 1-6, 1-6), может регулировка скорости затухания, может запуск эффектов в паузах без музыки и.т.п. А железо неплохое и такое как есть. Без наворотов, но своё делает.
    В любом случае — спасибо за сделанное и успехов вперёд!

  4. zorro

    Эффектор на ардуино это здорово, буду ждать.

  5. plumber

    Подскажите плиз,где найти строчку «AVR Dude Params»

  6. plumber

    Сори,не думал что всё так просто

  7. GetChiper Автор записи

    🙂

  8. crezi-alex

    Рад, что вы думаете также. Тоже использую просто как отладочную плату Arduino Uno и самодельную Arduino Pro Mini сделанную из платы переходник между DIP и SMD корпусами для микроконтроллеров продают. Много интересного нашел для себя в том числе обязательно воспользуюсь Bootloader для ATmega328 что то он мне ранее не попадался. Мне нравится что не нужно пользоваться языком для arduino просто можно загрузить хекс у меня как раз были проблемы с адаптацией. Спасибо очень полезная статья!

  9. kresor

    на MEGA48 можно собрать Arduino? Под неё подойдет какая — нибудь прошивка?

  10. GetChiper Автор записи

    ATmega48 никогда в ардуине не стояла, соответственно и не поддерживается, поэтому никакая прошивка не станет с ней работать.

  11. semen-pro

    @GetChiper на ATmega48 можно собрать Arduino.
    Порядок действий:

    1) откройте файл arduino-0018/hardware/arduino/boards.txt и добавьте в его конец что-то вроде этого:

    ######################################################

    atmega48.name=ATMega48
    atmega48.upload.using=avrisp
    atmega48.upload.maximum_size=4094
    atmega48.upload.speed=38400

    atmega48.bootloader.low_fuses=0xE2
    atmega48.bootloader.high_fuses=0xDF
    atmega48.bootloader.extended_fuses=0xFF
    atmega48.bootloader.path=atmega
    atmega48.bootloader.file=atmega48.hex
    atmega48.bootloader.unlock_bits=0x3F
    atmega48.bootloader.lock_bits=0x0F

    atmega48.build.mcu=atmega48
    atmega48.build.f_cpu=8000000L
    atmega48.build.core=arduino

    2) Подсоедините AVCC микроконтроллера к плюсу питания (используется для analogRead как analog reference)
    3) Поставьте конденсатор примерно в 0,1мкФ между AREF и землёй
    4) enjoy!

    А теперь о плохом %)
    доступно тока 4кб памяти, что накладывает сильные ограничения на размер скетча (при использовании bootloader-а — всего 2кб), так что, скорей всего, грузить скетчи на плату вам придётся с помощью программатора

    аналогичным способом программируются и другие контроллеры, нужно гуглить

  12. alex_and_r

    Подскажите пожалуйста, если я создам свой ..hex, например в avr studio, и залью его в ардуину с помощью этих программ загрузчик самой ардуины не потрется?

  13. GetChiper Автор записи

    Нет, не потрется, он находится в конце Flash памяти и не стирается при перезаписи. Конечно размер прошивки не должен заполнять всю флеш, оставляя место для загрузчика (но и в этом случае загрузчик просто не зальет такую прошивку).

  14. Plant

    Программка конечно интересная. Но… Кто-то пробовал при помощи её влить в UNO файл EEPROM? Льет, но в виде прикладной программы 😉

  15. GetChiper Автор записи

    Да, EEPROM, по ходу, не зальет — подозреваю что сам загрузчик ардуины не представляет такой возможности (хотя я в этом не совсем уверен — как то с ардуинами мало знаком)

  16. Igor60

    BOOTLOADER и программатор две разные вещи…. С помощью ArduinoUploader можно (и нужно 🙂 ) «заливать EEPROM». Укажите в парамтрах, что пишете в EEPROM (-Ueeprom) и «будет Вам счастье»…

  17. GetChiper Автор записи

    Согласен про программатор, но ардиина-то прошивает сама себя через BOOTLOADER — программатор тут не причем. А вот поддерживает-ли BOOTLOADER ардуины запись в EEPROM?

  18. Igor60

    Дело в том, что все это уже опробовано. EEPROM и пишется и читается. Вот фьюзы прочитать не возможно, т. к. закрыты команды LPM STM для области загрузчика. Кстати и FLASH тоже можно прочитать.

  19. Plant

    Igor60 :
    Дело в том, что все это уже опробовано. EEPROM и пишется и читается.

    Не подскажете, как?

  20. Igor60

    В окне AVR Dude Params программы ArduinoUploader подправляем параметры:
    -F -v -pm328p -cstk500v1 -P\\.\COM4 -b57600 -D -Ueeprom:w:»D:\ARDUINO\ArduinoUploader\EE_Test.hex»:i
    для записи файла D:\ARDUINO\ArduinoUploader\EE_Test.hex в EEPROM ATmega328. Я пользуюсь 3-х вольтовой, 8-ми мегагерцовой ARDUINO Pro Mini, подключение «стандартное» через переходник на CP2102. Для чтения меняем параметр :w на :r и указываем имя файла в который будем писать. Ну и на всякий случай:
    параметры:
    -F: Игнорировать проверку соединения с МК.
    -v: так называемый подробный вывод — для контроля и отладки.
    -p : Тип МК для программирования. Указываем нашу атмегу -pm328P.
    -c : Тип программатора. Пишем -cstk500v1.
    -P : Коммуникационный порт, пишем -P\\.\COM3.
    -b : Скорость для работы с последовательным портом, пишем -b19200.
    -D: Отключаем очистку МК перед прошивкой.
    -U :r|w|v:[:format]: Самая важная команда — выполнение прошивки.
    — тип памяти МК — flash или eeprom (или hfuse, lfuse, efuse для конфигурации фьюзов МК, фьюзы читаются как 0).
    r|w|v — флаги определяют, что мы хотим сделать:
    r (read — считать)
    w (write — записать)
    v (verify — проверить).
    файл для записи или чтения.
    [:format] флаг формата данных. Здесь всегда используется формат , поэтому стоит i

  21. Igor60

    Упустил, поставте свой номер COM порта.

  22. pino24

    А кто подскажет ка скинуть arduino uno на 328 меге к заводским настройкам?

  23. pino24

    желательно пример скетча, а не с помощью программатора

  24. GetChiper Автор записи

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

  25. pino24

    @GetChiper
    я пробовал,не получается. Придется все же шить((, а где фьюзы посмотреть для AT mega 328p (Arduino uno)

  26. pino24

    Извиняюсь, увидел XD

  27. askot

    Пожалуйста,поясните следующее. По части записи программой ArduinoUploader Hex файла. Пункт выбираем Hex файл, вопрос: 1)откуда ВЫБИРАЕМ необходимый для прошивки Hex файл,2)как настроить среду ардуино прежде чем нажать кнопку Upload.Заранее благодарю.

  28. GetChiper Автор записи

    Если ты решил прошить ардуину HEX-файлом, подразумевается, что этот файл у тебя где-то хранится на винте — вот в этом месте и нужно выбирать файл.

    Среды ардуино вообще не нужно. ArduinoUploader, HEX-файд и Arduino — больше ничего не нужно!

  29. askot

    Пожалуйста подскажите как же мне поиметь hex файл, чтобы задействовать эффектор.Дайте ссылку, где можно изучить материал на эту тему. Заранее благодарю,с Новым Годом Вас!!!

  30. GetChiper Автор записи

    В каждой статье есть архив с материалами для сборки устройства. В архиве я обычно оставляю readme.txt файл, в нем написано где прошивка.

  31. askot

    Для эффектора, который собирается за 5 минут, я не нашёл архива readme.txt файла,где написана прошивка.Убедительная просьба дайте, пожалуйста, прошивку для этого устройства. Заранее спасибо.

  32. valex

    Приветствую! Очень интересная и полезная статья.

  33. RV

    Я так понимаю, в магазине http://diylab.com.ua/, который здесь на сайте представлен, продаются не оригинальные ардуинки? Цена слишком низкая от оригиналов

  34. RV

    Да, есть оригиналы, но дороговато, на официальном сайте ардуино в Украине http://arduino-ua.com/ дешевле, может этот сайт лучше представить? )

  35. GetChiper Автор записи

    Если они захотят — могу и их представить.

  36. Andry Smart

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

  37. GetChiper Автор записи

    Бутлоадер для работы скетча не нужен — можно залить просто НЕХ и все будет работать.

  38. RV

    Добрый день. У меня проблема, я записывал в ардуино уно хекс файл с помощью xloader, записало, но не заработало, потом решил записать скетч с ардуино, мне показало такую ошибку http://vk.com/photo17892530_427106272, что может быть? подскажите. Нашел подобную ошибку в нете, пишут, переустановить драйвера, удалил с компа старые, с помощью драйвера парка загрузил новые для ардуино, то же самое. При заливки скетча уже в ардуино иде, мигает рх светодиод 1 раз примерно в две секунды и потом выдает ошибку, выше показаную. Описываю все действия, что делал позже:
    1. Менял платы на старые версии в программе ардуино, та самая ошибка.
    2. Проверял мегу 328 в юсб асп программаторе считать, работает, думал может залочилась.
    3. Пробовал эту же мегу отдельно, вне платы ардуино, программировать с помощью ардуино иде через юсб асп программатор, прошивается, работает, заливал скетч мигания светодиодом, мигает.
    3. Когда подключаю ардуино к ноуту, плата в ардуино иде опрелеляется как ардуино уно и пишет рядом выделенный под нее порт, когда отключаю, пропадает, подключаю, опять появляется, то есть с драйверами я так понял все хорошо. Только на кнопку ресет нет никакой реакции.
    4. Когда заливаю скетч в плату ардуино, соответственно выбираю плату ардуино уно и порт, тот который выделен под ардуино.

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

  39. RV

    Все делал пошагово, как в описании

  40. admin Автор записи

    Посмотри цепи сброса в ардуине. Возможно что-то с ними. Процесс прошивки при помощи бутлоадера начинается после сброса МК. При этом сброс можно сделать вручную (так делалось в старых ардуинах) либо среда программирования сама сбрасывает МК при помощи встроенного преобразователя USB-UART.

  41. Александр-Гришин

    Прошивка HEX файлов для ардуино для меня новенькое. Подскажите если прошить ардуино каким то hex файлом (например для 3D printera), то потом уже ардуинку нельзя будет просто использовать с Arduino IDE, а придется сначала перепрошить мк?

  42. admin Автор записи

    Ардуина не потеряется для IDE. В нее все также можно будет заливать скетчи.

  43. Александр-Гришин

    Спасибо. Я так понял скомпилированный скетч прошиваемый Arduino IDE, это что то типа HEX прошитый XLoaderom (или аналогом)? Шьется в те же области.

  44. admin Автор записи

    Да, именно так.

  45. Dr. Alex

    Странно, у меня при попытке запустить Arduino Uploader выдаёт окно с ошибкой приложения — Ошибка инициализации приложения (0х0000135)! На компе Windows XP sp3/
    Такая-же хрень и с XLoader…….

  46. Dr. Alex

    Я разобрался в чём дело. Скорее всего нужна поддержка .NETFramework выше чем 4

  47. krian

    Я их скачал, но они обе не работают. Даже прилагаемые драйверы установил. (адаптер на базе PL2303HX обнаруживается и работает). На компьютере Windows 7.
    Xloader пишет, что загрузка началась, но зависает и не выходит из этого состояния. На TXD редко подмигивает индикатор. Никаких ошибок не выдает. Закрывается этот Икслоадер только с помощью диспетчера.
    Uploader открывает командное окно. Ждет секунд 5. Потом пишет: avrdude: нет синхронизации.
    Что еще нужно?
    Прошивка через загрузчик может и удобная штука, но мне привычнее традиционным способом — через AB, CVAVR или ponyprog. Можно ли как-то вообще очистить кристалл от этого ардуиновского загрузчика?
    Я покупал эти платы Arduino pro mini, как обычные контроллеры с минимальной обвязкой. Для своих применений.
    А они не стираются!
    AB, CVAVR сказали, что кристалл не доступен уже на стадии стирания. Другие ж доступны… значит аппаратная часть программаторов исправна.
    В Pony начались приключения. Стираю кристалл. Читаю фьюзы. Lock биты не стерлись.
    Убираю lock биты, чтобы открыть доступ. Перезаписываю фьюзы, включаю внутренний генератор, вместо кварцевого. Т.к. mega168V до 10 Мгц, а кварц стоит на 16МГц. Получилось. Сигнал на кварце исчез. Светодиод на плате перестал мигать. Т.е. первоначальная программа уже не работает. Кристалл читается. Но со второй попытки «Retri». Однако, чтение показывает, что полного стирания не произошло (FF только в первых двух строчках, а дальше какая-то информация), после чтения кристалла все lock биты почему-то восстановились. И снова заблокировали чтение памяти. Повторение описанных операций ничего не меняет. По команде стирания должен же стереться и загрузчик и lock биты. Не масочный же он там.

  48. admin Автор записи

    Лок-биты на ардуине не активны. Их трогать вообще не нужно. В ардуиновкую МК можно заливать все что угодно обычным способом через SPI-интерфейс.
    Возможно Вам попалась партия бракованных ардуин?

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