Site Loader

Содержание

Прошивка Arduino в Openwrt через USB порт: vladikoms — LiveJournal

Решил подключить Arduino Pro Mini к маршрутизатору с прошивкой Openwrt по такой схеме. Данная схема подключения позволяет не только управлять контроллером, но и при необходимости производить его перепрошивку. Кроме того автоматически решается вопрос с питанием, т.к. девайс начинает питаться прямо от USB порта.



В качестве преобразователя использую широко распространенный FTDI FT232RL

Стоит заметить что есть и более дешевые варианты преобразователей на чипе Ch440, кроме того на aliexpress широко представлены Arduino Nano с начинкой в виде Atmega328 + Ch440. Цена начинается от 2.53 $

Подробнее о работе с данными платами можно почитать в статье Arduino Nano v.3.0

Увы, как позже выяснил, у данных плат возникают проблемы с прошивкой. Поэтому рассмотрю классическое решение с FTDI FT232RL

Для того что бы устройство FTDI определилось в системе скачиваем необходимые пакеты:

opkg update
opkg install libftdi

Следующие пакеты удалось установить только с ключем -nodeps, иначе вылетала ошибка

opkg -nodeps install kmod-usb-serial
opkg -nodeps install kmod-usb-serial-ftdi

после этого перезагружаем роутер и смотрим как система увидела преобразователь FTDI:

ls /dev/tty*

Если в списке появился ttyUSB0, то продолжаем работу

Сразу можно сконфигурировать порт следующей командой. В данном случае конфигурирую на скорость 9600.

stty -F /dev/ttyUSB0 cs8 9600 ignbrk -brkint -icrnl -imaxbel -opost -onlcr -isig -icanon -iexten -echo -echoe -echok -echoctl -echoke noflsh -ixon -crtscts

Данную строку можно поместить в автозапуск

При конфигурировании необходимо обратить особое внимание что бы в строке отсутствовал ключ «-hupcl«, иначе прошивальщик работать не будет. С другой стороны, если ключ «-hupcl» не прописать, то Arduino будет перезагружаться (по линии DTR) при обращении к USB-порту со стороны маршрутизатора. Таким образом, в нормальном режиме ключ «-hupcl» должен быть прописан, а при перепрошивке, нужно снова переконфигурировать порт с ключом «hupcl«

Скачиваем прошивальщик avrdude

opkg install avrdude

Далее необходимо загрузить в маршрутизатор hex файл прошивки. Среда Arduino IDE при компиляции создает эти файлы в самых неожиданных местах. Например в Windows XP нужно искать в Documents and Settings\<Имя пользователя>\Local settings\Temp\<Папка. tmp>
В Ubuntu/Linux Mint ищем в директории /tmp/build*.tmp

Осталось загрузить данный файл в маршрутизатор. Для таких дел обычно использую небольшой локальный FTP-сервер, очень удобно. Хотя в принципе ничего не мешает использовать scp. Скачиваем файл прошивки

wget ftp://»IP адрес FTP-сервера»/<Файл.hex>

Пример:

wget ftp://192.168.10.104/base.cpp.hex

Прошиваем микроконтроллер командой

avrdude -p m328p -P /dev/ttyUSB0 -c stk500v1 -b 57600 -C /etc/avrdude.conf -U flash:w:/<Файл.hex>

Пример:

avrdude -p m328p -P /dev/ttyUSB0 -c stk500v1 -b 57600 -C /etc/avrdude.conf -U flash:w:/tmp/base.cpp.hex

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

Arduino bootloader | avr | programming

Что такое бутлоадер? Обычно микроконтроллеры программируются с помощью специального программатора. Это может быть или программатор ISP, JTAG, debugWire, HVSP, HVPP. Для микроконтроллеров AVR в качестве альтернативы может использоваться функция самопрограммирования [4], когда запись в память новой программы (firmware) для микроконтроллера берет на себя специальная маленькая программа. Эта маленькая программа и называется бутлоадер (bootloader, загрузчик) [2]. Она запускается сразу после включения питания платы Arduino, или когда на плате нажата кнопка reset, или когда компьютер-хост USB, к которому подключена плата Arduino, выдал сигнал сброса (это делается с помощью специальной схемы реализации виртуального USB COM-порта Arduino). У программы загрузчика только есть только одна основная функция — принять через USART от компьютера-хоста новую программу, и прошить её в память программ (FLASH) микроконтроллера AVR платы Arduino (подробнее про загрузчик см. врезку «Как работает загрузчик?»).

Примечание: ISP означает In-System Programming — внутрисхемное программирование, т. е. когда микроконтроллер программируется без физического извлечения из программируемой системы. JTAG это специальный интерфейс для программирования, отладки и тестирования схемы.

debugWire это проприетарная разработка (компании Atmel), разновидность интерфейса JTAG для программирования и отладки. HVSP и HVPP обозначают соответственно High-Voltage Serial Programming (высоковольтное последовательное программирование) и High-Voltage Parallell Programming (высоковольтное параллельное программирование).

Не обязательно использовать бутлоадер. Когда Вы работаете в среде программирования Arduino (или в любой другой среде — BACSCOM AVR, AVR Studio, Atmel Studio, CodeVision AVR, Eclipse, IAR Embedded Workbench, Visual Studio), то для перепрошивки firmware (скетчей) в память микроконтроллера можете использовать внешний программатор [5]. Это дает определенные преимущества — Вы можете использовать для перепрошивки всю память программ (FLASH) микроконтроллера, и при использовании программатора нет задержки запуска программы из-за ожидания загрузчика.

Прошивка загрузчика из среды разработки Arduino. Чтобы прошить bootloader, Вам понадобится купить AVR-ISP (фирменный программатор ISP компании Atmel), USBtinyISP [6] или самому собрать ParallelProgrammer [7]. Программатор должен быть подключен к коннектору ICSP, это двухрядный разъем «папа», 2×3 выводов, с цоколевкой ISP6 [8]. При подключении убедитесь, что подсоединили коннектор в правильной ориентации, не наоборот. Для программирования на микроконтроллер платы должно подаваться питание; для плат Arduino обычно питание подается от внешнего источника или от порта USB.

Убедитесь, что правильно выбрали тип платы Arduino через меню Tools -> Board. Затем просто запустите подходящую команду из меню Tools -> Burn Bootloader. Прошивка загрузчика занимает примерно 15 секунд или больше. Подробнее про прошивку загрузчика см. врезки ниже.

Команда «Burn Bootloader» (прошить загрузчик) среды разработки Arduino IDE использует avrdude, утилиту с открытым исходным кодом.

При этом выполняются друг за другом шагов: разблокировка секции загрузки микроконтроллера (с помощью изменения фьюзов lock byte), запись фьюзов микроконтроллера, загрузка кода загрузчика в память микроконтроллера (программа bootloader записывается в секцию загрузки), и затем блокировка секции загрузчика микроконтроллера (с помощью изменения фьюзов активация защиты секции загрузчика lock byte). Эти шаги управляются некоторыми настройками в preferences file системы Arduino.

Примечание: что такое preferences file, где он находится?

Вот, например, эти настройки в preferences file для ATmega8 bootloader:

bootloader.atmega8.programmer (значение по умолчанию: stk500) здесь задается протокол,
используемый загрузчиком.
bootloader.atmega8.unlock_bits (значение по умолчанию: 0xFF) это значение записывается в
байт фьюзов защиты (lock byte) микроконтроллера ATmega8, чтобы разблокировать секцию
загрузки (bootloader section).
bootloader.atmega8.high_fuses (значение по умолчанию: 0xca) это значение для записи старшего
байта фьюзов ATmega8.
bootloader.atmega8.low_fuses
(значение по умолчанию: 0xdf) это значение для записи младшего
байта фьюзов ATmega8.
bootloader.atmega8.path (значение по умолчанию: bootloader) путь каталога (относительно
каталога приложения Arduino), в котором находится готовая прошивка загрузчика (двоичный
код).
bootloader.atmega8.file (значение по умолчанию: ATmegaBOOT.hex) имя файла, где содержится
прошивка загрузчика (в папке bootloader.atmega8.path).
bootloader.atmega8.lock_bits (значение по умолчанию: 0x0F) это значение записывается в байт
фьюзов защиты (lock byte) микроконтроллера ATmega8, чтобы включить блокировку секции
загрузки (чтобы он случайно не был перезаписан программатором или при загрузке скетча).

Вот настройки для ATmega168 bootloader (здесь слово ПЛАТА может быть либо diecimila, либо ng):

bootloader. atmega168-ПЛАТА.programmer (значение по умолчанию: avrispmkii) здесь задается
протокол, используемый загрузчиком.
bootloader.atmega168-ПЛАТА.unlock_bits (значение по умолчанию: 0x3F) это значение записывается
в байт фьюзов защиты (lock byte) микроконтроллера ATmega168, чтобы разблокировать секцию
загрузки (bootloader section).
bootloader.atmega168-ПЛАТА.extended_fuses
(значение по умолчанию: 0x00) это значение для
записи байта расширенных фьюзов ATmega168.
bootloader.atmega168-ПЛАТА.high_fuses (значение по умолчанию: 0xdd) это значение для записи
старшего байта фьюзов ATmega168.
bootloader.atmega168-ПЛАТА.low_fuses (значение по умолчанию: 0xff) это значение для записи
младшего байта фьюзов ATmega168.
bootloader.atmega168-ПЛАТА.path (значение по умолчанию: bootloader168) путь каталога
(относительно каталога приложения Arduino), в котором находится готовая прошивка загрузчика
(двоичный код).

bootloader.atmega168-ПЛАТА.file (значение по умолчанию: ATmegaBOOT_168_ПЛАТА.hex) имя
файла, где содержится прошивка загрузчика (в папке bootloader.atmega168-ПЛАТА.path).
bootloader.atmega168-ПЛАТА.lock_bits (значение по умолчанию: 0x0F) это значение записывается
в байт фьюзов защиты (lock byte) микроконтроллера ATmega168, чтобы включить блокировку
секции загрузки (чтобы он случайно не был перезаписан программатором или при загрузке скетча).

Здесь приведен перевод инструкции, предоставленной Gian Pablo Vilamil (Bootload the Arduino Mini site:arduino.cc). Инструкция полезна также для китайских плат Arduino, в которые производители для удешевления производства «забывают» прошить загрузчик.

В каких случаях может понадобиться перешить загрузчик?

1. Ваша плата Arduino не имеет загрузчика — по какой-то причине он не записан в память микроконтроллера. Это может произойти, если Вы заменили на плате чип микроконтроллера. Также может быть ситуация, когда производитель платы «забыл» записать загрузчик (так поступают многие китайские поставщики плат Arduino с целью удешевить производство).

