Статья о небольшой эпопее с поиском ошибки в работе WiFi на плате ESP32-C3 SuperMini, с которой пришлось разбираться в процессе отладки кода прошивки для контроллера батареи АКБ (О контроллере батареи ИБП (вопрос к читателям Хабра) и О контроллере батареи ИБП (часть 2)).
Изначально пробовал задействовать в работе ИИ "мешок слов", но без положительного результата. Самые простые примеры кода работают нормально, но как только начинаешь сводить все работающие части в одну прошивку, ИИ с многократными извинениями начинает генерировать неработающий, а зачастую и откровенно неправильный код. В результате множества неудачных попыток пришлось завершить эксперименты с вайб-кодингом и все писать вручную по старинке.
А сама симптоматика проблемы с WiFi следующая: после включения питания и начала авторизации по WiFi плата ESP32-C3 SuperMini через какое-то время зависает, вплоть до срабатывания сторожевого таймера. Поиск решения проблемы в интернете не помог, но было замечено, что в эти моменты на плате очень сильно нагревается стабилизатор напряжения 3.3V, да так, что даже рука не терпит, тогда как при работе тестовых примеров (где WiFi работает нормально) такого эффекта не наблюдается.
Из-за этого решил немного покопать именно в этом направлении.

LLM любезно предоставил ссылки на официальные документы Espressif для ESP32-C3, где указаны токи потребления Wi-Fi:
ESP32-C3 Series Datasheet (PDF): https://www.espressif.com/sites/default/files/documentation/esp32-c3_datasheet_en.pdf
Смотрите раздел Power Consumption / Electrical Characteristics — таблицы с Wi-Fi TX/RX current (передача/приём). Там приведены типичные значения тока для 802.11b/g/n при разных уровнях мощности.ESP32-C3 Hardware Design Guidelines (PDF): https://www.espressif.com/sites/default/files/documentation/esp32-c3_hardware_design_guidelines_en.pdf
В этом документе приведены рекомендации по питанию. Espressif указывает, что источник питания для 3.3 V должен обеспечивать запас по току порядка 500 mA из-за кратковременных пиков при работе радиомодуля (Wi-Fi).
Если посмотреть схему самой платы ESP32-C3 SuperMini

то стабилизатор ME6211 как раз рассчитан на максимальный выходной ток 0.5A, и по даташиту кажется, что все хорошо. Однако если его внимательно почитать, то можно увидеть занятные маркетинговые странности:
Маркетинговые странности LDO стабилизатора ME6211
ME6211 выпускается в нескольких типах корпусов:
3-pin SOT89-3, SOT23-3
4-pin SOT343R, FBP1*1-4L
5-pin SOT23-5, SOT353
6-pin DFN2*2-6L
У которых разная рассеиваемая мощность:
SOT23-5 - 300mW
SOT353 - 250mW
SOT89 - 500mW

Максимальный допустимый ток 500 мА указан как "Maximum Output Current: 500mA (IN =4.3V, V OUT =3.3V)".
Меня сразу смутил какой-то странный уровень входного напряжения 4.3V, но прикинув рассеиваемую мощность (а LDO стабилизатор работает как нагрузочный резистор и рассеивает всю лишнюю мощность на своем корпусе), и если брать для входа стандартные 5 вольт с USB, то мы получаем (5V−3.3V) * 0.5A = 0.85Вт, т.е. больше, чем может рассеивать даже самый большой корпус SOT89, а в моем случае превышение по рассеиваемой мощности для использованного корпуса SOT23-5 получается почти трехкратное!
В самом этом факте нет ничего странного, и если сравнить корпуса SOT23-5 и SOT89, то можно понять, почему последний может рассеивать почти вдвое большую мощность.

SOT23-5 - 300mW - обычный миниатюрный пластмассовый корпус без теплоотвода

