На чипах ESP со встроенным в кристалл USB Serial/JTAG Controller можно использовать часть этого контроллера, которая реализует последовательный порт (CDC), для работы последовательной консоли вместо того, чтобы использовать для этой цели UART вместе с внешней микросхемой моста USB-UART (наподобие CH340x, FT2232RL и т. п.). ESP32-C3 содержит на кристалле такой контроллер USB, предоставляющий следующие функции:
• Двунаправленная последовательная консоль, которую можно использовать как IDF Monitor или другой serial-монитор для отладочных сообщений. • Прошивка FLASH с помощью утилиты esptool.py и команды idf.py flash [2]. • Отладка JTAG с использованием например OpenOCD, одновременно с работой serial-консоли.
Обратите внимание, что в отличие от некоторых чипов Espressif с периферийным устройством USB OTG, контроллер USB Serial/JTAG это устройство с фиксированной функцией, реализованной полностью аппаратно. Это значит, что USB Serial/JTAG Controller нельзя переконфигурировать на использование других функций, кроме как каналов обмена последовательными сообщениями (USB CDC) и отладки JTAG.
[Аппаратные требования]
Подключите ESP32-C3 к сигналам порта USB следующим образом:
GPIO |
USB |
IO19 |
D+ (зеленый провод) |
IO18 |
D- (белый провод) |
GND |
GND (черный провод) |
|
+5V (красный провод) |
На некоторых платах разработчика уже есть коннектор USB для прямого подключения USB Serial/JTAG Controller [3], в таком случае никаких дополнительных соединений не требуется.
[Программная конфигурация]
Функция консоли USB может быть разрешена с использованием опции CONFIG_ESP_CONSOLE_USB_SERIAL_JTAG через утилиту конфигурирования menuconfig (см. CONFIG_ESP_CONSOLE_UART). После того, как эта опция разрешена, выполните сборку проекта, как обычно.
Альтернативно вы можете получить доступ к выводу через порт usb_serial_jtag, однако убедитесь, что выбрана опция CONFIG_ESP_CONSOLE_SECONDARY_USB_SERIAL_JTAG среди вариантов ESP_CONSOLE_SECONDARY.
Предупреждение: если кроме вывода сообщений вы также хотите получить и ввод, или использовать REPL вместе с консолью, то выберите CONFIG_ESP_CONSOLE_USB_SERIAL_JTAG.
[Выгрузка приложения]
USB Serial/JTAG Controller может автоматически перевести ESP32-C3 в режим загрузки прошивки. Просто выполните прошивку как обычно (idf.py flash), но при этом укажите в своей системе порт контроллера USB Serial/JTAG: idf.py flash -p PORT, где вместо PORT укажите правильное имя порта.
Ограничения. Существует несколько ограничений для использования функции консоли USB. Они могут быть незначительными, что зависит от типа вашего разрабатываемого приложения и от самого рабочего процесса разработки.
1. Если приложение случайно переконфигурирует ножки порта, используемые для периферийного устройства USB (GPIO18 и GPIO19), или запретит USB Serial/JTAG Controller, то устройство исчезнет из системы хоста разработки. После исправления этой проблемы в приложении необходимо вручную активировать необходимый режим загрузки ESP32-C3 путем подтяжки к лог. 0 ножки GPIO9 и сброса чипа.
2. Если приложение войдет в режим глубокого сна (deep sleep mode), то устройство USB CDC также отключится от системы хоста разработки.
3. Поведение внешней микросхемы физического моста USB-to-serial незначительно отличается от поведения USB Serial/JTAG Controller, если приложение ESP-IDF не прослушивает приходящие байты. Микросхема моста USB-to-serial будет просто посылать байты в (не прослушивающий их) чип ESP32-C3, в то время как USB Serial/JTAG Controller заблокирует выполнение кода, пока приложение не прочитает оттуда байты. Это может привести к тому, что программа терминала будет выглядеть как зависшая.
4. Устройство USB CDC не будет нормально работать в режимах сна (sleep modes) из-за отсутствия тактов APB в этих режимах. Это включает режимы deep-sleep, light-sleep (а также automatic light-sleep).
5. Если устройство USB CDC используется, то ток потребления в режимах сна будет выше. Причина в том, что разработчики ESP32-C3 по умолчанию оставили устройство USB CDC в рабочем состоянии после software reset.
Повышенная потребляемая мощность в режимах сна связана с тем, что программа сохраняет тактирование во время сброса, чтобы устройство USB CDC оставалось активным. Как побочный эффект такты также остаются активными в режимах сна. Существует одно исключение: тактирование будет сохраняться только когда порт USB CDC реально используется (например транзакцией данных), поэтому если, к примеру, ваше устройство USB CDC на ESP32-C3 подключено к power-банку или батарее вместо работающего хоста USB (например компьютер PC), то потребление энергии не повысится.
Если все еще нужно сохранить низкое энергопотребление в режимах сна:
1. Если вы не используете порт USB CDC, то делать ничего не надо. Программа определит, что устройство CDC подключено к правильному хосту USB перед входом в сон, и тактирование сохранится только в том случае, когда хост организовал подключение (т. е., например, открыл порт USB CDC в программе терминала). Иначе при переходе в режим сна такты будут выключены, как обычно.
2. Если вы используете порт USB CDC, то запретите menuconfig-опцию CONFIG_RTC_CLOCK_BBPLL_POWER_ON_WITH_USB. Тактирование включится, как обычно, во время software reset, а также в режимах сна. В этих случаях устройство USB CDC может быть отключено от хоста.
[Ссылки]
1. ESP32-C3 USB Serial/JTAG Controller Console site:docs.espressif.com. 2. ESP-IDF Build System. 3. ESP32-C3 Development Board site:aliexpress.com. 4. Выбор режима загрузки ESP32-C3. |