2. Нужно заменить имеющуюся версию загрузчика на другую. Старые несовершенные загрузчики плат Arduino (до появления Arduino Diecimila) ждали около 10 секунд после сброса или включения питания, пока придет от хоста новая программа микроконтроллера (скетч). Такая задержка могла появиться и после программирования скетча. Эта лишняя задержка довольно неприятна, когда не нужно записывать в память скетч. Альтернативные загрузчики, в том числе Adaboot bootloader, LilyPad bootloader и загрузчик Arduino Diecimila устраняют эту задержку. Также в некоторых случаях Вы можете самостоятельно изменить код загрузчика (см. разделы «Исходный код загрузчиков Arduino», ссылку [9] и врезку «Пример конфигурирования загрузчика Arduino UART»). Это полезно, когда нужно, чтобы проект стартовал намного быстрее (без таймаута загрузчика), и особенно когда при включении питания/сбросе возможно поступление на вход UART каких-то данных, не относящихся к загрузке.

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

3. Загрузчик вообще не используется. Процедура замены загрузчика в среде программирования Arduino также позволит Вам его полностью заменить каким-то приложением. Преимущество тут в том, что Ваше приложение будет запускаться немедленно, без задержки, и освободятся дополнительно 2 килобайта памяти программ. Недостаток в том, что больше нельзя перепрограммировать Вашу плату Arduino через USB — надо будет использовать ISP (до тех пор, пока Вы не замените/восстановите загрузчик).

4. Имеющийся загрузчик иногда оказывается поврежденным. Это встречается очень редко, однако все-таки возможно при некоторых обстоятельствах повреждение памяти FLASH микроконтроллера Arduino, и не получается запрограммировать Arduino традиционным способом (через USB — TTL UART). Повторная установка загрузчика может исправить эти проблемы. Ситуация похожа на переформатирование жесткого диска в компьютере.

Чем программирование загрузчика у Arduino Mini отличается от других плат Arduino? Полноразмерные платы Arduino имеют 6-контактный коннектор ISP для подключения программатора. Ну у платы Arduino такого коннектора нет (он просто не поместился на маленькой плате), поэтому Вам понадобится сделать кабель с коннектором самостоятельно. В остальном программирование загрузчика ничем не отличается.

Что понадобится?

• Программатор ISP [5], например AVR ISP MkII или другой.
• 6 проводков.
• 2 кусочка линеек по 3 контакта (или двухрядный разъем «папа» на 6 контактов).
• Среда программирования AVR Studio (можно загрузить с сайта Atmel, или см. [11]).

Как сделать кабель?

Кабель должен соединять 6 контактов платы Arduino Mini с контактами разъема ISP программатора. Эти 6 выводов называются MISO, MOSI, SCK, RESET, Power и Ground. Из этих выводов 3 соответствуют цифровым портам ввода / вывода Arduino 11..13. Другие 3 вывода это сброс (Reset), +5V (Power) и земля (Ground, GND), и возможно Вы их уже используете. Обратите внимание, что вывод +5V это не вывод +9V. Вывод +5V нужен для подачи питания в программатор ISP.

Эти 6 выводов платы Arduino нужно подключить к 6 выводам коннектора ISP, показанным ниже.

Обратите внимание, что на этом рисунке показана нумерация контактов с обратной стороны коннектора ISP программатора (или со стороны штырьков коннектора, который будет подключен к плате Arduino Mini). Если коннектор программатора наколот на плоский кабель, у которого красным помечен первый провод, и коннектор обращен от Вас, то на рисунке показано то, что Вы увидите.

Сделайте соединения между платой Arduino и двухрядным коннектором «папа», как показано на рисунке ниже. Подключите этот коннектор к разъему ISP6 «мама» программатора, соблюдая правильную ориентацию коннекторов. Подключите программатор к компьютеру, подайте питание на плату Arduino.

Как прошить загрузчик в среде программирования Arduino?

Теперь Вы можете записать загрузчик с помощью программатора и среды Arduino IDE. Запустите Arduino IDE на компьютере, выберите тип платы Arduino (в меню Tools -> Board выберите Arduino Mini). Затем в меню Tools -> Burn Bootloader выберите тип Вашего программатора (например, это программатор AVR-ISP mkII).

Чтобы прошить альтернативный загрузчик (например, который Вы скомпилировали сами), понадобится программное обеспечение для управления программатором. Есть множество таких утилит, и в зависимости от имеющегося программатора Вам нужно выбрать то программное обеспечение, которое работает с Вашим программатором. Если Вы используете программатор AVR-ISP mkII, отладчик AVR Dragon или JTAGICE mkII, то можете воспользоваться средой программирования AVR Studio [11], где есть утилита программатора.

Как прошить загрузчик в среде программирования AVR Studio?

Загрузите и установите среду программирования AVR Studio. К сожалению, она работает только в операционной системе семейства Windows, но в Интернете можно найти инструкции, как прошить загрузчик (как и любую программу в память микроконтроллера AVR) в среде Mac OS/X, Linux и даже FreeBSD.

Запустите AVR Studio. Нажмите Cancel, чтобы пропустить стартовое окно, предлагающее создать или открыть проект.

В меню Tools -> Program AVR -> Connect… выберите тип Вашего программатора (Platform:) и порт для его подключения (Port:) и нажмите кнопку Connect.

Запустится окно утилиты программатора. На закладке Program выберите тип программируемого микроконтроллера, который установлен на Вашей плате Arduino Mini (ATmega168 или ATmega328), режим программирования Programming mode -> ISP mode. Поставьте галочки «Erase Device Before Programming» и «Verify Device After Programming». В разделе Flash -> Input HEX File выберите прошивку загрузчика.

Нажмите кнопку Program. В строке статуса основного окна AVR Studio Вы увидите отображение прогресса записи кода загрузчика. После окончания записи можно также нажать кнопку Verify, чтобы еще раз убедиться, что процедура завершилась успешно.

После того, как загрузчик записан, программатор ISP больше не понадобится. Отключите программатор от порта USB компьютера, и отключите коннектор ISP от платы Arduino Mini. Для записи скетчей в плату Arduino Mini понадобится только требуется специальный переходничок, который реализует преобразование интерфейса USB CDC (виртуальный COM-порт) в RS232 TTL (см. врезку «Переходники USB — TTL RS232 на аппаратных чипах»).

Примечание: если Вы программируете новый микроконтроллер, в котором не были настроены фьюзы (например, если сами собрали плату Arduino или заменили неисправный микроконтроллер), то также понадобится правильно установить фьюзы микроконтроллера. Основной смысл установки фьюзов — обеспечить запуск загрузчика при включении питания сброса, и правильно настроить тактовый генератор. Также полезно установить биты защиты, чтобы случайно не повредить секцию загрузчика. В утилите программирования AVR Studio фьюзы настраиваются на закладке Fuses, а биты защиты на закладке LockBits.

Подробнее про настройку фьюзов см. врезку «На что нужно обратить внимание при программировании загрузчика». В установке фьюзов и бит защиты очень помогает калькулятор фьюзов [10], также см. даташит на используемый микроконтроллер.

[Версии загрузчика Arduino]

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

Текущие версии загрузчиков (например те, которые поставляются вместе со средой Arduino 0009) почти идентичны для плат Arduino Diecimila и Arduino NG (на которых стоит ATmega168). Оба загрузчика этих плат работают на скорости передачи данных 19200 бод, и занимают в памяти программ (FLASH) микроконтроллера ATmega168 область размером в 2 килобайта. Отличия могут быть только во времени, сколько загрузчик ждет поступления новой программы, и в количестве мерцаний светодиодом на порте 13 Arduino (pin 13 LED), когда загрузчик запускается. Из-за автоматического сброса плат Arduino Diecimila загрузчик ждет очень малое время (меньше секунды), и для экономии времени также только один раз мигает светодиодом на порте 13. Загрузчик Arduino NG ждет примерно 6-8 секунд (потому что плата сбрасывается вручную при загрузке) и мигает светодиодом 3 раза при старте загрузчика.

Загрузчик, который реально поставляется вместе с продающимися платами Arduino NG, имеет незначительные отличия. Он разрешает внутренний pullup резистор микроконтроллера на порте 6, и не разрешает внутренний pullup резистор на выводе RX pin. Также он не использует таймаут при приеме ошибочных данных, так что если Вы пошлете микроконтроллеру через порт UART какие-то данные сразу после сброса (или включения питания), то загрузка Вашего скетча не произойдет (см. вопросы «Почему мой скетч не запускается …» в FAQ [3]).

Загрузчик платы Arduino BT делает некоторую первоначальную конфигурацию модуля Bluetooth.

Загрузчик ATmega8 занимает объем всего лишь 1 килобайт памяти программ (flash). Он также не использует таймаут при приеме неправильных данных, поэтому Вам нужно убедиться, что в плату Arduino на основе ATmega8 не отправляется никаких данных в течение 6..8 секунд, пока активен загрузчик.

Некоторые древние версии загрузчика работают на скорости 9600 бод (вместо 19200). Такая скорость удобна для плат, у которых нет кварцевого резонатора для стабилизации тактовой частоты микроконтроллера. Чтобы код скетча успешно загружался в таких условиях, нужно поменять параметр serial.download_rate в файле настроек (preferences file) на 9600.

Примечание: правильный выбор скорости обмена через порт USART — основной принцип работы как загрузчика, так и всего программно-аппаратного комплекса Arduino IDE. В частности, загрузчик платы Arduino может работать и на более высоких скоростях — например загрузчик Arduino Mega 2560 работает на скорости 115200 бод. Поэтому если есть какие-то проблемы в работе загрузчика, попробуйте протестировать ряд наиболее часто используемых стандартных скоростей UART (9600, 19200, 38400, 57600, 115200). Еще лучше, если Вы сразу определите правильную скорость обмена загрузчика с помощью осциллографа — см. длительность импульсов бит данных на ножке TX микроконтроллера, при правильно настроенной скорости их длительность должна совпадать с длительностью импульсов бит данных на ножке RX.

Платы Arduino сторонних производителей также используют загрузчик. Следует заметить, что есть 3 основных разновидности загрузчика — Arduino UART, USBasp, Atmel DFU.

Arduino UART. Первая, используемая наиболее широко, применяет для передачи данных UART (так называемый загрузчик Arduino UART). Этот загрузчик давно используется совместно с традиционными микроконтроллерами AVR, у которых на борту нет аппаратуры интерфейса USB. Промежуточным интерфейсом для USB служит отдельный аппаратный блок на специальном чипе (мост USB — TTL USART, который смонтирован на многих платах Arduino, а на некоторых платах его нет, и приходится использовать отдельные переходники USB — TTL UART).

Продвинутый загрузчик, поставляемый с Arduino-совместимыми платами Wulfden Freeduino Kits. Его код основан на коде загрузчика Arduino UART. «Lady Ada», Limor Fried из Adafruit Industries, сделала множество исправлений и добавлений в код загрузчика с целью получения универсальности (код загрузчика работает в любой версии Arduino IDE, скетчи запускаются сразу после включения питания, скетчи запускаются сразу после загрузки). Последние ревизии Brian Riley унифицировали исходный код для микроконтроллеров ATmega168, ATmega328 и ATmega644, так что получился один файл исходного кода и один файл makefile. Добавлено мигание светодиодом pin 13 LED, показывающее процесс загрузки. Этот загрузчик можно использовать на старых, новых (и самостоятельно изготовленных) платах, как оборудованных, так и не оборудованных функцией автосброса (со средой разработки Arduino-0009 и платами Arduino Diecimilia).