Корпус SOT89 - 500mW с небольшим теплоотводом под корпусом
Ну а когда я наткнулся на Обзор режимов сна ESP32 и энергопотребления в них, то практически поверил, что удалось выяснить причину проблемы и что я на правильном пути, (хотя данная статья и относится к ESP32, а не ESP32-C3, которая вроде как специально оптимизированная для пониженного энергопотребления):
Поскольку активный режим постоянно поддерживает все модули в работоспособном состоянии (особенно модуль WiFi, ядра процессора и модуль Bluetooth), для работы микросхемы требуется ток более 240 мА. Также при одновременном использовании WiFi и Bluetooth иногда достигаются пики мощности до 790 мА.
"Верить в наше время нельзя никому, порой даже самому себе."
Правда меня немного смутила табличка потребления ESP32-C3 в зависимости от типа WiFi.
Table 5-7. Wi-Fi Current Consumption Depending on RF Modes
802.11b, 1 Mbps, @21 dBm 335 mA
802.11g, 54 Mbps, @19 dBm 285 mA
802.11n, HT20, MCS7, @18.5 dBm 276 mA
802.11n, HT40, MCS7, @18.5 dBm 278 mA
802.11b/g/n, HT20 84 mA
802.11n, HT40 87mA1.3.2 Power Supply
The general recommendations for power supply design are:
• When using a single power supply, the recommended power supply voltage is 3.3 V and the output current is no less than 500 mA.
• It is suggested to add an ESD protection diode and at least 10 μF capacitor at the power entrance.
The power scheme is shown in ESP32-C3 Series Datasheet > Figure ESP32-C3 Power Scheme.
More information about power supply pins can be found in ESP32-C3 Series Datasheet > Section Power Supply.
В ней хоть и рекомендуется использовать источник тока не менее 500 мА, но такого потребления нет ни в одном из описанных режимов работы, и самое главное, это не должно приводить к зависанию прошивки микроконтроллера!
Более того, при тестировании нескольких плат (чтобы подтвердить, что это системная проблема, а не косяк одной конкретной платы), я выяснил, что у меня в наличии есть два типа ESP32-C3 SuperMini, и одни греются при зависании WiFi, а другие нет.
Пришлось изучать компоненты плат под микроскопом, и сразу выявилось различие в их комплектующих. На платах различался как раз стабилизатор напряжения, хотя вся схемотехника вроде бы полностью одинаковая.

Маркировка на корпусе микросхемы стабилизатора напряжения S2W соответствует микросхеме ME6211, тогда как маркировка LLVB соответствует совершенно другой микросхеме LP5907MFX-3.3.

Причем греются платы ESP32-C3 SuperMini только с последней микросхемой (с маркировкой LLVB), и, открыв на нее даташит, можно понять почему:
Стабилизатор LP5907MFX не является полным аналогом ME6211
Максимальное входное напряжение 5.5 V;
Максимальный выходной ток - 0.25A;
Номинальное выходное напряжение 3.3 В;
Причем эта микросхема имеет встроенную защиту от тепловой перегрузки:
7.3.5 Thermal Overload Protection (TSD)
Thermal shutdown disables the output when the junction temperature rises to approximately 160°C which allows the device to cool. When the junction temperature cools to approximately 145°C, the output circuitry enables.
Based on power dissipation, thermal resistance, and ambient temperature, the thermal protection circuit may cycle on and off. This thermal cycling limits the dissipation of the regulator and protects it from damage as a result of overheating.
The thermal shutdown circuitry of the LP5907 has been designed to protect against temporary thermal overload conditions. The TSD circuitry was not intended to replace proper heat-sinking. Continuously running the LP5907 device into thermal shutdown may degrade device reliability.
Ага, ну теперь все понятно, при перегреве стабилизатор может просто отключаться! Но вот только есть несколько маааленьких нюансов. Температура 60-70°C - это на сотню градусов меньше 160°C, при которой должна срабатывать тепловая защита, да и при остывании до 145°C стабилизатор обратно должен включаться, но самое главное, прибором я не фиксирую отключения питания микроконтроллера! И судя по отладочным логам, происходит не отключение питания, а перезагрузка по сторожевому таймеру.
Другими словами, несмотря на то, что есть серьезные подозрения на схемотехнику и на различия в комплектующих у двух партиях плат, я не могу подтвердить аппаратные проблемы экспериментально, и все указывает именно на программный баг.
Ну что же, отрицательный результат - тоже результат.
Очень смешной итог
Потратив несколько дней на поиск проблем в схемотехнике и убедившись, что железо тут ни при чем, в результате проблема решилась очень просто.
Перелопатив весь код руками и по частям отключая различную функциональность, я локализовал проблему - это оказался программный модуль библиотеки ESP32, предназначенный для вывода логов через USB - usb_serial_jtag_driver, а сами зависания происходят во время вызова функции usb_serial_jtag_write_bytes, когда программный модуль WiFi начинает писать множество диагностических сообщений в логи об инициализации, авторизации на точке доступа и т.д.
И после обновления ESP-IDF на актуальную версию (на момент изучения проблемы это была v5.5.1), WiFi заработал идеально, и проблема с зависанием ESP32-C3 SuperMini при работе по WiFi и с выводом логов через USB исчезла сама собой :-)
Комментарии (6)

413x
17.11.2025 08:02У меня с ESP32-C3 SuperMini еще Wi-Fi стартует не всегда, причем зависит от сложности прошивки вроде как, если прошивка легкая работает стабильно, усложняешь и все, иногда работает, иногда нет. Пробовал клеить на спинку фольгу, по советам, не помогло. Видимо как раз эта проблема. Нагревается тоже иногда.
Arhammon
Насколько я помню не всегда - "просто отключается" при перегреве, может просто обрезать ток и выходное напряжение до некого уровня когда система термостабилизируется.
rsashka Автор
Это было просто предположение, но оно не подтвердилось