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

Автор: | 15.12.2013

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

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

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

Atmel-8271-8-bit-AVR-Microcontroller-ATmega48A-48PA-88A-88PA-168A-168PA-328-328P_datasheet.pdf (10808 Загрузок)

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

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

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

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

gcUploader.zip (28565 Загрузок)

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

 

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

XLoader.zip (27863 Загрузки)

Программка имеет аскетичный интерфейс и работать с ней предельно просто:
— подключаем 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 (23920 Загрузок)

Как и предыдущая, программка имеет простой интерфейс.
Процесс прошивки тот же:
— подключаем 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 (14320 Загрузок)

Стали появляться недорогие китайские Ардуины с драйвером CH340G
Driver-CH340G.zip (10805 Загрузок)

 

Загрузчики Arduino

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

ATmegaBOOT_168_atmega328.zip (Одна Загрузка)
Для правильной работы нужно установить фьюзы следующим образом Low: FF   High: DA   Ext: 05

ATmegaBOOT_168_diecimila.zip (6996 Загрузок)
Фьюзы Low: FF   High: DD   Ext: 00

 

Схемы Arduino

Cхемы вышеописанных Ардуин.
Arduino_Uno_Rev3-schematic.pdf (11372 Загрузки)
ArduinoNano30Schematic.pdf (10675 Загрузок)
Arduino-Pro-Mini-schematic.pdf (9384 Загрузки)

 

