Опыт прошивки Arduino WiFi без USB порта

от автора

Многие современные микроконтроллеры легко программируются через USB порт. А если его нет, будет ли все просто?

Плата Arduino Wi-Fi представляет собой составной девайс два в одном: обычный Arduino UNO (на чипе ATmega328P) и Wi-Fi модуль (ESP8266 ). Каждое из устройств имеет свой процессор, свою оперативку и свой EEPROM (энергонезависимая память). И программируется все это, соответственно, двумя скетчами, которые выполняются одновременно и независимо друг от друга.

Такая архитектура оправдана — ATMega может выполнять критические по времени задачи в то время как ESP подвисла ожидая таймаута, например при оборвавшемся TCP соединении во время сессии.

Взаимодействовать между собой устройства могут через UART интерфейс (Universal asynchronous receiver/transmitter – универсальный асинхронный приемник — передатчик). Используются 2 провода. Tx одного устройства соединяется с Rx другого и наоборот.

Также на плате есть чип CH340, это UART USB-TTL преобразователь, с одной стороны у него UART интерфейс, а с другой USB интерфейс для связи с компьютером. Для переключения соединений между устройствами используются DIP-переключатели:

1

ATMega — ESP

2

3

ATMega — CH340

4

5

ESP — CH340

6

7

GPIO0 на ESP– GND

8

не используется

Так вот, при монтаже платы я нечаянно оторвал USB порт не успев ничего запрограммировать.

Первая идея была подключить питание через пины и хоть как-нибудь подпаять Data+ и Data-, а после прошивки пайку убрать. После осмотра места проcишествия через большую лупу стало ясно, что медвежачьими лапами здесь ничего не сделаешь.

Место крепления USB.

Место крепления USB.

Вторая идея — прошить через

программатор

целевая плата

5V

5V

GND

GND

10

RST

11

11 (MOSI)

12

12 (MISO)

13

13 (SCK)

(На иной целевой плате нужно использовать другие пины, например, для Arduino Mega: MOSI — 51, MISO — 50, SCK — 52).

  • В Arduino IDE выбираем программатор: Tools — Programmer — Arduino as ISP.

  • Прошиваем: Sketch — upload using Programmer.

  • Наслаждаемся.

  • Остается лишь прошить ESP8266, но здесь проблема: нужные пины на плату не выведены! Нужно прошивать прямо через TX-RX.

    Перелопатив с десяток форумов я наконец понял, как нужно подключить ESP для прошивки. Схема эта сработала, но не сразу.

    1. Берем свободную плату (Arduino UNO). Наличие или отсутствие прошивки на ней не играет роли — она будет использована в роли USB – UART моста.

    2. Замыкаем на ней RST и GND. Это нужно чтобы микроконтроллер не стартовал, не посылал ничего в UART и не реагировал на входящие сигналы.

    3. Соединяем 4-мя проводами:

    Arduino UNO (UART-USB мост)

    целевая плата

    5V

    5V

    GND

    GND

    TX

    TXD (на ESP!)

    RX

    RXD (на ESP!)

    Выводы ESP8266 на плате Arduino Wi-Fi Uno

    Выводы ESP8266 на плате Arduino Wi-Fi Uno

    4. На целевой плате соединяем CH_PD и 3.3V. Это переводит ESP в режим Enabled.

    5. На целевой плате соединяем GPIO0 и GND. Для этого 7-ой свитч переводим в положение ON (остальные свитчи переводим в положение OFF). Это включает режим программирования ESP.

    6. Прошиваем через Arduino IDE.

    Почему TX нужно подключать к TX, RX к RX а не наоборот?

    Давайте посмотрим на схему.

    Схема подключения UART ESP8266 к Arduino UNOO

    Схема подключения UART ESP8266 к Arduino UNOO

    Получается, что на самом деле TX от ESP взаимодействует с RX чипа CH340 на плате-мосте и наоборот.

    Учитывая, что рабочее напряжение Arduino UNO 5V, а у ESP – 3,3V нужно ли согласовывать питание по линиям TX и RX?

    Мой ответ — нет. И вот почему.

    1. Питание 5V для ESP было бы губительным, но мы подключили 5V к входу 5V общей платы, а там есть преобразователь который питает ESP правильным напряжением.

    2. GPIO выводы ESP8266 являются 5V — толерантными. Правда, следует оговориться, что встречается и противоположное мнение. Его сторонники на форумах обычно приводят цитату из документации:

    «All digital IO pins are protected from over-voltage with a snap-back circuit connected between the pad and ground. The snap back voltage is typically about 6V, and the holding voltage is 5.8V. This provides protection from over-voltages and ESD. The output devices are also protected from reversed voltages with diodes.»

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

    3. Для Arduino UNO напряжение от 0 до 1,5V считается логическим уровнем 0 (LOW), а напряжение 3V и выше — 1 (HIGH). Таким образом, напряжение 3,3V попадает в диапазон HIGH, и никакие преобразования здесь тоже не нужны.

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

    Я перезапускал IDE, перезагружал ноутбук, пытался нажимать Reset ESP в разные моменты около начала прошивки, но не помогало ничего.

    Тогда я обратил внимание на поведение светодиодов TX и RX на Arduino UNO (мосте). Они мигали полностью синхронно. Мне это показалась странно, как будто TX-RX были соединены прямым проводом. Я еще раз проверил подключение, оно полностью соответствовало описанной выше схеме и контакты были надежными.

    Тогда я поменял провода местами, соединил TX — RXD и RX — TXD.

    Внимание, так делать нельзя! Есть риск короткого замыкания на соединении RX-TXD (помните, в нашей схеме контакт, обозначенный RX на плате-мосте на самом деле ведет к TX чипа CH340).

    Я знал, что это не правильно, но все таки сделал это от безнадежности. В конце концов плата без USB порта все равно неисправна, плата arduino UNO покупалась для опытов а голове крутилась шуточная мантра: «опыт инженера растет пропорционально выведенному из строя оборудованию». В момент попытки прошивки светодиод TX на плате-мосте ярко горел а RX молчал. Ничего особенного не произошло. Я поменял провода обратно, выключил/включил питание и вдруг увидел в Serial monitor мусор, который выбрасывает ESP8266 при старте в режиме программирования.

    Появилась надежда… нажимаю кнопку прошить — и, ура, все прошилось.

    Резюме: загрузить скетчи на Arduino Wi-Fi без USB порта можно. Но без бубна, конечно, не обошлось.

    Спасибо за внимание!


    ссылка на оригинал статьи https://habr.com/ru/articles/786160/


    Комментарии

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

    Ваш адрес email не будет опубликован. Обязательные поля помечены *