Как Arduino IDE работает с ESP32?

Я понимаю, как компилятор компилирует наш код для создания двоичного кода. Затем мы можем использовать avr gcc для загрузки кода bin на чипы atmega через программатор (USB-ISP) или через последовательный USB (требуется загрузчик). Я некоторое время использую ESP32 и замечаю, что они работают по-разному. насколько я знаю

  1. Для этого не требуется загрузчик Arduino.
  2. Он не сбрасывается при повторном открытии последовательного монитора.
  3. В нем используется чип внешней памяти.
  4. У него есть кнопка загрузки и сброса
  5. Последовательный USB-порт подключается к ESP32, и мы можем загрузить с него код ячейки. (может быть, единственный способ)
  6. В IDE он запускает скрипт python (esptool.py) Мне интересно, как происходит процесс и как каждый элемент работает со своей стороны, чтобы полностью понять процесс.

, 👍1

Обсуждение

avr gcc является компилятором ... он не выполняет загрузку кода, @jsotola

Arduino IDE-один из возможных способов ввода кода в ESP32. Существует много информации об использовании Arduino IDE с ESP32 (например, https://randomnerdtutorials.com/installing-the-esp32-board-in-arduino-ide-windows-instructions/). Есть также другие IDE, которые будут работать см. https://randomnerdtutorials.com/getting-started-with-esp32/ для списка., @RowanP

@RowanP, Это меня смущает. таким образом, с одним загрузчиком esp32 может работать со всей средой??? или системе вообще не требуется загрузчик???, @M lab

@Mlab Объясняет, что это выходит за рамки моей компетенции. Я знаю, что он использует загрузчик и совместим с несколькими средами. Я передам эстафетную палочку кому-нибудь с более глубоким опытом., @RowanP

Это больше похоже на то, что среды программирования/IDE совместимы с загрузчиками (а не наоборот). Для Arduino IDE вам необходимо установить ядро ESP32, которое включает в себя инструмент загрузки для его загрузчика, что делает Arduino IDE совместимой с загрузчиком ESP32. Существует множество других IDE, которые можно сделать совместимыми. Я думаю, что только собственная среда разработки ESP от Espressif специально создана для ESPs, @chrisl


1 ответ


Лучший ответ:

2

ESP32 имеет загрузчик, который использует последовательный интерфейс, встроенный во внутренний ПЗУ. Будет ли этот загрузчик запущен или нет, зависит от состояния определенных выводов ввода-вывода при запуске ESP32.

Эти состояния управляются небольшой схемой, которая запускается последовательными линиями управления (DTR и RTS).

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

Таким образом, для Arduino всякий раз, когда открывается последовательный порт, сигнал DTR сбрасывает плату. Но для ESP32 сигнал RTS также должен быть заявлен вместе с сигналом DTR в правильной последовательности как для установки правильных выводов ввода-вывода, так и для сброса микросхемы.

Имеет ли целевое устройство внутреннюю флэш или внешний чип флэш-памяти, не имеет значения. Задача загрузчика состоит в том, чтобы поместить данные в эту флэш-память. Микросхемы AVR имеют способ взаимодействия с внутренней флэш-памятью (ISP) для ее программирования без загрузчика, но ESP32, поскольку у него есть внешняя флэш, в этом нет необходимости (вы можете напрямую взаимодействовать с микросхемой флэш-памяти, если хотите).

Программное обеспечение на ПК, которое взаимодействует с загрузчиком, должно говорить на "языке", который ожидает загрузчик. Каждое семейство чипов имеет свой собственный загрузчик (у некоторых даже нет загрузчика, но это уже другая история), который говорит на своем собственном языке. На чипах AVR это обычно вариант протокола STK500, и программа avrdude взаимодействует с ним для отправки программы на flash. На ESP32 (и ESP8266 тоже) это esptool.py это делает свою работу. На чипкит-платах это pic32prog. На Digipark это микроядерный. Существует столько же программ загрузки, сколько семейств плат. Некоторые программы, такие как avrdude и pic32prog, Более гибкие и могут также взаимодействовать с программистами аппаратного обеспечения (USBASP, PICKit2 и т.д.), Но в целом программа загрузки написана специально для конкретного загрузчика.

,

Итак, у всех ESP32 есть встроенный загрузчик, верно? значит, мне никогда не нужно его переустанавливать? Я никогда не видел, чтобы кто-то делал это раньше, @M lab

@Mlab Это правильно. Становится все более распространенным иметь загрузчик в ПЗУ вместо (или также) наличия аппаратного программного интерфейса. Arduino Due также имеет свой загрузчик в ПЗУ, как и многие другие высококачественные чипы ARM. Обычно загрузчик работает в нескольких режимах, включая загрузку с SD-карты (как у Pi), в зависимости от настроек на определенных выводах ввода-вывода., @Majenko

Это действительно новый мой вопрос. Я просто самоучка. Из-за отсутствия этой информации мне трудно понять, как все устроено. Спасибо тебе., @M lab