Дополнительную информацию по изменениям кода загрузчика можно найти на сайте Lady Ada (см. Bootloader for the Atmega328 site:learn.adafruit.com). Исходный код ADABOOT можно загрузить на сайте разработчика (см. ADABOOT — an ATmega Arduino(tm) compatible bootloader site:wulfden.org), или в одном архиве [9].

USBasp. Это загрузчик, часто используемый на платах metaboard, неофициально (и не полностью, см. [3]) поддерживаемых средой разработки Arduino. Его достоинство в том, что не нужно использовать отдельный мост USB — TTL UART для подключения к USB на традиционных микроконтроллерах. Это упрощает и удешевляет схему, и плату metaboard легче собрать в домашних условиях.

Atmel DFU. С некоторых пор среда разработки Arduino начала поддержку плат, на которых установлен микроконтроллер AVR со встроенной аппаратурой USB. На таких платах также нет отдельного моста USB — TTL UART. Но загрузчик конечно другой, поддерживающий периферию USB AVR, и протокол загрузки кода USB DFU компании Atmel. К сожалению, исходный код оригинальных загрузчиков от Atmel закрыт, есть только бинарники. Однако, поскольку протокол DFU опубликован, имеется альтернативная версия загрузчика с открытым исходным кодом — в библиотеке LUFA.

Подробную информацию по различным загрузчикам см. в таблицах 4, 5, 6 (врезка «На что нужно обратить внимание при программировании загрузчика»), и 7 (раздел «Исходный код загрузчиков Arduino»).

Чтобы записать загрузчик, Вам обязательно нужен внешний ISP-программатор [5]. Программатор подключается к программируемой платой Arduino через 6-выводный коннектор ISP [8], который обычно всегда установлен на плате Arduino. При подключении коннектора убедитесь, что он ориентирован правильным образом. Некоторые платы наподобие Arduino Mini требуют самостоятельного подключения коннектора проводами к контактам платы. Если есть сомнения при подключении, то обратитесь к схеме платы и её описанию.

Загрузчик можно записать прямо из среды разработки Arduino (Tools -> Burn Bootloader), перед этим нужно сначала выбрать тип программатора и тип платы в меню Tools.

Выбор загрузчика. Поскольку могут быть различные варианты реализации целевой системы — может быть применена разная модель микроконтроллера (ATmega168, ATmega328, ATmega32U4 и т. п.). Загрузчики для разных моделей микроконтроллеров могут быть несовместимыми друг с другом.

Частота кварцевого резонатора. Обязательно убедитесь, что прошиваемый Вами загрузчик точно соответствует рабочей частоте системы. Рабочая частота микроконтроллера обычно зависит от конфигурации фьюзов и от частоты внешнего кварцевого или керамического резонатора (чаще всего применяют кварцевые резонаторы на 8 или 16 МГц, но могут быть и другие варианты).

Фьюзы. Для правильного функционирования загрузчика важны 2 аспекта, которые конфигурируются фьюзами — выбор размера секции загрузки (фьюзы BOOTSZ1, BOOTSZ0), разрешение работы загрузчика (фьюз BOOTRST), а также конфигурирование тактовой частоты (фьюзы, управляющие генератором тактовой частоты и прескалером — CKDIV8, SUT1, SUT0, CKSEL3. .0).

Если Вы неправильно прошьете фьюзы BOOTSZ1, BOOTSZ0, BOOTRST, то код загрузчика не будет запускаться, и загрузчик работать не будет. Точно также если Вы неправильно сконфигурируете фьюзами тактовый генератор и прескалер, то микроконтроллер может заработать на той частоте, на которую загрузчик не рассчитан, и работоспособность загрузчика также будет нарушена. Для вычисления правильного значения фьюзов Вам поможет калькулятор фьюзов [10].

В таблице я привел самые популярные загрузчики и конфигурации для них. Фьюзы указаны в шестнадцатеричном значении, где HFUSE это старший байт фьюзов, LFUSE младший байт фьюзов, EFUSE байт расширенных фьюзов.

Таблица 4. Загрузчики Arduino UART.

AVR Тактовая частота Прошивка Размер секции загрузки, байт Фьюзы (HEX)
ATmega8 8 ArduinoBOOT-mega8-8MHz. hex 1024 HFUSE=CA
LFUSE=DF
16 ArduinoBOOT-mega8-16MHz.hex
ATmega168 8 ArduinoBOOT-mega168-8MHz.hex 2048 HFUSE=DD
LFUSE=E2
EFUSE=00
16 ArduinoBOOT-mega168-16MHz.hex
ATmega328 8 ArduinoBOOT-mega328-8MHz.hex 2048 HFUSE=DA
LFUSE=FF
EFUSE=05
16 ArduinoBOOT-mega328-16MHz.hex 2048

Прошивки загрузчиков Arduino можно найти в папке, где установлена система разработки Arduino, обычно это папка с полным путем наподобие c:\Program Files\Arduino1.0.6\hardware\arduino\bootloaders. Там же можно найти исходный код загрузчиков. Также готовые прошивки и исходный код всех загрузчиков можете скачать по ссылке [9], см. папку arduino\bootloaders\HEX архива, и ищите там имена файлов прошивок, указанные в таблицах 4, 5, 6 (имя файла прошивки указано в столбце Прошивка).

Таблица 5. Загрузчики Atmel DFU.

AVR Тактовая частота Прошивка Размер секции загрузки, байт Фьюзы (HEX)
ATmega32U4 8 BootloaderDFU-mega32u4-8MHz.hex 4096 HFUSE=D8
LFUSE=DE
EFUSE=F3
16 BootloaderDFU-mega32u4-16MHz.hex

Таблица 6. Загрузчики USBasp.

AVR Тактовая частота Прошивка Размер секции загрузки, байт Фьюзы (HEX)
ATmega168 12 USBaspLoader-mega168-12MHz. hex 2048 HFUSE=D6
LFUSE=DF
EFUSE=00
16 USBaspLoader-mega168-16MHz.hex
20 USBaspLoader-mega168-20MHz.hex
ATmega328 12 USBaspLoader-mega328-12MHz.hex HFUSE=DA
LFUSE=F7
EFUSE=03
16 USBaspLoader-mega328-16MHz.hex
20 USBaspLoader-mega328-20MHz.hex

Загрузчик (bootloader) — одна из основных вещей, что отличает Arduino от простого микроконтроллера AVR компании Atmel. Когда Вы собираете свою плату, или когда случайно купили на ebay плату, не прошитую загрузчиком, то Вам нужен внешний программатор ISP, чтобы прошить в память микроконтроллера загрузчик. Но когда Вы прошили загрузчик, то можно программатор ISP положить на полку — больше он не понадобится (за исключением каких-то специальных случаев), потому что дальше перешивать память программ микроконтроллера удобнее с помощью загрузчика.

Загрузчик [2] это по сути маленькая программа, предназначенная для только одной цели — перепрошить микроконтроллер программой пользователя. Загрузчик размещен в старших адресах пространства памяти программ (FLASH), а программа пользователя — в младших адресах (начиная с нулевого адреса). На рисунке показан типичный пример распределения памяти программ (FLASH) микроконтроллера ATmega328.

Примечание: если у Вас есть программатор ISP [5], то Вы можете настроить среду разработки Arduino так, чтобы использовать для загрузки именно программатор, а не bootloader. Достоинство такого метода загрузки в том, что Вы можете полностью задействовать всю доступную память программ (FLASH) микроконтроллера (потому что загрузчик уже не используется, и его область памяти программ свободна для использования).

Микроконтроллер Arduino сконфигурирован фьюзами так, чтобы при запуске системы (включение питания, сброс) управление всегда получал загрузчик. Затем загрузчик некоторое время ждет (1. .2 секунды) загрузки программы пользователя, и если загрузка не началась, то запускает программу пользователя (передает управление на адрес 0). Таким образом, всегда можно при желании перезаписать программу пользователя, и тем самым обновить или полностью изменить функционал устройства. Код загрузчика при этом остается нетронутым.

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

[Готовые прошивки загрузчика Arduino]

См. архив по ссылке [9] и таблицы 4, 5, 6 во врезке «На что нужно обратить внимание при программировании загрузчика».

[Исходный код загрузчиков Arduino]

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

AVR bootloader: https://github.com/arduino/Arduino/tree/master/hardware/arduino/avr/bootloaders
SAMD bootloader: https://github.com/arduino/ArduinoCore-samd/tree/master/bootloaders/zero

В таблице я привел описание самых популярных загрузчиков, которые используются в Arduino-совместимых платах. Исходный код загрузчиков вместе с готовыми прошивками также можно скачать по ссылке [9].

Таблица 7. Разновидности загрузчиков, которые можно использовать для платформы разработки Arduino.

Название AVR Описание
Arduino UART ATmega8, ATmega168, ATmega328 и другие Используется для большинства плат Arduino, когда код загружается через мост USB-UART.
Atmel DFU ATmega32U4 и другие Применяется для случаев, когда микроконтроллер AVR имеет на борту аппаратный интерфейс USB. Загрузчик основан на протоколе Atmel DFU Flip и открытой библиотеке LUFA.
USBasp ATmega168, ATmega328 Применяется для плат metaboard. Загрузчик основан на открытой библиотеке V-USB, эмулирует поведение популярного программатора USBasp.

Как компилировать. Для компиляции Вам потребуется тулчейн AVR-GCC, доступный для большинства операционных систем — Linux, Mac OS, Windows. На операционной системе Windows тулчейн можно получить, если скачать и установить пакет WinAVR или среду разработки Atmel Studio.

Компилируется загрузчик командами утилиты make. Обычно для этого нужно зайти в каталог с исходным кодом загрузчика, и выполнить 2 команды:

После этого в текущем каталоге появится файл с расширением HEX — готовая прошивка загрузчика, которую нужно записать в память микроконтроллера с помощью обычного ISP-программатора [5] (не забудьте также правильно установить фьюзы микроконтроллера!).

Инструкции по компиляции и настраиваемым опциям можно обычно получить, изучая содержимое файла Makefile проекта загрузчика, и сопутствующие файлы документации readme.txt.

Процесс получения прошивки загрузчика состоит из предварительного конфигурирования Makefile, где настраиваются опции (если это необходимо) и последующей компиляции командами make clean и make. Конечно же, для компиляции у Вас должен быть установлен тулчейн (компилятор AVR GCC и библиотеки). На операционной системе Windows тулчейн можно получить, если установить пакет разработки WinAVR или Atmel Studio.

Когда нужно получить загрузчик для Arduino, то чаще всего (в зависимости от типа платы или Вашей конструкции) это микроконтроллер ATmega328, или реже ATmega168, ATmega8, ATmega32U4. Поэтому сначала нужно выбрать, какой загрузчик использовать. Почти все загрузчики можно найти в папке установки Arduino c:\Program Files\Arduino1.0.6\hardware\arduino\bootloaders, распределенные по подкаталогам atmega8, atmega и другим.