Фьюзы установленные по умолчанию в 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 193 419 times, 11 visits today)

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

  1. Евгений

    Здравствуйте. При заливке HEX файла через TTL (UART) выводы D0 и D1 не работают как требует моя прошивка. При прошивке через SPI интерфейс всё в порядке, выводы дёргают ногами как положено. Объясните пожалуйста почему и как это устранить?

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

    Все утилиты используют для прошивки avrdude. Насколько я знаю, ее еще не научили работать с ESP.
    Но есть куча других утилит специально созданных для ESP/

  3. sollers777

    NodeMCU с ESP8266 этими утилитами возможно как-то прошить?

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

    Свои исходники я публиковать не планирую (там ничего секретного — причина в другом)
    А по механизму загрузки скетча — все просто, любой из вышеперечисленных загрузчиков использует для загрузки консольную AVRDUDE, передавая параметры в виде командной строки.
    Более подробней как это реализовано у меня http://www.getchip.net/posts/148-avtomaticheskijj-zagruzchik-hex-fajjlov-dlya-avr-mikrokontrollerov-obnovlenie-gcuploader/
    А вот официальная дока http://www.getchip.net/wp-content/uploads/avrdude-doc-6.3.pdf

  5. Avazart

    Такой вопрос а есть программы с исходным кодом?
    Что бы если что поправить его под себя и что бы изучить механизм загрузки скетча по компорту?

  6. Oго

    После замены Mega 328P на плате Arduino nano, долго не мог залить бутлоадер …
    После долгих проб и ошибок получилось залить бутлоадер Arduino UNO, подключение стандартное через Arduino nano

    Подключение Nano(ведущая) — Nano (которую прошиваем)

    D13 to Pin3 (SCK)
    D12 to Pin1 (Miso)
    D11 to Pin4 (Mosi)
    D10 to Pin5 (Rst)
    +5 to Pin2 (VCC+5)
    GND to Pin6 (GND)

    Теперь при подключении шнура к USB светодиоды на двух платах должны весело моргать в унисон.

    Далее пошагово

    1. Подключить Nano (рабочая) к компьютеру USB шнуром;
    2. Прошить в Nano (рабочая) скетч ArduinoISP из папки примеров
    тут все как обычно (выбираем порт, тип платы Arduino Nano, программатор по дефолту AVRISP MkII);
    3. Отключить Nano (рабочая) от компьютера -она теперь стала программатором SPI Nano
    4. Подключить SPI Nano к Nano (которую прошиваем) согласно схеме;
    5. Подключить SPI Nano к компьютеру USB шнуром;
    6. Выбрать тип программатора Arduino as ISP;
    7. Выбрать тип прошиваемой платы Arduino/Genuino Uno;
    8. Выбрать COM порт, к которому подключена Nano — наш программатор;
    9. Нажать «Записать загрузчик»;
    10.Загрузчик залился

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

    Все эти загрузчики (как и Arduini IDE) работают через avrdude.
    Ищите в интернете информацию по вопросу прошивки Arduino Due через avrdude (нужна командная строка).

    Новая версия gcUploader поддерживает возможность добавлять свои ардуины — нужно только прописать командную строку для avrdude
    http://www.getchip.net/posts/148-avtomaticheskijj-zagruzchik-hex-fajjlov-dlya-avr-mikrokontrollerov-obnovlenie-gcuploader/

  8. Evgenij

    По UNO, Nano, Mini особых проблем нет, хотя есть одна UNO с неизвестным bootloader-ом, но это мелочи.
    А вот как залить HEX файл в Arduino Due R3 нигде не нашел пока. Вернее загрузчик залил, через программ
    порт, он и определяется как Arduino Due Programming Port, если переставить USB интерфейс в разъем Native, то появляются два неизвестных устройства TinyG v2 (Control Channel) и TinyG v2 (Data Channel)
    TinyG v2 (Control Channel) USB\VID_1D50&PID_606D&MI_00\6&6B2D6D3&0&0000 драйвер встал нормально.
    TinyG v2 (Data Channel) USB\VID_1D50&PID_606D&MI_02\6&6B2D6D3&0&0002 а тут при установке того же драйвера, у TinyG2 другого не нашел, но после установке выдает ошибку Запуск этого устройства невозможен. (Код 10).
    При заливке загрузчика все штатно и верификация проходит нормально.
    Но как залить HEX? Где взять софт для работы с TinyG2? И что делать с драйвером для TinyG v2 (Data Channel) не понятно.
    Пробовал скомпилировать проект для 3D принтера, но вылетает с ошибкой на этапе компиляции.
    Программные заморочки это не для меня. Мне паяльник и прибор ближе. )
    Кто что может подсказать или посоветовать? XLoader Arduino Due не поддерживает. Там ARM контроллер, а не AVR. Загрузчик заливал через Bossa — Flash Programmer for Atmel SAM Device. С ним все отлично. )

  9. SVN

    Курсовая работа по микроконтроллерам подразумевает показ приобретённых знаний. Которых у тебя нет. Тебе нужны знания или просто зачёт? Если «зачёт», то «договорись» с преподом – купи ему с десяток ардуин за зачёт!!! ))))))))))))

  10. Shamshybek

    Ну да там по схеме ATmega8L . Вот эту микроконтроллеру мне надо залить этот «Hex» файл через Ардуино Уно.
    Я хочу использовать Уно как программатор. А препод хочет чтоб я ему всю плату Ардуино отдал, а я хочу на ATmegu залить коды, припоять и защитить ((… Но увы у всех получается у меня оно не работает ((

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

    В Выбранном устройстве применена не Ардуина, а отдельный микроконтроллер. Соответственно, нужно использовать другой способ записи прошивки.
    Еще, не мешало-бы почитать про фьюзы АВР-микроконтроллеров — из-за них начинающие часто запарывают проекты. http://www.getchip.net/posts/068-kak-pravilno-proshit-avr-fyuzy-fuse-bit/
    Кстати, в статье указаны некоторые популярные программы для прошивки МК (Sinaprog, ponyprog…) — как раз ваш случай.

  12. Shamshybek

    Всем доброго вечера, для начало С НАСТУПАЮЩИМ ВАС…
    Пожалуйста подскажите как я могу прошить другую микроконтроллер ЧЕРЕЗ АРДУИНО УНО. У меня курсовая по микроконтроллере препод дал тему на ЛЮКСМЕТР я по этой схеме делаю http://cxem.net/izmer/izmer91.php
    Скачал архив и там Hex файл, и тут я не понимаю как открыть его, как залить эту программу на микроконтроллер, кроме него я все прриготовил и даже плату растравил и все припоял. Мне только остается туда микроконтроллер припаять и все…
    Подскажите пожалуйста прошу…

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

    В принципе, подправив в файле gc_uploader.ini — строчку параметров для avrdude Вы сможете прямо из этой версии программы прошивать Arduino Leonardo (правда в выпадающем списке леонардо не появится).

    Вы натолкнули меня на мысль реализовать в программе возможность добавления произвольных плат или даже отдельных МК (поддерживаемых avrdude).
    Создал топик на форуме
    http://www.forum.getchip.net/viewtopic.php?f=8&t=817
    если поучаствуете, то вместе мы это сделаем быстрее (нужно будет чтобы вы попробовали прошить ваш леонардо через avrdude)

  14. Сергей

    Здравствуйте. Могу я как либо подправить конфиги или исходники(если позволите), чтобы прошить Arduino Leonardo.
    На java ни разу не писал, восновном Си да js. Но если направите в нужное русло, разберусь)

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

    Похоже на то, что во время прошивки что-то сбилось и пошло не так.

  16. Sergei-Acgym

    Немогу прошить вот это https://ru.aliexpress.com/item/Freeshipping-Nano-3-0-controller-compatible-for-arduino-nano-CH340-USB-driver-NO-CABLE/32341832857.html
    Получил новый,когда подключал к компу (стоит 10)дрова поставил красный светодиод мигал через секунду,начал прошивать через XLoader прога зависла.Красный светодиод стал хаотично мигать RX TX мигнули и всё.Теперь постоянно хоотично мигает светодиод красный(L).пробовал другой програмой прошить
    ARP Uploader пишет «avrdude: stk500_getsync(): not in sync: resp=0x00» приэтом постоянно мигает (L),пробовал и на семёрке.что случилось? можно прошить как нибуть по другому.Собрал Супер герлянду ну вот хотел с компа Эфекторам руководить,(скоро новый год),Да спасибо за супер герлянду классно.

  17. krian

    Нет, на меге 16 скорее всего ничего не получится, т.к. у него с мегой 8 адреса векторов прерываний не совпадают.

  18. krian

    Наконец получилось! Оказался незаметный дефект на плате моста USB_UART. Только под микроскопом и разглядел. Не шел полноценный сигнал DTR. А поймать нужный момент кнопкой сброса практически невозможно.
    Но это получилось только на одной плате Pro mini. Остальные я, видимо, испортил своими экспериментами при попытках стирания. Надеюсь, что мне поможет AVR fuse doctor, который описан у вас в другом разделе. Но у меня нет под рукой ATMEGA 8. Я думаю использовать ATMEGA 16, которая стоит у меня на макетной отладочной плате. Это же разовая процедура. У этих контроллеров адреса регистров и портов совпадают, поэтому НЕХ файл для Меги 8 должен работать и на Меге 16.
    Вы не пробовали?

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

    Если микроконтроллеры не получается прошить через обычный программатор (из того-же билдера) то проблема или с самим МК или с установкой фьюзов/лок-бит в нем.

    еще может быть нарушен загрузчик (при этом основная программа может работать)
    либо скорость порта для загрузчика нужна другая (попробовать поменять из линейки стандартных)

    как вариант можно попробовать установить ардуиновское IDE и попытатся прошить из него

  20. krian

    У меня 4 платы с мега168 от одного производителя и одна с мега 328 от другого. Причем, микросхемы тоже разных производителей. 328-я с логотипом Атмел, a 168-я тоже с надписью Атмел, но не такой, как у Атмел. Что же, они все бракованые?
    Светодиод мигает — значит заводская прошивка работает. Если бы были бракованые, то и заводская прошивка не заработала бы. Маловероятно, что они какие-то частично бракованые или для применения исключительно в Ардуино.
    Когда я их покупал, то тоже думал, что там все открыто и можно будет легко перепрошить. Зачем секретить программу, которая в библиотеке с Ардуино в открытом доступе? И в описании было сказано, что подходит в том числе и для Ардуино.
    Странно что ни Xloader ни Uploader не работают. Может где-то в компьютере нужно что-то проверить? Птички какие-нибудь где-то поставить?

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