ESP32-C3 это одноядерный микроконтроллер SoC, основанный на открытой архитектуре RISC-V. В нем хорошо сбалансированы энергопотребление, возможности ввода/вывода, безопасность и производительность, что подходит для реализации недорогих беспроводных устройств. Доступность Wi-Fi и Bluetooth 5 (LE) позволяет не только просто конфигурировать устройства, но также увеличивает область применения благодаря возможностям беспроводных соединений по разным протоколам.
На популярных платах разработчика доступны не все выводы чипа, и некоторые из ножки кристалла использовать не получится. Возникает множество вопросов о том, какие выводы ESP32-C3 для чего нужны. Какие выводы GPIO нужно использовать? Какие выводы следует избегать в своих проектах? В этой статье (перевод блога [1]) представлено простое руководство, помогающее ответить на подобные вопросы.
[Голый чип ESP32-C3]
На следующем рисунке показана цоколевка корпуса чипа ESP32-C3 QFN 5×5. Используйте эту диаграмму, если применяете чипы ESP32-C3 напрямую, без готовых модулей.
Периферия ESP32-C3. На борту чипа находятся следующие периферийные устройства:
• Максимум до 22 программируемых GPIO (обычно доступно меньше, в зависимости от условий применения). • Все выводы портов GPIO могут генерировать прерывания. • 3 интерфейса SPI. • 2 интерфейса UART (один из них, UART0, используется для перепрошивки и вывода отладочных сообщений). • 1 интерфейс I2C. • 1 интерфейс I2S. • Контроллер LED PWM, 6 каналов [2]. • 1 датчик температуры. • Wi-Fi 802.11 bgn, 802.11mc (150 мегабит), Bluetooth 5 (+BLE). • 2 преобразователя ADC (12 бит, 6 каналов).
Типовая нагрузочная способность одного выхода порта GPIO составляет 40 мА для лог. 1, 28 мА для лог. 0.
Функции ADC (Analogue to Digital Converter, АЦП) назначены на определенные ножки. Однако можно самому определить, на какие ножки будут выведены UART, I2C, SPI, PWM, и т. д., потому что это назначается в коде программы благодаря наличию функции мультиплексирования периферии и GPIO.
На следующей картинке показана цоколевка модуля Ai-Thinker ESP-C3-32S. Используйте эту диаграмму, если применяете в своих проектах готовый модуль Ai-Thinker ESP-C3-32S.
На следующей картинке показана цоколевка модуля Ai-Thinker ESP-C3-12F. Используйте эту диаграмму, если применяете в своих проектах готовый модуль Ai-Thinker ESP-C3-12F.
На следующей картинке показана цоколевка Ai-Thinker ESP-C3-12F Development board.
Примечание: в настоящий момент существует множество модулей, доступных как от компании Espressif (см. архив [4]), так и от сторонних разработчиков. У этих плат могут отличаться физические размеры, наличие антенны, количество выведенных портов GPIO, и т. п.
[Как лучше всего использовать ножки ESP32-C3]
В зависимости от конкретных условий некоторые выводы с определенными функциями могут подойти, а могут и не подойти для Вашего проекта. В следующей таблице показано, какие выводы лучше использовать как входы, какие как выходы, и какие выводы следует использовать с осторожностью.
Жирным шрифтом в таблице помечены функции по умолчанию. Ножки, помеченные зеленым цветом, можно использовать свободно. Ножки, помеченные желтым, также можно использовать, однако это следует делать с осторожностью, особенно при загрузке. Ножки, помеченные красным цветом, не рекомендуется использовать как входы или выходы.
№
Имя
Тип
Домен питания
Функция
1
LNA_IN
RF
-
Вход малошумящего усилителя и выход передатчика (антенна).
2
VDD3P3
PA
-
Аналоговое питание.
3
-
4
XTAL_32K_P
I/O/T
VDD3P3_RTC
GPIO0, ADC1_CH0, XTAL_32K_P.
5
XTAL_32K_N
GPIO1, ADC1_CH1, XTAL_32K_N.
6
GPIO2
GPIO2, ADC1_CH2, FSPIQ.
7
CHIP_EN
I
1: питание кристалла разрешено, 0: кристалл выключен. Внимание: не оставляйте CHIP_EN никуда не подключенным.
Нижняя площадка меди, предназначенная для заземления и отвода тепла.
Примечания:
(1) PA: аналоговое питание, PD: питание для RTC IO, I: вход, O: выход, T: высокое сопротивление. (2) Помеченные жирным шрифтом функции используются по умолчанию, в том числе во время режима загрузки (SPI boot). (3) Порты для встроенной SPI flash у кристаллов ESP32-C3FN4 и ESP32-C3FH4 назначены следующим образом: CS# = SPICS0, IO0/DI = SPID, IO1/DO = SPIQ, CLK = SPICLK, IO2/WP# = SPIWP, IO3/HOLD# = SPIHD. Эти выводы не рекомендуется использовать для других целей. (4) Для соединений порта данных между ESP32-C3 и внешней памятью flash см. секцию 3.4.2 "Serial Peripheral Interface (SPI)" документа [6]. (5) Информация по функции вывода в этой таблице относится только к некоторым фиксированным функциям, и не покрывает все возможные случаи назначения сигналов, которые можно реализовать с помощью матрицы GPIO. Для дополнительной информации по матрице GPIO, см. главу "IO MUX and GPIO Matrix (GPIO, IO_MUX)" документации [7]. (6) По умолчанию VDD_SPI работает как источник питания для встроенной или внешней памяти SPI flash. В качестве GPIO11 эту ножку можно использовать только когда чип подключен к внешней памяти SPI flash, и эта память получает питание от внешнего источника. (7) Для кристалла ESP32-C3FH4AZ ножки корпуса 19 .. 24 нигде не используются и помечаются как "not connected" (не подключено).
SPI flash и VDD_SPI. На некоторых платах разработки (однако очень редко) могут быть выведены порты GPIO11 .. GPIO17. Однако эти выводы подключены к встроенной памяти SPI flash, где содержится код программы, и их не рекомендуется использовать для других целей.
По умолчанию ножка VDD_SPI используется для питания памяти VDD_SPI. В рабочем режиме это выход встроенного стабилизатора 3.3V, в режиме пониженного энергопотребления на VDD_SPI напряжение отсутствует, чем достигается дополнительное снижение потребляемого тока.
В некоторых случаях может использоваться внешняя память SPI flash, и если не требуется управление её питанием, то ножку VDD_SPI можно использовать как дополнительный порт GPIO11. Для этого необходимо перепрограммировать eFuse-бита VDD_SPI_AS_GPIO [3]. Имейте в виду, что после этого функцию VDD_SPI обратно вернуть будет невозможно!
ADC. ESP32-C3 содержит на кристалле два 12-битных SAR ADC (ADC1 и ADC2), до 6 каналов (для сравнения: у чипа ESP8266 только один 10-битный ADC). Ниже показан список каналов ADC и соответствующие им ножки портов GPIO.
• ADC1 поддерживает измерения на 5 каналах, и он был предварительно откалиброван на заводе. • ADC2 поддерживает измерения на 1 каналах. Он не откалиброван.
PWM. Контроллер LED PWM [2] может одновременно формировать ШИМ-сигналы на 6 независимых каналах, причем каждый канал может быть выведен на любую из ножек порта GPIO. Период и скважность ШИМ можно конфигурировать программно, доступна точность скважности до 18 бит. Сигнал ШИМ может формироваться даже когда CPU находится в режиме пониженного энергопотребления Light-sleep. Контроллер ШИМ может аппаратно реализовать фейдинг (т. е. плавно увеличивать или уменьшать скважность периода ШИМ).
I2C. Интерфейс шины I2C может работать в режимах master или slave, в зависимости от программной конфигурации. Поддерживаются следующие функции I2C:
• Стандартный режим (скорость 100 килобит/сек) и быстрый режим (400 килобит/сек). • Скорость может быть увеличена до 800 килобит/сек, в зависимости от подтягивающих резисторов SCL и SDA и емкостной нагрузки шины. • Режимы адресации 7 бит и 10 бит, с поддержкой двойного режима адресации. • 7-битный широковещательный адрес.
SPI. Чип ESP32-C3 имеет на кристалле 3 интерфейса SPI: SPI0, SPI1, SPI2. SPI0 и SPI1 могут работать только в режиме памяти SPI (SPI Memory mode), и используют одни и те же выводы корпуса. SPI2 может работать как в режиме памяти SPI, так и для подключения любых внешних устройств SPI (general-purpose SPI), с поддержкой до 6 сигналов выборки (CS).
SPI Memory mode. Интерфейсы SPI0 и SPI1 могут работать только в режиме подключения памяти SPI, и они работают как master. Данные передаются байтами. Поддерживается сигналы данных до 4 линий STR на операциях чтения и записи. Тактовая частота конфигурируется, в режиме STR она может быть до 120 МГц.
General-purpose SPI (GP-SPI). Когда SPI2 работает в качестве SPI общего назначения, он может быть сконфигурирован в режимах master и slave. SPI2 поддерживает двухпроводный полнодуплексный обмен, а также одно-/двух-/четырехпроводный полудуплексный обмен в обоих режимах master и slave. Тактовая частота хоста конфигурируется. Данные передаются байтами. Полярность тактов (CPOL) и их фаза (CPHA) также конфигурируется. SPI2 интерфейс можно подсоединить к GDMA.
– В режиме master тактовая частота обычно 80 МГц, и поддерживается 4 режима формата транзакции SPI. – В режиме slave тактовая частота обычно 60 МГц, и также поддерживается 4 режима формата транзакции SPI.
Сответствие между сигналами шины SPI и ножками GPIO показаны в таблице ниже.
Full Dublex SPI
Half Duplex SPI
Сигнал чипа
Функция
Сигналы FSPI
MOSI
MOSI
D
FSPID
MISO
(MISO)
Q
FSPIQ
CS
CS
CS
FSPICS0 .. FSPICS5
CLK
CLK
CLK
FSPICLK
-
-
WP
FSPIWP
-
-
HD
FSPIHD
В большинстве случаев соединение порта данных между ESP32-C3 и внешней SPI flash для 1-/2-/4-проводного режима организуется следующим образом:
Сигнал чипа
SPI Single-Line Mode
SPI Two-Line Mode
SPI Four-Line Mode
SPID
MOSI
IO0
IO0
SPIQ
(MISO)
IO1
IO1
SPIWP
WP#
-
IO2
SPIHD
HOLD#
-
IO3
Датчик температуры. Встроенный сенсор температуры ESP32-C3 генерирует напряжение, которое зависит от температуры кристалла. Это напряжение внутренне преобразовывается с помощью ADC в цифровое значение. Диапазон измерения температуры составляет от –40°C до 125°C. Датчик температуры предназначен главным образом для анализа измерения температуры кристалла, которая может зависеть от многих факторов, таких как частота тактирования, рабочий режим, использования беспроводных соединений и нагрузки выходов. Обычно внутренняя температура кристалла выше, чем температура окружающей среды.
[Выводы управления загрузкой (Strapping Pins)]
Следующие ножки портов GPIO чипа ESP32-C3 могут управлять режимом загрузки программного обеспечения:
GPIO2 GPIO8 GPIO9
Эти выводы используются для активизации режима загрузчика (bootloader mode) ESP32-C3, иногда это называют режимом прошивки (flashing mode). На большинстве плат разработчика со встроенным преобразователем USB-UART не нужно беспокоиться о логическом состоянии этих выводов. Плата переведет эти выводы в нужное состояние, когда необходимо активизировать режим прошивки (flashing mode или boot mode).
Однако если к этим выводам Вы подключили периферийные устройства, то потенциально могут возникнуть проблемы при попытке загрузить новый код, когда нужно прошить SPI flash. Если такие проблемы возникли, то вероятно внешние периферийные устройства устанавливают на этих выводах уровни, которые не дают ESP32-C3 войти в нужный режим. После сброса, прошивки или загрузки эти выводы будут работать так, как ожидалось.
[Выводы, на которых лог. 1 во время загрузки]
Некоторые выводы GPIO при загрузке выводят уровень лог. 1 или выводят сигналы PWM. Это означает, что если Вы подсоединили к таким GPIO другие выходы, то после сброса или загрузки можно получить непредсказуемое поведение ESP32-C3.
Вывод EN (CHIP_EN) управляет работой встроенного регулятора 3.3V. Этот вывод подтянут к лог. 1, и для запрета регулятора 3.3V на него может быть подан лог. 0 (например, если внешняя цепь или кнопка подтянет уровень к GND). Таким образом, ножка EN может использоваться для перезапуска ESP32-C3.