Выбор загрузчика. Если Вам нужен загрузчик для ATmega8, то его исходный код и Makefile находится в папке atmega8. Если нужен загрузчик для ATmega168 или ATmega328, то см. папку atmega. Если нужен загрузчик для ATmega32U4, то его можно найти в библиотеке LUFA, см. папку Bootloaders\DFU.

Примечание: исходный код и прошивки загрузчиков можно скачать по ссылке [9].

Конфигурирование загрузчика для ATmega8. Зайдите в папку atmega8, и откройте текстовым редактором файл Makefile. Вам нужно проверить следующие опции:

• DIRAVR. Эта опции указывают на каталог установки тулчейна (в этом каталоге находится папка bin с исполняемыми файлами для компилятора и других утилит, и папка include для заголовочных файлов библиотек). Если у Вас установлен тулчейн WinAVR, то значение этой опции должно быть наподобие c:\WinAVR-20100110\avr. Если у Вас установлен тулчейн в составе Atmel Studio, то значение этой опции должно быть наподобие «c:\Program Files\Atmel\AVR Tools\AVR Toolchain» (должны быть кавычки, потому что в составе пути есть пробелы).

• DEFS. В этой опции указана тактовая частота системы через значение макропеременной F_CPU. Например, если указана опция:

DEFS = -DF_CPU=8000000 -DBAUD_RATE=19200

то это означает, что прошивка будет скомпилирована в расчете на тактовую частоту 8 МГц. 8 МГц обычно используется, если работает внутренний RC-генератор микроконтроллера AVR. Если у Вас используется другая тактовая частота, задаваемая внешним кварцевым резонатором, то укажите рядом с -DF_CPU= тактовую частоту в Герцах. Чаще всего используется тактовая частота 16 МГц, т. е. нужно указать -DF_CPU=16000000.

Примечание: важно указать правильную тактовую частоту потому, что к этому значению привязана настройка последовательного порта UART, через который загрузчик получает код от хоста (из системы разработки Arduino IDE с помощью вызова утилиты программирования AVRDUDE). Неправильная настройка UART приведет к тому, что загрузчик не сможет получить код программы пользователя, и микроконтроллер не будет перепрошиваться через загрузчик.

На этом конфигурирование загрузчика можно считать законченным. Для получения прошивки загрузчика осталось выполнить последовательность из двух команд:

После компиляции получится файл ATmegaBOOT.hex, который можно с помощью программатора ISP записать в память микроконтроллера ATmega8. Не забудьте после программирования загрузчика правильно установить фьюзы микроконтроллера (см. таблицу 4).

Конфигурирование загрузчика для ATmega168 или ATmega328. Зайдите в папку atmega, и откройте текстовым редактором файл Makefile. Здесь все устроено несколько сложнее, потому что этот Makefile универсальный, он предназначен для получения прошивок для множества различных плат Arduino:

Таблица 8. Выбор цели (target) в Makefile для ATmegaXX8.

Плата Arduino Target
Arduino LilyPad lilypad
Arduino Pro или Arduino Pro Mini pro8, pro16 или pro20 в зависимости от используемой тактовой частоты
Arduino Diecimila diecimila
Arduino NG ng
Своя плата на ATmega328 atmega328
Arduino Pro на ATmega328P без кварца atmega328_pro8
Arduino Mega mega

Примечание: цель Target, указанная в таблице, подставляется как опция команды make при компиляции прошивки:

make clean
make < тут надо указать Target >

Первое, что Вам нужно сделать, это выбрать цель для компиляции (вариант из столбца Target таблицы 6) в зависимости от платы, которая у Вас используется. Предположим, что у Вас самодельная плата на микроконтроллере ATmega328, для которой Вы собираетесь сделать свой загрузчик. Тогда цель для компиляции у Вас будет atmega328, прошивка получается выполнением 2 команд:

make clean
make atmega328

Если у Вас используется другая тактовая частота, то проверьте значение макропеременной AVR_FREQ (по умолчанию для цели atmega328 задана тактовая частота 16 МГц: AVR_FREQ = 16000000L). После компиляции получите прошивку ATmegaBOOT_168_atmega328.hex, которую можно записать в память Вашего микроконтроллера с помощью программатора ISP. Внимание, не забудьте также правильно установить фьюзы микроконтроллера (см. таблицу 4).

Для подключения к компьютеру недорогих плат наподобие Arduino Mini понадобится отдельный внешний переходник для моста USB — TTL UART.

Переходник USB TTL COM-port (он подключается с одной стороны к 6-pin коннектору FTDI, а с другой стороны к компьютеру по USB) можно купить готовый. Обычно такой переходник сделан по простейшей схеме на основе чипа FT232 (компания FTDI) или CP210x (компания Silicon Labs). Драйвер для переходника можно скачать с сайта соответствующей компании. Хорошие переходники USB to TTL Serial Cable FTDI (или на чипе CP210x) можно купить на eBay, dealextreme или aliexpress, есть даже предложения с бесплатной доставкой. При покупке выбирайте 5V версию (иногда бывают версии на 3.3V). Самый лучший вариант – когда можно выбрать перемычкой рабочие уровни порта TTL RS-232 (3.3V или 5V). Если уровни сигналов на переходнике USB to TTL и отлаживаемом устройстве не совпадают, то понадобятся последовательно включенные резисторы номиналом около 1…2 кОм.

[Ссылки]

1. Arduino Bootloader Development site:arduino.cc.
2. Загрузчики (bootloader) для микроконтроллеров AVR.
3. Arduino: что там внутри? (FAQ).
4. AVR109: самопрограммирование AVR.
5. Программаторы для AVR.
6. USBtinyISP — AVR programmer & SPI interface site:adafruit.com.
7. Parallel Port Programmer site:arduino.cc.
8. Цоколевки коннекторов ISP.
9. 150117arduino-bootloaders.zip — исходный код и готовые прошивки загрузчиков Arduino.
10. Engbedded Atmel AVR® Fuse Calculator site:engbedded.com.
11. AVR Studio 4.13, 4.14, 4.19, 5.0 и не только.

Arduino прошивка загрузчика (bootloader) на новый чип Atmega 328P-PU / 168 через Bit-Bang на самой плате Arduino в Ubuntu 14 c помощью avrdude версии 6.1

Доигрался я со своей Ардуинкой, и сжёг несколько пинов у чипа =))

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

Благо на Ардуинке присутствует микросхема от ftdi (ft232rl) благодаря которой Ардуинку можно подключать через usb, а в системе появляется виртуальный com-порт,

но у неё есть ещё один режим работы так называемый Bit-Bang т.е. можно напрямую дёргать её ножки. Этим мы и воспользуемся.

Чип Atmega 328 а так же 168 и большинство других прошиваются через протокол SPI, на самой ардуинке присутствует разъём для этого под названием SPI или ICSP

так же выведен разьём микросхемы ft232rl (под названием x3 или как то так с четырьмя ножками)

Всё, что нам нужно для заливки прошивки, это их соединить по схеме:

 

 

Если чип прошивается на самой плате, то подключать питающую линию не нужно.  (да, можно прошивать чип ардуинки  с другой ардуинки)

Выглядит примерно так:

 

Фото честно спёрты с robocraft.ru =)

Вот впринципе и всё =)

Дальше устанавливаем avrdude командой:

sudo apt-get install avrdude

Потом открываем консольку и переходим в каталог установленной Arduino IDE:

cd /opt/Arduino/hardware/arduino/avr/bootloaders/atmega

Узнаем как там чип:

sudo avrdude -c arduino-ft232r -p m328p -P ft0 -U hfuse:r:-:h -B 4800

Если вывод показывает что всё прошло успешно, то заливаем прошивку:

sudo avrdude -q -C /etc/avrdude.conf -p m328p -c arduino-ft232r -P ft0 -B 4800 -e -U flash:w:ATmegaBOOT_168_atmega328.hex

Ну и на последок прошиваем фьюзы:

sudo avrdude -C /etc/avrdude.conf -p m328p -c arduino-ft232r -B 4800 -u -U lock:w:0x3f:m -U efuse:w:0x05:m -U hfuse:w:0xDA:m -U lfuse:w:0xFF:m

Вот и всё =) Отсоединяем провода, перетыкаем usb и можно залить простенький скетч.

За что какие параметры отвечают можно прочитать вызвав «avrdude -?»
[warning] Для чипа Atmega168 прошивка будет ATmegaBOOT_168_diecimila.hex
фьюзы:-Uefuse:w:0x00:m -Uhfuse:w:0xdd:m -Ulfuse:w:0xff:m -Ulock:w:0x0F:m
чип: m168

Для Atmega8 прошивка будет в папке atmega8 файл ATmegaBOOT.hex
фьюзы: -Ulfuse:w:0xdf:m -Uhfuse:w:0xCA:m
чип: m8
В Arduino IDE выбираете плату Arduino NG or older и чип Atmega8

[/warning]

 

Не забыть: сентября 2016


http://blog.petrockblock.com/2012/05/19/usb-keyboard-with-arduino-and-v-usb-library-an-example/

https://florianfries.me/en/arduino-as-a-keyboard.html

http://www.vladcazan.com/electronics/arduino-keyboard-emulator
http://robocraft.ru/blog/1002.html

Посте того, как сгорел мой «ноутбук», я вспомнил про свой старый системник (точнее материнку и блок питания).
Достав его из кучи барахла, заметил что кроме мышки нету никакого устройства ввода, немного посидел,и начал рыть инет. Так как у меня в асоррименте только Arduino UNO R3 смотрел статьи только с ней. Многие делают клавиатуру на Arduino micro (ну там все просто).

В поисках наткнулся на статью где ардуино играет в 2048. Так как для упавления игрой надо нажимать клавиши, нужно превратить ардуино в клавиатуру.То что надо!


Нам понадобится:
  • Arduino UNO R3
  • Перемычка
  • Arduino IDE
  • Фирменная утилита Atmel – Flip
  • Архив с прошивками и примером + библиотека
Цель: написать скетч для Arduino UNO, который будет эмулировать нажатие клавиш стрелок на клавиатуре.
Алгоритм наших действий:
  • Пишем скетч с нужным функционалом и заливаем в МК ATmega328
  • Прошиваем загрузчик Arduino, usb контроллер ATmega16U2
