Последнее время при проектировании устройств на микроконтроллерах AVR, для программирования вывожу только один 6-пиновый разъем (не ISP) для FTDI адаптера. Он позволяет и загрузить прошивку, и отладиться по UART после прошивки. Именно так сделано в Arduino, идея позаимствована оттуда. Это удобно.
Тем временем, не раз приходилось сталкиваться с ситуацией, когда нужно загрузить прошивку в микроконтроллер, но он уже в корпусе который не помещается на рабочем месте/лежит на антресоли/в другом городе/замурован в стену. В таких случаях адаптер FTDI не применим из-за короткого USB шнурка и приходилось изворачиваться с ноутбуком. Задумался о беспроводном программаторе. Тут как нельзя лучше подойдет ESP8266, ведь он обладает UART и в любом исполнении имеет хотя бы один GPIO, пригодный для перезагрузки контроллера и входа в режим программирования.
В сети был найден следующий материал по теме:
- Programming an Arduino via WiFi with the ESP8266 — модуль типа ESP-01 подключается на проводках к Arduino pro mini, затем для загрузки прошивки используется python скрипт
- Programando un Arduino remotamente con el modulo ESP8266 — тут, как я понял, не вдаваясь в подробности, один из GPIO Arduino соединен с RESET. Сначала микроконтроллеру передается команда перезагрузить себя самого, а потом уже начинается загрузка прошивки
- ESP8266-transparent-bridge — прошивка для ESP8266 делающая из модуля прозрачный Wi-Fi — UART мост с поддержкой AT команд для управления GPIO2. Автор предлагает нажимать кнопку reset на Arduino, а затем запускать avrdude c параметрами -c avrisp и -P net:x.x.x.x:23, но это позволяют автоматизировать AT. Именно эту прошивку я и взял за основу
Характеристики адаптера следующие:
- Шести-пиновый разъем c распиновкой как у адаптера FTDI
Скрытый текст
- Работа в схемах с напряжением питания микроконтроллера 3.3В или 5В, выбирается джамперами
- Стабильная работа на скорости до 57600 включительно
- Перезагрузка микроконтроллера при помощи AT команд для входа в режим программирования
Работоспособность проверялась на китайской Arduino pro mini со стоковым загрузчиком и на ATmega8 c установленным optiboot и скоростях 9600, 19200 и 57600. На скорости по умолчанию (115200) прошиваться контроллер отказался.
Для тех, кто не хочет паять и делать плату
В случае применения в схемах с питанием 3.3В достаточно просто присоединить модуль в исполнение esp-01 к Arduino проводками (VCC-->VCC, GND--->GND, RX--->TX, TX--->RX, GPIO2--->DTR). Плата сделана для удобства подключения и возможности работы в схемах с напряжением питания микроконтроллера 5В.Принципиальная схема и печатная плата
Применяется модули типа esp-02, но подойдет и распространенный esp-01, только плату перетрассировать нужно будет слегка. Джамперами выбирается режим работы 3.3/5В. U1 — стабилизатор преобразующий 5В в 3.3В в случае необходимости. R2 и R3 — делитель, тоже для 5В режима. После сборки нужно установить джампер RPOG и при помощи того же FTDI или любого другого UART адаптера загрузить ESP8266-transparent-bridge.
Шаблон односторонней печатной платы (SVG вектор):
Если нужен негатив достаточно открыть текстовым редактором и заменить #000000 на #FFFFFF и наоборот.
В формате KiCad на github
Прошивка микроконтроллера
Обычно, чтобы загрузить прошивку следует перезагрузить микроконтроллер. FTDI адаптер делает это импульсом на ноге DTR (первая в разъеме), она через емкость соединена с ногой RESET микроконтроллера. В нашем случае на место DTR выведена GPIO2 (см. UPD). Для перезагрузки микроконтроллера используются AT команды "+++AT GPIO2 1" и затем "+++AT GPIO2 0", которые меняют уровень на GPIO2 ESP8266. Одного перепада достаточно, чтобы перезагрузить контроллер. Сразу после перезагрузки некоторое время работает загрузчик и ждет образ прошивки по UART, его можно передать с помощью утилиты avrdude. Ниже приведен скрипт выполнение которого прошивает контроллер:#!/bin/bash
HEXILE="firmware.hex"
ADDRESS=x.x.x.x
BAUD=57600
echo "+++AT BAUD $BAUD" | nc $(ADDRESS) 23
echo "+++AT GPIO2 1" | nc $(ADDRESS) 23
echo "+++AT GPIO2 0" | nc $(ADDRESS) 23
avrdude -P net:$(ADDRESS):23 -F -U flash:w:$(HEXILE):i
Данные команды можно включить в Makefile.
Беспроводную прошивку можно провернуть и в Windows, установив утилиты nc и avrdude.
Видео, демонстрирующее работу на примере китайской Arduino pro mini
UPD:
sav13 предложил в качестве прошивки для ESP8266 использовать esp-link, она совместима с текущей схемой адаптера. Данная прошивка имеет ряд преимуществ по сравнению с ESP8266-transparent-bridge, в т.ч. WEB интерфейс для конфигурации, нет необходимости использовать AT команды, дополнительный функционал, более подробно тут.
Комментарии (33)
ersivv
12.04.2016 17:37Если нужно помигать диодом да и не только, то можно обойтись только esp, у которой ресурсов значительно больше.
sixhundredsixtyfive
12.04.2016 18:10+1Речь совершенно не о том какую платформу выбрать для той или иной задачи, речь о инструменте для беспроводной загрузки прошивки в микроконтроллер. Если нужно помигать диодом да и не только, то можно обойтись только мультивибратором.
SL_RU
12.04.2016 18:31Зачем вообще ардуина, если у вас есть есп, возможности и ресурсы которой во МНОГО раз больше, нежели у ардуины?
sixhundredsixtyfive
12.04.2016 18:47+2Отличное замечание, я его непременно учту при проектирование новых устройств, и приму меры чтобы в кротчайшие строки заменить ВСЕ чипы AVR на ESP8266 во всех используемых девайсах, начиная от мигалок светодиодами и заканчивая мозгами квадрокоптера и 3D принтера.
KonstantinSoloviov
12.04.2016 20:17+1Энергопотребление, количество выводов и их нагрузочная способность, таймеры, качество АЦП и т.д. и т.п. AVR'кам еще есть чего предложить.
sixhundredsixtyfive
12.04.2016 20:29Согласен, еще хочу добавить огромное комьюнити и множество готовых решений на AVR.
SL_RU
12.04.2016 21:00AVR'ки что-то могли предложить лет шесть назад, а сейчас всё заняли STM32 и другие ARMные МК, которые опережают АВР по всем параметрам, перечисленным вами.
Опять же, не хочу быть неправильно понятым, но, лично я бросил уже все AVR, открыв для себя STM32, чего и вам советую(когда узнал о них сидел и смотрел с открытым ртом на их параметры). Они не перестают удивлять меня каждый день. Например, недавно выпустили микроконтроллеры с высокой производительностью и мощной периферией и энергопотреблением всего в 89микроампер за МГц в нормальном режиме работы: http://www.compel.ru/lib/ne/2016/2/6-potreblenie-ot-89-mka-mgts-v-aktivnom-rezhime-novyiy-rekord-mikrokontrollerov-stm32f4/
Даже у самых дешёвых стмок периферия, ресурсы и производительность значительно превосходит любой чип на архитектуре авр. А начало использования у них настолько же простое как и у ардуин.KonstantinSoloviov
12.04.2016 21:27Вы в начале опыта, через некоторое время первая влюбленность пройдет и станут обнаруживаться интимные подробности )
На вскидку:
— мелкий TQFP достаточно замысловато развести, да и паять тоже не сахар
— окажется, что VBAT вывод выведен далеко не во всех чипах
— окажется, что в UART нет аппаратного буфера даже для одного байта
— HAL не сильно лучше SPL
— HAL навязывает стиль программирования
— 5V иногда даже лучше 3.3V и то что раньше просто подключалось теперь придется согласовывать
…
Конечно, есть и плюсы и их немало, но далеко не все так однозначноSL_RU
12.04.2016 21:45Да влюблённость прошла, просто привлекаю новых людей. И проблемы, которые вы назвали — не самые ужасные.
TQFP разводится совсем просто(посередине у меня получается такая красивая звёздочка) и фоторезистом создаётся печатка за полчаса.
Ну для некоторых ножка VBAT он не очень нужна — для этого и существует выбор.
А DMA для кого сделан? Во много раз лучше любых буферов.
ТТЛ преобразователи стоят копейки
А вот ХАЛ и программирование — это да. А самая большая проблема — подводные грабли, о которых не написано нигде, даже в даташите. Доходит до того, что нельзя просто управлять ножкой в режиме OUTPUT, а инпут выдаёт какую-то ерунду — выручает лишь логический анализатор.
barmic
13.04.2016 10:59Приведите хоть один пример "… начало использования у них настолько же простое как и у ардуин." По моему залить Blink из Arduino IDE может и школьник, а как такого же примера на STM?
SL_RU
13.04.2016 11:07Пожалуйста, всё предельно просто и ясно: https://www.youtube.com/watch?v=bHgqh-Uhjvc
Даже проще — конфигурируешь пины не из кода, а из графической утилиты CubeMX.barmic
13.04.2016 13:32+1Да-да Всё предельно просто! Скачайте CubeMX, Keil, настройте, сконфигурируйте, залейте! Ура моргает. Это Вы попробуйте моему 12 летнему сыну объяснить. С Ардуино он по картинкам разобрался, скачал Arduino IDE, выбрал плату, выбрал blink и нажал загрузить… После этого час прыгал от радости. Полностью согласен с Вами что STM имеет огромный потенциал и я лично только за его использование, но на счет простоты использования, здесь уж извините. Вы сами с чего начинали?
SL_RU
13.04.2016 18:59С АВРок, конечно же. И рад, что в то время ещё никаких ардуин и в помине не было — именно это, думаю, сделало программирование и электротехнику моими любимыми занятиями.
Лично я очень плохо отношусь ко всем этим ардуинам, конструкторам и прочему обучающему хламу — они обманывают начинающего, врут ему. Это просто игрушки, а не учебные пособия. Именно потому что всё можно сделать без усилий — двумя кнопками. Так же эта простота создаёт очень стойкое ощущение того, что всё везде просто и делается в два счёта и так же отбивает у большинства любое желание решать сколь бы то ни было малые проблемы. Именно это произошло с младшим братом.
Когда я вижу очередной «обучающий» конструктор для детей — мне делается одновременно грустно и смешно.
У меня в детстве был один лишь металлический конструктор и сломанный телевизор. А, и книжка «Электронника шаг за шагом».
И я сам во втором классе ( 9 лет) собрал свою первую схему — мультивибратор.
Если у меня был бы один из тех конструкторов, уверен, я бы прилепил друг к другу куски пластика, нажал бы кнопку и что-нибудь замигало, поигрался бы часика два, убрал бы всё это в глубокий шкаф и пошёл бы с посонами гамать в футбол.
А про микроконтроллеры я узнал тогда, когда ещё у нас не было интернета — увидел в магазину книжку про них и заинтересовался, купил её, попросил отца заказать где-нибудь, по-моему, какую-то аттини и программатор. Через месяц ониа пришли на почту — тут начались мои приключения. Платки для неё тож сделал самостоятельно, конечно, из-за самих плат было много проблем, но это того стоило.
В электронике упрощение не нужно. Оно не только обманывает — оно убивает всё удовольствие от занятия ею, превращает её не в хобби, а в очередную игрушку, на пару дней, на недельку или на месяц.
Думаю значительно превосходящее большинство радиолюбителей начинали так же как и я, с нуля и сами. А вы? Очень интересно услышать другое мнение.barmic
14.04.2016 16:02Согласен и не согласен одновременно. Не нужно быть механиком чтобы управлять автомобилем, также не нужно быть электронщиком чтобы программировать. Программист не знает как работает процессор хотя вся документация есть. Вы заглядывали в даташиты на современные Intel'ы наверняка нет, а программы пишите. Так и для Arduino сделали тоже самое, неважно что там происходит важно что по определённым командам появляются сигналы в определённых местах и согласитесь неплохие проекты получаются. Согласен в Вами тем что если хочешь сделать хорошо и понять как это работает, то лучше всего изучить всё до самых «косточек».
python273
13.04.2016 20:32Гуглите mbed и STM32 Nucleo. Бинарник создается в браузере, потом нужно подключить плату и перекинуть как на обычную флешку файл.
barmic
14.04.2016 13:50Да! С этим не поспоришь. Проще некуда. STM перевели в разряд «Arduino». Что то я это упустил, точнее и не надо было. Надо ждать повального увлечения конструкторами на чипах от STM. Сейчас еще сделают что нибудь типа «STM IDE» и понесётся.
ikaktys
13.04.2016 09:33+1Классная вещь, можно еще добавить micro SD карточку, с возможностью загрузки прошивок на/с нее, и будет универсальная штука
sixhundredsixtyfive
13.04.2016 10:40Тогда еще дисплей и кнопки чтобы выбирать прошивку которую лить
ikaktys
13.04.2016 10:41в бутлоадер все не влезет?
sixhundredsixtyfive
13.04.2016 10:57Может я не так понял, Вы имеете в виду добавлять SD карту к AVR, если спрашиваете о загрузчике? Я подумал добавить карту к ESP8266, чтобы можно было заливать не только с компьютера по WiFi, но и тиражировать заранее загруженные на SD карту прошивки. Тут даже и SD карта не обязательно, в памяти ESP8266 есть место для некоторого количества образов прошивок для AVR.
ikaktys
13.04.2016 11:28У ESP8266 свой флэш же «всего» 512кб? а у 2560 размер своего 256kb
DarkByte
13.04.2016 14:46У ESP8266 нет своего флеша, доступного для прошивки простым пользователям.
sixhundredsixtyfive
13.04.2016 18:08Я подробно в вопросе не разбирался, но мне казалось что можно писать, есть ведь функции spi_flash_erase_sector/spi_flash_write, проблема будет в том чтобы не затереть при этом исполняемый код.
DarkByte
13.04.2016 18:15Флеш память представлена в виде внешней микросхемы, соответственно её размер будет зависит от конкретной платы. С помощью этих функций ESP может перезаписывать содержимое флешки, в том числе возможно реализовать обновление по воздуху самой себя.
sav13
13.04.2016 16:21+1Есть отличный проект ESP-link
Позволят прошивать и отлаживать AVR/ESP8266 и проче и просто пробрасывать по WiFi последовательный портsixhundredsixtyfive
13.04.2016 17:46Да, видел этот проект когда подбирал прошивку для ESP8266, но совсем про него забыл и не включил в статью. Сам его не использовал поскольку он мне показался тяжеловатым вместе с WEB интерфейсом, мне достаточно было просто моста Wi-Fi-UART.
Возможно перешью адаптер на ESP-Link для поддержки виртуального COM или допилю проект ESP8266-transparent-bridge.
А там можно выбрать GPIO2 как DTR?
sixhundredsixtyfive
13.04.2016 17:51Спасибо. Как проверю работоспособность на моей платке адаптера обновлю статью с этим вариантом прошивки.
avs24rus
Мне больше по душе прошивка через Bluetooth.
Foreglance
Можете поделиться вариантами прошивка через Bluetooth?
Автору — спасибо. Мне пришлось вторую ардуину рядом с основной ставить — с модифицированным ArduinoISP (чтобы прозрачный serial и поддержка дисплеев) и блютуз-модуль.
avs24rus
Да пожалуйста
Foreglance
Спасибо за ссылку на блютуз-прогамматор. Я видел подобную схему, но иам указывалось на проблемы, не стал использовать. А здесь — хорошая детальеая инструкция.