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

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

Программа интересна тем, что выбранный 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 85 863 times, 4 visits today)

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

  1. krian

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

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

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

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

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

  3. krian

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

  4. krian

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

  5. 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),пробовал и на семёрке.что случилось? можно прошить как нибуть по другому.Собрал Супер герлянду ну вот хотел с компа Эфекторам руководить,(скоро новый год),Да спасибо за супер герлянду классно.

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

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

  7. Сергей

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

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

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

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

  9. Shamshybek

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

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

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

  11. Shamshybek

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

  12. SVN

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

  13. 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. С ним все отлично. )

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

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

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

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