Для эмулирования нажатий клавиш я использовал библиотеку HIDKeyboard.
Что ж теперь переходим к самому интересному – будем превращать Arduino UNO в HID устройство, а конкретней в USB клавиатуру.
Немного теории.
Прошивка загрузчика — для начала нужно перевести Arduino в режим Device Firmware Update или в более часто используемом варианте DFU. Он служит для перепрошивки контроллера выполняющего роль конвертера serial to usb.
Как известно, основное отличие Arduino UNO от предыдущих моделей плат Arduino заключается в наличие второго контроллера ATmega8U2, на смену аппаратному конвертору USB COM (FT232R). Преимуществом данного решения является возможность замены прошивки в интерфейсном контроллере с целью эмуляции произвольного устройства при подключении Arduino к ПК (накопителя, hid-устройства и т.д.). Как это сделать? У интерфейсного контроллера имеется режим DFU – прошивка контроллера ATmega8U2 через подключение через USB. Почти как прошивка центрального контроллера Arduino. Для этого можно воспользоваться фирменной утилитой Flip. Для того чтоб перевести контроллер в этот режим программирования потребуется небольшая аппаратная модернизация Arduino.
Для  Arduino UNO R3 достаточно поставить перемычку.

После этих действий компьютер обнаружит новое устройство и попытается самостоятельно поставить драйвера, но у него ничего не получится. Настало время установить фирменную утилиту Flip от Atmel. Открываем диспетчер задач и видим новое устройство Arduino Uno DFU.

Выберем драйвер из папки недавно установленной утилиты FLIP. В итоге у нас появится новое устройство – ATmega16U2. В дальнейшем при подключении Arduino, устройство будет определять как USB устройство. Теперь нам следует залить HEX файл с инструкциями USB клавиатуры. Чтоб компьютер в дальнейшем распознавал нашу Arduino как usb клавиатуру. Запускаем FLIP.

  • Выбираем в меню Device > Select > ATmega16U2
  • Выбираем в меню Setting > Communication > USB
  • Жмем Open берем прошивку
  • Приступаем к прошивке, жмем Run
По окончании процесса прошивки можно закрыть программу и проверить, как работает устройство. В итоге мой Arduino успешно играл в 2048 почти неделю. Даже на ночь его не выключал. В подтверждение вот мой результат.

Вот так можно превратить Arduino UNO в HID-устройство. Кстати можно не только играться в игры но и разыграть друга, подключив к его компьютеру устройство, которое запустит блокнот и будет писать там анекдоты, либо запускать команды, ведь клавиатура это главный пульт управления компьютером. К сожалению нельзя применить этот метод к плате Arduino Nano. Как уже говорилось ранее – второй контроллер Arduino UNO (ATmega8U2) используется в роли конвертера USB to Serial для определения компьютером Arduino UNO как USB устройство. Можно сделать вывод: реализовать этот метод, без посторонних устройств, возможно лишь при наличии на плате Arduino микроконтроллера запрограммированного как USB-to-serial конвертер. Но что делать, если у вас Arduino Nano или иная плата без конвертера USB to Serial? В таком случае можно купить отдельно конвертер подобный этому.

Чтобы вернуть Arduino UNO к жизни надо перепрошить ATmega16U2
Найти прошивку можно тут:

C:\Program Files\Arduino\hardware\arduino\avr\firmwares\atmegaxxu2
На всякий случай собрал весь софт который использовал в

  — Arduino-HID-Bot-2048.ino — Скетч для Arduino UNO для игры в 2048.
   
  — Arduino-keyboard.hex       — этот hex файл заливаем при помощи FLIP для перевода arduino
в режим USB клавиатуры (но сначала нужно залить основной скетч).

прошиваем вот так!

шьем по isp

делаем клавиатуру

avrdude -p m16 -b 19200 -F -P COM4 -c avrisp -U flash:w:Arduino-keyboard-0.3.hex -U lfuse:w:0xFF:m -U hfuse:w:0xD9:m -U efuse:w:0xF4:m -U lock:w:0x0F:m

«-p m16» это код atmega16u2

делаем копию arduino uno R3

avrdude -p m328p -b 19200 -c avrisp
 -P COM13 -e -U flash:w:ATmegaBOOT_168_atmega328_pro_8MHz.hex

   
  — Arduino-usbserial-uno.hex — этот файл нужен для того чтоб обратно вернуть Arduino UNO
в стандартный режи работы, чтоб она определялась в ПК как виртуальный COM-порт
в котром мы можем загружать скетчи. 
https://vk.com/doc5127466_437873517

http://www.atmel.com/tools/FLIP.aspx

 Дополнительно:

 http://pythoneiro.blogspot.ru/2015/04/transformando-seu-arduino-uno-em-um-usb.html

Перезапись загрузчика в Arduino Pro Mini

Arduino Pro Mini весьма привлекательная плата из семейства Ардуино в первую очередь маленькими габаритами и ценой.

Например на АЛИ можно купить ее меньше чем за $2

Зачем перезаписывать загрузчик

  1. Если загрузчик «слетел» и плата не прошивается. Выдает всегда: «avrdude: stk500_recv(): programmer is not responding».
  2. Если вы решили разобраться со сторожевым таймером, как в этой статье, и использовать для этого OPTIBOOT.
  3. Если нужно переустановить ФЬЮЗ-биты, например, как в моем случае, отключить контроль напряжения питания для того чтобы запитать плату от 3.3В
  4. Или же вы решили совсем убрать загрузчик с целью экономии памяти и увеличения скорости загрузки, тогда вместо загрузчика заливается ваша программа по нулевому адресу.

Что для этого нужно

Подключение

Все Arduino имеющие 6-пиновый IСSP разъем подключаются к программатору через такой переходник

Arduino Pro Mini ICSP на плате не имеет, поэтому подключаем проводками по следующей схеме

Подключаем программатор к USB компьютера, устанавливаем драйвер USBAsp (если он еще не установлен) и запускам среду Arduino IDE

Выбираем тип программатора USBASP

Выбираем тип контроллера. Если мы хотим просто восстановить загрузчик — выбираем Arduino Pro Mini 5В (или 3.3В в зависимости от платы). Если нам нужен OPTIBOOT без лишней головной боли — выбираем Arduino UNO

 

Затем жмем «Записать загрузчик»

 

Если все подключено и настроено правильно, то программатор довольно долго мигает лампочками.

Настройка параметров загрузчика

Последнее время применяю Aduino Pro Mini 5В с модулями NRF24L01+, требующих для питания 3.3В. Для питания таких плат от низкого напряжения нужно отключить во фьюзах контроль напряжения питания. Для этого открываем файл c:\Program Files (x86)\Arduino\hardware\arduino\boards.txt и прописываем в нем характеристики желаемой прошивки:

atmega328_16.name=Atmega328_16 (3.3V, 16 MHz external) atmega328_16.upload.protocol=arduino atmega328_16.upload.maximum_size=32256 atmega328_16.upload.speed=115200 atmega328_16.bootloader.low_fuses=0xff atmega328_16.bootloader.high_fuses=0xde atmega328_16.bootloader.extended_fuses=0x07 atmega328_16.bootloader.path=optiboot atmega328_16.bootloader.file=optiboot_atmega328.hex atmega328_16.bootloader.unlock_bits=0x3F atmega328_16.bootloader.lock_bits=0x0F atmega328_16.build.mcu=atmega328p atmega328_16.build.f_cpu=16000000L atmega328_16.build.core=arduino atmega328_16.build.variant=standard

atmega328_16.name=Atmega328_16 (3.3V, 16 MHz external)

atmega328_16.upload.protocol=arduino

atmega328_16.upload.maximum_size=32256

atmega328_16.upload.speed=115200

atmega328_16.bootloader.low_fuses=0xff

atmega328_16.bootloader.high_fuses=0xde

atmega328_16.bootloader.extended_fuses=0x07

atmega328_16.bootloader.path=optiboot

atmega328_16.bootloader.file=optiboot_atmega328.hex

atmega328_16.bootloader.unlock_bits=0x3F

atmega328_16.bootloader.lock_bits=0x0F

atmega328_16.build.mcu=atmega328p

atmega328_16.build.f_cpu=16000000L

atmega328_16.build.core=arduino

atmega328_16.build.variant=standard

После этого шьем выбираем тип контроллера «Atmega328_16 (3.3V, 16 MHz external)» и пишем загрузчик.

Программируя «перешитый» Arduino Pro Mini через стандартный порт не нужно забывать устанавливать нужный тип контроллера

со своего сайта.

Создание и загрузка файлов .HEX в Arduino

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

  • Как создать файл .HEX из файла .INO.
  • Какое программное обеспечение мы можем использовать.
  • Как загрузить этот шестнадцатеричный файл в Arduino.

Файлы HEX и INO:

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

Файл .INO также известен как файл, совместимый с Arduino, который можно редактировать с помощью Arduino IDE. Значит, Программное обеспечение, созданное для использования с Arduino. Эти файлы написаны на языке компоновки C/C++.

Требуется файл .HEX:

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

Пример: INO-файл:

HEX-файл:

Таким образом, это похоже на кодирование ваших файлов, но есть несколько доступных программ, с помощью которых мы можем извлечь шестнадцатеричные файлы непосредственно из микроконтроллера и загрузить их в любой другой микроконтроллер. Но мы не можем их редактировать. А основная программа остается вроде как авторской.

Генерация HEX-файлов:

Мы начинаем с самого простого примера Blink,

  • Перейдите в Arduino IDE и откройте написанную программу. Не используйте предварительно написанные программы из примеров.Но вы можете скопировать их в новую вкладку, а затем сохранить как файл .INO.

запуск с программой мерцания

  • В разделе настроек в меню «Файл» отметьте кнопку компиляции.

Отметьте кнопку компиляции

  • Проверьте свой скетч, а не загружайте его, только проверяйте.
  • Найдите формат .HEX в разделе компиляции и скопируйте адрес
  • Вставьте адрес на вкладке поиска в проводнике, обязательно отметьте опцию показа скрытых файлов.
  • Затем скопируйте файл .HEX из этой временной папки и вставьте его на рабочий стол.

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

Программное обеспечение для загрузки файла .HEX в микроконтроллер Arduino:

Мы используем X-loader для прошивки файлов .HEX в плату Arduino; это программное обеспечение с открытым исходным кодом, и его можно загрузить прямо отсюда.

Программное обеспечение для прошивки шестнадцатеричных файлов

  • Извлеките программное обеспечение из файлов и запустите его.
  • Затем найдите файл или выберите файл .HEX, который вы хотите загрузить.
  • Подключите плату Arduino к ПК.
  • Выберите COM-порт и микроконтроллер.
  • Не изменять скорость передачи данных и загружать файл.

А это загрузит файл, а этот X-loader поддерживает 4-5 микроконтроллеров перечисленных в списке.

Atmega168, Atmega2560-Mega, Atmega328p, Arduino Nano и UNO.

Если вы хотите использовать любой другой микроконтроллер, то AVRDUDESS может сделать эту работу. В будущем мы также задокументируем отдельный учебник по этому вопросу. Для правильных инструкций и лучшего понимания смотрите это видео.

видео:

Для хинди попробуйте это:

JLCPCB:

У меня есть свои собственные платы Arduino благодаря JLCPCB, чтобы программировать их/устранять неполадки и учиться на них. Если вы хотите сделать свою собственную плату, сервис JLCPCB SMT может стать решением.

