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 58 711 times, 31 visits today)

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

  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 Автор записи

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

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