JLCPCB — один из самых популярных производителей печатных плат. Цена всего $2 за 2-, 4- и 6-слойную печатную плату. Они только что запустили новую фиолетовую паяльную маску, алюминиевую печатную плату и услугу 3D-печати по очень низкой цене. Качество печатных плат не скомпрометировано любой ценой. Проверьте их прямо сейчас отсюда.

JLCPCB также предоставляет купоны для новых пользователей и вознаграждения за регистрацию в размере до 30 долларов США. Итак, проверьте их отсюда . Зарегистрируйтесь по этой ссылке, чтобы получить купоны на бесплатную сборку печатных плат. Получите печатную плату от 2 до 6 слоев всего за 2 доллара, трафарет и услугу сборки печатной платы всего за 7 долларов.

Для ПК: https://jlcpcb.com/SSR Для мобильного телефона: http://m.jlcpcb.com/ssi

Вот несколько интересных проектов, которые могут вам понравиться:

1) Как сделать клон Arduino Uno доска.

2) Как запрограммировать Arduino с помощью смартфона.

3) Проблемы и решения платы клонирования Arduino Nano.

4) Как сделать измеритель индуктивности с помощью Arduino.

5) Осциллограф Raspberry Pi-PICO.

См. мой проект осциллографа

Думаю, вам понравилась моя работа, следите за обновлениями.Подпишитесь на нас в Instagram (sagar_saini_7294) и на hackaday.

пожалуйста поддержите нас- Никаких пожертвований, просто подписывайтесь и оставляйте комментарии.

Загрузка HEX-файлов в ATtiny85 с помощью Arduino и AVRdude — проекты в области электротехники и вычислительной техники

Используйте Arduino UNO для загрузки HEX-файла в Atmel ATtiny85. В этом уроке я использую 64-битную версию Windows 7.

Источники:

Вам понадобится:
ОБОРУДОВАНИЕ:

  • Arduino UNO (или что-то подобное)
  • ATtiny85 (или аналогичный целевой микропроцессор Atmel
  • проволочные перемычки

ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ:

  • Среда Arduino (последняя версия)
  • AVRdude (последняя версия)
  • тестовый HEX-файл (я использовал шестнадцатеричный файл TV-B-Gone)

Ардуино

Если вы похожи на меня, вы провели бесчисленное количество часов с программистами бюджетных интернет-провайдеров (такими как AVR Pocket Programmer) и не имели большого успеха при загрузке файлов HEX в ATtiny85.К счастью, если у вас есть Arduino, вам не нужен еще один интернет-провайдер. Превратите свой Arduino в интернет-провайдера, выполнив следующие шаги:

  1. Подключите плату как обычно для загрузки кода.
  2. Выберите «Файл» > «Примеры» > «ArduinoISP
  3. ».
  4. Загрузите этот скетч в Arduino

Если вам нужно сгенерировать HEX-файл в Arduino, вы можете сделать это, удерживая «Shift» и нажав «Подтвердить». Если скетч компилируется правильно, предпоследняя строка вывода будет именем пути к HEX-файлу.Например, с помощью простой программы Blink вывод должен быть примерно таким:

.

C:\DOCUME~1\user\LOCALS~1\Temp\build2695350595880978373.tmp\Blink.cpp.hex

Скопируйте это местоположение, потому что оно понадобится вам позже, если у вас еще нет HEX-файла для загрузки.

Наконец, обратите внимание на COM-порт, используемый Arduino. Мой компьютер использует COM3. Это понадобится вам позже.

Оборудование

Используя макетную плату, выполните следующие соединения между Arduino и ATtiny85.Используйте картинку для справки. (Источник). *Обратите внимание на конденсатор 10 мкФ между RESET и Gnd на Arduino .
  • ATtiny Pin 7 на Arduino Pin 13 (SCK)
  • ATtiny Pin 6 на Arduino Pin 12 (MISO)
  • ATtiny Pin 5 на Arduino Pin 11 (MOSI)
  • ATtiny Pin 1 — Arduino Pin10 (СБРОС)
  • ATtiny Pin 8 к Arduino +5 В (Vcc)
  • ATtiny Pin 4 на Arduino GND (земля)

АВРчувак

Пока все хорошо, теперь пришло время для AVRdude (при условии, что он уже установлен, если нет, нажмите здесь для получения инструкций).Откройте командную строку (Пуск >> введите «CMD», нажмите Enter). Перейдите в каталог, содержащий файл HEX, набрав «cd», а затем каталог, например:

cd  C:\users\folder_content_HEX_file

Теперь, когда вы находитесь в правильном каталоге, все, что осталось, это загрузить файл в ATtiny85. Для этого используйте следующую команду:

avrdude -P comport -b 19200 -c avrisp -p attiny85 -v -e -U flash:w: hexfilename .шестнадцатеричный

, заменив comport на правильный comport (например, COM3) и hexfilename на правильное имя. Нажмите Enter, и если все планеты выровняются, код будет успешно загружен. Это может занять несколько секунд.

Отладка:

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

Обязательно ознакомьтесь…

Заключительные замечания

Я придумал этот метод, объединив два метода, о которых читал.Мне не удалось найти туториал, в котором бы это объяснялось очень четко, поэтому я надеюсь, что это поможет. Пожалуйста, прочтите источники для получения дополнительной информации о программировании этих устройств.

Нравится:

Нравится Загрузка…

Родственные

Arduino загружает шестнадцатеричный файл прошивки из командной строки cli в Linux — Энрике Латоррес

На основании этого: https://forum.arduino.cc/index.php?topic=417659.0

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

Просто подключите Arduino с помощью USB-кабеля, затем настройте все, чтобы загрузить скрипт на эту плату. Вы можете выбрать Файл |Примеры | 01.Основы | Поморгайте и все будет хорошо. Выберите свою плату Arduino в Arduino IDE Tools | Меню доски. Затем выберите порт платы Arduino в меню Инструменты | Меню порта. Скорее всего, он будет уже выбран.В файле | Появится форма настроек.

Примерно в середине слева у вас есть метка «Показывать подробный вывод во время» и два флажка. «[] компиляция» и «[] загрузка». Проверьте этот последний «[] upload». Когда вы будете готовы, просто выполните команду компиляции и загрузки в среде IDE. Эскиз | Загрузить.

В моем случае с Arduino UNO он отвечает следующим образом:

 Sketch использует 924 байта (2%) места для хранения программ. Максимум 32256 байт.
Глобальные переменные используют 9 байт (0%) динамической памяти, оставляя 2039 байт для локальных переменных.Максимум 2048 байт.
/home/enrique/.arduino15/packages/arduino/tools/avrdude/6.3.0-arduino17/bin/avrdude-C/home/enrique/.arduino15/packages/arduino/tools/avrdude/6.3.0-arduino17/etc /avrdude.conf -v -patmega328p -carduino -P/dev/ttyUSB0 -b115200 -D -Uflash:w:/tmp/arduino_build_260352/Blink.ino.hex:i
... 

Если ваша плата Arduino Mega, параметр -p может выглядеть так: -patmega2560

Вы копируете строку вызова avrdude /home/… /bin/avrdude и меняете место шестнадцатеричного файла на полный путь к вашему собственному шестнадцатеричному файлу.И донде!

Вы можете автоматизировать эту линию, написав скрипт вида:

 #!/бин/баш
# avrdudeload.sh
/home/.../bin/avrdude -C/home/.../etc/avrdude.conf -v -patmega328p -carduino -P/dev/ttyUSB... -b115200 -D -Uflash:w:$1: я 

С уважением

Автономный программатор чипов Atmega для загрузки файлов .hex

Этот проект предназначен для того, чтобы вы могли программировать чипы Atmega без необходимости покупать специальный программатор ICSP. Вместо этого он использует плату Uno (или аналогичную) в качестве программатора.

Скетч для программирования работает на Uno. Шестнадцатеричный (двоичный) файл для загрузки в целевой чип был скомпилирован в Arduino IDE (интегрированная среда разработки) и скопирован на SD-карту.

(микро) SD-карта вставляется в переходную плату Micro SD, аналогичную этой:

Эти платы можно приобрести примерно за 15 долларов США. затем можете переместиться на ваш ПК/Mac/Linux для загрузки или скачивания.шестнадцатеричные файлы.

Поддержка Arduino Ethernet Shield

Версия скетча 1.27 и выше позволяет использовать Arduino Ethernet Shield (с разъемом для карты micro-SD) вместо использования адаптера SD-карты.

Если вы используете Ethernet Shield, вы должны сделать USE_ETHERNET_SHIELD истинным, немного выше скетча, следующим образом:

 
#define USE_ETHERNET_SHIELD верно
  

При использовании платы Ethernet Shield происходит изменение проводки (описано ниже), поскольку плата Ethernet Shield использует D4 в качестве контакта «выбора ведомого устройства» для SD-карты.

Пример сеанса

При запуске скетча он считывает SD-карту и находит все файлы .hex в корневом каталоге, например:

 
Загрузчик шестнадцатеричных файлов Atmega.
Автор Ник Гэммон.
Версия 1.0
Чтение SD-карты...

HEX-файлы в корневом каталоге:

BLINK2~1.HEX: 4595 байт. Создано: 11 мая 2012 г., 07:47:40. Изменено: 2012-05-11 10:50:06
OPTI328.HEX: 1467 байт. Создано: 29.11.2011, 10:11:44. Изменено: 2011-11-29 10:11:44
МЕГА2560.HEX: 22989 байт. Создано: 29.11.2011, 10:11:44. Изменено: 2011-11-29 10:11:44
ATMEGA8.HEX: 2870 байт. Создано: 29.11.2011, 10:11:44. Изменено: 2011-11-29 10:11:44
LILYPAD.HEX : 5484 байта. Создано: 25.09.2010, 22:52:34. Изменено: 25.09.2010 22:52:34
ЭСКИЗ~1.HEX : 170228 байт. Создано: 11 мая 2012 г., 09:40:24. Изменено: 2012-05-11 09:40:24
LARGE_~1.HEX: 170228 байт. Создано: 11 мая 2012 г., 10:54:48. Изменено: 2012-05-11 10:54:48
BLINK3.HEX : 3061 байт. Создано: 11 мая 2012 г., 11:08:00.Изменено: 2012-05-11 11:08:00
  

Размер и дата/время изменения показаны, чтобы помочь вам выбрать подходящий файл. Обратите внимание, что имена файлов имеют старый стиль «8.3», поэтому вы можете не увидеть точное имя, под которым вы их сохранили.

Затем скетч определяет тип чипа, к которому он подключен, например:

 
Попытка войти в режим программирования...
Вошел в режим программирования ОК.
Подпись = 0x1E 0x95 0x0F
Процессор = ATmega328P
Размер флэш-памяти = 32768 байт.LFuse = 0xE2
HFuse = 0xDB
EFuse = 0xFD
Байт блокировки = 0xFF
  

Затем вас попросят выбрать файл для загрузки/обработки:

Я выберу BLINK3.HEX (введите в поле ввода или скопируйте и вставьте):

 
Файл обработки: BLINK3.HEX
Проверка файла...

##
Самый низкий адрес = 0x0
Высший адрес = 0x439
Байтов для записи = 1082
Нет загрузчика.
Предложите сделать высокий предохранитель = 0xDB
  

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

Также проверяет, поместится ли файл в память целевого процессора.

Если файл слишком большой, вы можете увидеть сообщение вроде этого:

 
Самый высокий адрес 0x3FFD9 превышает доступную верхнюю часть флэш-памяти 0x8000
  

Или если файл выглядит как загрузчик, но не запускается на одной из границ загрузчика для данного конкретного чипа:

 
Начальный адрес не является границей загрузчика.
  

Если все хорошо, вы увидите это:

 
Введите «V», чтобы подтвердить, или «G», чтобы запрограммировать чип этим файлом...
  

Вы можете ввести V, чтобы проверить более раннюю загрузку, или G (Go), чтобы загрузить файл в целевой чип:

Если вы наберете G, вы увидите что-то вроде:

 
Файл обработки: BLINK3.HEX
Стирание чипа...
Пишет флэш...

#########
Написано.
Файл обработки: BLINK3.HEX
Проверка прошивки...

########
Ошибок не обнаружено.
Нет загрузчика.
Установка высокого уровня предохранителя = 0xDB
Сделанный.
  

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

Также устанавливается соответствующий байт фьюза, чтобы процессор загружался в этот файл. Если файл начинается с адреса 0, то вектор сброса устанавливается равным вектору с адресом 0. В противном случае он запрограммирован на загрузку по адресу загрузчика.

Скорость

Приведенные выше примеры запрограммированы примерно за секунду. Файл большего размера (170228 байт на диске, 60518 байт для записи во флэш-память) занимает:

  • 10 секунд для проверки файла на диске
  • 20 секунд для программирования микросхемы
  • 18 секунд для проверки содержимого микросхемы

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

Проводка

SD-карта

Если вы используете Arduino Ethernet Shield, вы можете пропустить эту часть, потому что на плате есть разъем для SD-карты.

Поскольку SD-карта использует SPI, мы использовали «аппаратный» SPI для доступа к флэш-карте.Это подключено так:

 
SD-карта Arduino
-------------------------------------

D10 (SS) CS (выбор чипа) (зеленый)
D11 (MOSI) DI (вход данных) (синий)
D12 (MISO) DO (выход данных) (оранжевый)
D13 (SCK) CLK (часы) (желтый)

+5В 5В (красный)
Земля Земля (зеленый)
  

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

Целевое устройство

 
Ардуино Атмега328
-------------------------------------

D4 (SCK) Контакт 19 (черный) (или D3, см. ниже)
D5 (SS) Контакт 1 (сброс) (зеленый)
D6 (MISO) Контакт 18 (оранжевый)
D7 (MOSI), контакт 17 (белый)

+5В 5В (красный)
Земля Земля (синий)
  

Если вы используете Arduino Ethernet Shield, используйте D3 для SCK, а не D4, поскольку D4 используется в качестве контакта выбора ведомого устройства для интерфейса SD-карты.

Если целевому устройству требуется внешний тактовый генератор, скетч обеспечивает выход тактового сигнала 8 МГц на контакте D9, поэтому подключите контакт D9 к входу тактового сигнала (контакт 9 на Atmega328).

Создание файла .hex

Для создания файла .hex необходимо проверить свой эскиз в среде IDE.

Если вы выберете «подробный» режим в IDE, вы увидите, что имена файлов прокручиваются в окне сообщения. Последним именем файла будет файл .hex, который вам нужно поместить на ваш чип:

 
/var/folders/1l/43x8v10s1v36trvjz3v92m 

0gn/T/build5801712006257958435.tmp/

Blink2.cpp.hex Размер двоичного скетча: 1082 байта (из максимум 30720 байтов)

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

Затем скопируйте этот шестнадцатеричный файл на SD-карту, размонтируйте (извлеките) SD-карту из ПК и вставьте ее в устройство чтения SD-карт. Теперь вы готовы запрограммировать свой чип.


Совет

В последних версиях Arduino IDE вы можете создать файл .hex с помощью меню Sketch -> Export Compiled Binary. Это поместит файл .hex в тот же каталог, что и ваш эскиз. (Не хотите файл с загрузчиком, выбирайте файл без загрузчика).

Начальные адреса

Для микросхем, поддерживающих загрузчик, существует 5 возможных начальных адресов, в зависимости от размера загрузчика. Например, с ATMEGA328:

  • 0000: без загрузчика, ботинки прямо в целевой эскиз
  • 7000: 4096 Byte Bootloader
  • 7800: 2048 Byte Bootloader
  • 7C00: 1024 Byte Bootloader
  • 7E00: 512 byte bootloader

Любой другой начальный адрес будет недействительным, поскольку процессор не начнет выполнение программы sketch с этого места.

Эскиз программирования пытается определить действительные начальные адреса и отклоняет любой файл .hex, который не начинается на этих границах, для конкретного целевого чипа.

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

Проводка для платы Mega2560

Код

Источник на GitHub

Последняя версия будет доступна на GitHub:

https://github.com/nickgammon/arduino_sketches

Отсюда видно, какие были последние изменения.

Также вам потребуется библиотека SDFat:

https://github.com/greiman/SdFat


Совет:
Похоже, что библиотека SdFat претерпевает изменения/улучшения по состоянию на апрель 2015 года. Загрузчик hex может не скомпилироваться с новой версией библиотеки SdFat.

Архивная версия библиотеки SdFat (которая работает со скетчем шестнадцатеричного загрузчика) доступна по адресу:

http://gammon.com.au/Arduino/SdFat-master.zip (2,2 Мб)

Разархивируйте этот файл и из папок внутри него скопируйте папку SdFat в папку «библиотеки» (которая находится в папке вашего альбома для рисования Arduino, а не внутри папку приложения Arduino). Затем перезапустите Arduino IDE.

Если вы попытаетесь скомпилировать более старые версии Arduino IDE, которые не поддерживают макрос F, вы получите ошибки. Вы можете получить его копию здесь:

http://arduiniana.org/libraries/flash/

Правовая оговорка

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

Пользовательский кабель

Вы можете сэкономить время и силы, изготовив специальный кабель ICSP, например: один конец кабеля к ней, а другой конец к плате для программирования, например:

Простая прокладка кабеля для платы Micro SD

Вы можете легко подключиться к плате Micro SD, получив провод «мама» и два дополнительных, например:

(или просто возьмите 6 проводов «мама-мама»).

4-жильный кабель просто подключается к считывателю SD-карт, начиная с контакта CS (выбор микросхемы) и заканчивая CLK (часы). Затем подключите красный провод к контакту +5V, а черный провод к контакту Gnd. Я надел на него термоусадку, чтобы предотвратить замыкание контактов на что-то:

Красный и черный (питание) провода могут получать 5 В и Gnd от разъема ICSP (контакт 2 — 5 В, контакт 6 — Gnd), например это:

(Обратите внимание, что средний контакт (контакт 4) не используется).

Остальные четыре провода просто подключаются к контактам с D10 (CS) по D13 (CLK) следующим образом:

Я использовал более длинную версию штырькового разъема для смены пола:

Или вы можете избавить себя от проблем и использовать кабель типа «папа-мама».

Если вы используете как этот, так и пользовательский кабель, предложенный ранее, у вас может быть компактный «чип-программатор», например:

Обновленный пользовательский интерфейс для чтения с флэш-памяти и сохранения обратно на диск, очистки флэш-памяти и изменения фьюзов.Теперь вы вводите код действия, подобный этому:

 .
--------- Запуск ---------

Попытка войти в режим программирования...
Вошел в режим программирования ОК.
Подпись = 0x1E 0x95 0x0F
Процессор = ATmega328P
Размер флэш-памяти = 32768 байт.
LFuse = 0xFF
HFuse = 0xDE
EFuse = 0xFD
Байт блокировки = 0xCF
Действия:
 [E] стереть вспышку
 [F] изменить предохранители
 [R] читать с флешки (сохранять на диск)
 [V] проверить прошивку (сравнить с диском)
 [W] запись во флеш (чтение с диска)
Введите действие:
  

Пример чтения флэш-памяти:

 
Введите действие:
  Р 

Выберите файл для сохранения как:
  ТЕСТ.Шестнадцатеричный 
Копирование флеш-памяти на SD-карту (диск)...

################################################### ##############
################################################### ##############
################################################### ##############
################################################### ##############
Файл TEST.HEX сохранен.
  

Пример замены предохранителя низкого уровня:

 
Введите действие:
  Ф 
LFuse = 0xFF
HFuse = 0xDE
EFuse = 0xFD
Байт блокировки = 0xCF
Выберите предохранитель (LOW/HIGH/EXT/LOCK)...
  НИЗКИЙ 
Текущее значение нижнего предохранителя = 0xFF
Введите новое значение предохранителя низкого уровня (2 шестнадцатеричных цифры) ...
  С2 
ПРЕДУПРЕЖДЕНИЕ. Изменение предохранителя может привести к тому, что процессор перестанет отвечать на запросы.
Подтвердите изменение low fuse с 0xFF на 0xC2. Введите «ДА» для подтверждения...
  ДА 
Замена плавкого предохранителя...
Предохранитель написан.
LFuse = 0xC2
HFuse = 0xDE
EFuse = 0xFD
Байт блокировки = 0xCF
  

Как получить шестнадцатеричный файл из Arduino

Привет, друзья, надеюсь, у вас все хорошо и вы весело проводите время.В сегодняшней статье я расскажу, как получить шестнадцатеричный файл из Arduino. Это довольно простой пост, и я уже много раз объяснял его в своих постах, но, тем не менее, я получаю много сообщений по этому поводу, поэтому я решил написать для него отдельный пост. Прежде всего, давайте немного расскажем об этом. Если вы работали с микроконтроллерами PIC или Atmel и т. д., то вы видели, что вы всегда получаете шестнадцатеричные файлы от их компиляторов, а затем записываете этот шестнадцатеричный файл в соответствующий микроконтроллер с помощью их программатора или записывающего устройства.Но это не относится к Ардуино. В платах Arduino вы просто подключаете его к компьютеру и нажимаете кнопку «Загрузить», и код автоматически загружается в платы Arduino. Он не создает никаких шестнадцатеричных файлов. Вам также следует взглянуть на библиотеку Arduino для Proteus, в которую вы можете загрузить этот шестнадцатеричный файл.

Итак, теперь возникает вопрос, зачем вообще нужен шестнадцатеричный файл, когда мы можем загрузить код без него? Ответ на этот вопрос заключается в том, что во многих случаях требуется шестнадцатеричный файл.Например, вместо платы Arduino вы просто хотите использовать микроконтроллер ATmega328 или Attiny, тогда самый простой способ — написать код в Arduino, а затем получить его шестнадцатеричный файл и загрузить его в свой микроконтроллер, что значительно упрощает задачу. Другим примером является имитация Proteus. Когда вы хотите смоделировать свою плату Arduino в программном обеспечении Proteus, вам нужно получить шестнадцатеричный файл, чтобы вы могли загрузить его на плату Arduino. Другой случай — фриланс, когда вы работаете над каким-то проектом как фрилансер, то есть много случаев, когда вы не хотите отправлять свой код клиенту, вместо этого вы хотите отправить ему шестнадцатеричный файл, чтобы он мог протестировать и проверить код, в таких случаях это тоже требуется.Итак, давайте начнем с того, как получить шестнадцатеричный файл из Arduino.

  • Вот видео, в котором я показал Как получить шестнадцатеричный файл из Ардуино, надеюсь поможет:

Как получить шестнадцатеричный файл из Ардуино???

  • Прежде всего, откройте программное обеспечение Arduino, напишите свой код и протестируйте его.
  • После того, как вы подтвердите, что ваш код готов и вы хотите сгенерировать шестнадцатеричный файл, нажмите на опцию File в меню выше, а затем Preferences , как показано на рисунке ниже:

  • На приведенном выше рисунке я использовал простой пример мерцания и собираюсь сгенерировать его шестнадцатеричный файл.
  • Теперь, когда вы нажмете Preferences , появится новое окно.
  • В этом новом окне отметьте опцию компиляции , как показано на рисунке ниже:

  • После этого нажмите кнопку OK, и это диалоговое окно закроется.

Примечание:

  • Установив этот флажок, вы разрешаете программному обеспечению Arduino отображать подробные выходные данные на панели вывода в конце программного обеспечения Arduino, которая имеет черный фон.
  • Итак, вы также можете отметить опцию загрузки, но тогда вам нужно загрузить код, чтобы получить эти команды вывода.
  • Теперь нажмите кнопку компиляции, когда мы отметим опцию компиляции, чтобы он скомпилировал код и дал вам все команды, как показано ниже: много команд в черной части, это подробные выходные данные, которые дает нам Arduino.
  • Последняя строка этих подробных выходных данных, которую я также выделил, — это ссылка на шестнадцатеричный файл , в нашем случае это:

C:UserszainAppDataLocalTempbuild7243111610766241365.TMP / BLINK.CPP.HEX

    • Теперь, удалите имя шестнадцатеричного файла из этой ссылки и станут:

    C: userszainappdatalocaltemppbuild7243111610766241365.tmp

    • Вставьте эту ссылку в компьютерную адресу эта папка откроется.
    • В этой папке найдите соответствующий файл, и вы легко получите шестнадцатеричный файл своего кода.

    Примечание:

    • На самом деле, при загрузке кода на платы Arduino программное обеспечение Arduino создает шестнадцатеричный файл кода во временной папке и после загрузки кода удаляет этот шестнадцатеричный файл.
    • Вот почему мы не получаем шестнадцатеричный файл, но, выбрав опцию, вы можете легко получить шестнадцатеричный файл, а затем использовать его для любых целей.

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

    Автор: Сайед Заин Насир
    https://www.theengineeringprojects.com/

    Я Сайед Заин Насир, основатель Инженерные проекты (TEP). Я программист с 2009 года, до этого я просто искал что-то, делал небольшие проекты, и теперь я делюсь своими знаниями через эту платформу. Я также работаю фрилансером и сделал много проектов, связанных с программированием и электрическими схемами. Мой профиль Google+

    Навигация по сообщению

    Установка загрузчика Arduino — Learn.sparkfun.com

    Авторы: M-короткий Избранное Любимый 25

    Загрузка кода — трудный путь

    Трудный путь для тех, кто хочет использовать командную строку.Этот метод может быть более предпочтительным, если вы модифицируете и перекомпилируете и не хотите постоянно обновлять IDE, но в остальном он совершенно не нужен. Опять же, вам нужно будет получить программатор и подключить все. В этом примере мы используем avrdude в Windows.

    Этот процесс состоит из трех шагов:

    • Установить биты предохранителя (т. е. низкий, высокий и расширенный)
    • Флэш-память .hex Файл
    • Установить биты блокировки

    Первый шаг включает установку фьюзбитов.Fusebits — это часть микросхемы AVR, которая определяет, например, используете ли вы внешний кристалл или хотите ли вы обнаружить снижение напряжения. Команды, перечисленные ниже, предназначены специально для Arduino Uno, использующего ATMega328, они, вероятно, будут работать на некоторых других подобных платах, таких как Duemilanove, но убедитесь, что вы знаете, что делаете, прежде чем играть с фьюзбитами. Все необходимые фьюз-биты перечислены в файле boards.txt для разных плат. Опять же, если у вас есть платы .txt , просто используйте Easy Way. Второй шаг — собственно загрузка программы. Последним шагом является установка битов блокировки.

    Примечание: Эти фьюзбиты , а не будут работать на плате 3,3 В/8 МГц. Если вы используете другой микроконтроллер, вам также потребуется настроить параметр partno.

    Карманный программатор AVR

    Биты предохранителя

    Если вы используете карманный программатор AVR для программирования целевого Arduino Uno, введите следующие команды в командной строке, чтобы установить фьюз-биты.

      язык: Баш
    avrdude -b 19200 -c usbtiny -p m328p -v -e -U efuse:w:0x05:m -U hfuse:w:0xD6:m -U lfuse:w:0xFF:m
      
    Шестигранный напильник и биты блокировки

    После установки фьюз-битов мы можем записать скомпилированный файл .hex на целевую плату и установить биты блокировки. Введите следующее в командной строке. Убедитесь, что вы находитесь в том же каталоге, что и ваш файл .hex , и настройте ...hexfilename.hex , который вы используете для прошивки для вашей цели.Чтобы прошить загрузчик Arduino Uno, перейдите в папку программы Arduino. В ОС Windows он будет выглядеть примерно так: …\arduino-1.8.5\hardware\arduino\avr\bootloaders\optiboot . В папке есть несколько файлов, но нас интересует файл optiboot_atmega328.hex .

      язык: Баш
    avrdude -b 19200 -c usbtiny -p m328p -v -e -U flash:w:hexfilename.hex -U lock:w:0x0F:m
      

    Ардуино как интернет-провайдер

    Биты предохранителя

    Если вы используете Arduino в качестве интернет-провайдера для программирования целевого Arduino Uno, введите следующие команды в командной строке, чтобы установить фьюз-биты.

      язык: Баш
    avrdude -P comport -b 19200 -c avrisp -p m328p -v -e -U efuse:w:0x05:m -U hfuse:w:0xD6:m -U lfuse:w:0xFF:m
      
    Шестигранный напильник и биты блокировки

    После установки фьюз-битов мы можем записать скомпилированный файл .hex на целевую плату и установить биты блокировки. Введите следующее в командной строке. Убедитесь, что вы находитесь в том же каталоге, что и ваш файл .hex , и настройте ...hexfilename.hex , который вы используете для прошивки для вашей цели.Чтобы прошить загрузчик Arduino Uno, перейдите в папку программы Arduino. В ОС Windows он будет выглядеть примерно так: …\arduino-1.8.5\hardware\arduino\avr\bootloaders\optiboot . В папке есть несколько файлов, но нас интересует файл optiboot_atmega328.hex .

      язык: Баш
    avrdude -P comport -b 19200 -c avrisp -p m328p -v -e -U flash:w:hexfilename.hex -U lock:w:0x0F:m
      

    Последняя информация. Как мы уже говорили ранее, загрузчик — это, по сути, .шестнадцатеричный файл . Таким образом, вы можете использовать этот метод для загрузки и кода, который вы хотите для своих ИС.


    ← Предыдущая страница
    Загрузка кода — Easy Way

    Avrdude — загрузите шестнадцатеричный файл в Arduino с помощью ISP / ICSP

    .

    Причина

    В некоторых случаях USB нельзя использовать для программирования (загрузки шестнадцатеричного файла) процессора на плате Arduino. Один из таких случаев — когда вы нацеливаете второй процессор на Arduino Uno, ATMega16u2, единственной целью которого является обеспечение связи через USB.

    Обратите внимание: только оригинальные платы Arduino Uno R3 имеют процессор ATMega16u2, поэтому обязательно используйте один из них в качестве цели.

    Еще один случай возникает после того, как нам удалось перепрограммировать USB-чип. В моем случае он станет коммуникационным MIDI-чипом, поэтому USB-подключение будет потеряно, а основной процессор (ATMega328p) также придется программировать с помощью ISP (внутрисистемное программирование).

    Список деталей

    • Arduino IDE (я использовал arduino.cc 1.6.7, но подойдет и любой достаточно современный)
    • 2x Arduino Uno R3 (один программатор и одна цель)
    • Обрезанный плоский кабель ICSP
    • 3x светодиода / 3x 1k резистора (опционально)

    Больше информации о кабеле ISP/ICSP и подключениях по телефону

    Ника Гэммона.

    Использование платы Arduino в качестве ISP

    Шаг 1, создайте программатор ISP
    Найдите пример эскиза ArduinoISP в Arduino IDE.Загрузите его на плату Arduino, которая должна стать программатором. (Плата программатора не обязательно должна быть оригинальной Uno, она может использовать микросхему FTDI232 или Ch440 для связи по USB.)

    Шаг 2, соедините платы
    Чтобы загрузить шестнадцатеричный файл на USB-чип (m16u2, также известный как ATMega 16u2) на Arduino Uno, вам необходимо подключить разъем ISP программатора ко второму разъему ISP целевой платы . . (Если есть только один 6-контактный ISP-разъем, у вас нет оригинального UNO.)

    Шаг 3, загрузить шестнадцатеричный файл

    Команда оболочки

    Загрузка предварительно скомпилированного шестнадцатеричного файла в USB-контроллер m16u2 на плате Arduino Uno R3 с использованием avrdude и программатора «Arduino as ISP» для настройки m16u2.

     /path/to/avrdude -C /path/to/avrdude.conf -v -p m16u2 -c stk500v1 -P /path/to/serial/port -b 19200 -U flash:w:/path/to/hex /файл.hex
     

    Пример

    Что вы видите:
    Использование терминала в Mac OS X
    Загрузка прошивки Hiduino midi
    из папки «jobb/EMS/»
    Использование «avrdude», поставляемого в комплекте с Arduino IDE
    Использование /dev/cu.wchusbserial410 (последовательный порт программатора «Arduino as ISP»)

     /Applications/Arduino.app/Contents/Java/hardware/tools/avr/bin/avrdude -C /Applications/Arduino.app/Contents/Java/hardware/tools/avr/etc/avrdude.conf -v -p m16u2 -c stk500v1 -P /dev/cu.wchusbserial410 -b 19200 -U flash:w:/Users/gaunitz/Documents/Jobb/EMS/hiduino-master/compiled_firmwares/arduino_midi.hex
     

    Самое сложное — правильно указать пути к файлам. Чтобы получить некоторые подсказки, перейдите в настройки Arduino IDE и включите «Показывать подробный вывод во время -> Загрузка».Затем загрузите любой скетч в Arduino и изучите вывод журнала.

alexxlab

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

Ваш адрес email не будет опубликован.