ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

ESP32-S3开发板硬件设计指南:供电、引脚与USB OTG双模详解

ESP32-S3开发板硬件设计指南:供电、引脚与USB OTG双模详解 1. 从一块板子的供电说起为什么ESP32-S3的电源设计值得单独拎出来讲拿到一块ESP32-S3开发板很多人第一反应是直接插上USB线打开IDE跑个Blink例程看到灯闪了就认为“板子没问题”。但如果你做过稍微复杂一点的项目比如带摄像头、接多个传感器、跑WiFi加蓝牙同时工作就会发现一个很现实的问题板子跑着跑着就重启了串口打印出一堆莫名其妙的复位原因甚至有时候连烧录都烧不进去。这些问题十有八九跟供电设计脱不了干系。ESP32-S3这颗芯片本身的功耗管理已经做得相当精细了它支持多种低功耗模式深度睡眠下电流可以压到微安级别。但问题在于开发板不是只有一颗芯片。板子上还有USB转串口芯片、LDO稳压器、RGB灯、按键上拉电阻、Flash和PSRAM芯片等等。这些东西加在一起静态功耗就不容忽视。更关键的是当WiFi射频开始工作的时候瞬时电流可以冲到几百毫安如果电源设计余量不够或者去耦电容布局不合理电压就会瞬间跌落触发芯片的欠压复位。我见过不少朋友在调试ESP32-S3摄像头应用的时候用一根劣质的USB线供电结果图像传输到一半就断连。换了一根线径粗、屏蔽好的线之后问题消失。这不是玄学是实实在在的电源完整性问题。所以这篇内容我想从硬件层面把ESP32-S3开发板的供电架构、引脚设计、USB OTG双模这几个核心点拆开来讲清楚让你在选板子和用板子的时候心里有数。注意本文讨论的是ESP32-S3开发板的通用硬件设计思路不同厂商的具体实现可能有差异但核心原理是相通的。2. 供电架构的层层拆解从USB口到芯片引脚都经历了什么2.1 三种典型供电入口的取舍逻辑ESP32-S3开发板常见的供电方式有三种USB Type-C口供电、5V排针供电、以及3.3V直接输入。这三种方式看起来只是接口不同但背后的电路设计考量完全不一样。USB Type-C口供电是最常用的方式。Type-C接口的VBUS引脚默认提供5V电压这个5V经过板载LDO或者DC-DC降压到3.3V给ESP32-S3和外围器件使用。这里有一个容易被忽略的细节Type-C接口有CC1和CC2两个配置通道引脚如果板子上没有正确放置5.1kΩ的下拉电阻那么使用C-to-C线缆连接某些电源适配器时适配器可能不会输出5V。我实测过好几块不同厂家的ESP32-S3板子有些便宜板子为了省成本CC引脚的下拉电阻用的是10kΩ甚至直接省略导致用某些氮化镓充电器供电时完全没反应但换A-to-C线就正常。这个坑在选板子的时候很难从商品页面看出来只能拿到手用C-to-C线测一下。5V排针供电通常用于嵌入式系统集成场景比如你的主控板通过排针给ESP32-S3模块供电。这时候要注意的是5V排针一般直接连到LDO的输入端和USB的VBUS是同一节点。如果你同时插着USB线和5V排针就相当于两个电源并联。虽然大多数LDO有反向保护但长期这样用并不是好习惯。更稳妥的做法是只用一个供电入口或者用跳线帽/二极管做电源路径管理。3.3V直接输入这种方式最容易被误用。有些板子标注了“3.3V”排针但这个引脚可能是LDO的输出端也可能是直接连到芯片VDD的输入端。如果是前者你从外部灌3.3V进去等于在跟LDO的输出打架如果是后者你灌进去的3.3V必须非常干净因为ESP32-S3对电源纹波很敏感。我一般不建议新手用这种方式供电除非你明确知道自己在做什么。2.2 LDO还是DC-DC效率与噪声的博弈ESP32-S3开发板上最常见的稳压方案是LDO低压差线性稳压器比如AMS1117-3.3或者RT9013。LDO的优点是输出噪声低、外围电路简单、成本便宜。但它的致命缺点是效率低。当输入5V、输出3.3V时理论效率只有66%剩下的34%全部变成热量。如果板子上还有WiFi射频在工作电流需求增大LDO发热会更严重。我拿热成像仪测过一块用AMS1117的ESP32-S3板子在WiFi持续传输的情况下LDO表面温度能到70多度手摸上去烫得不行。虽然芯片本身有热保护但长期高温工作会缩短寿命也会让周围的电解电容加速老化。相比之下DC-DC降压芯片的效率可以做到90%以上发热小很多。但DC-DC的开关噪声如果处理不好会耦合到射频电路里导致WiFi接收灵敏度下降。所以好的开发板设计会在DC-DC输出后面再加一级LDO或者LC滤波把噪声压下去。你在选板子的时候可以留意一下如果板子上只有一个SOT-223封装的LDO那大概率是线性稳压如果有电感加DC-DC芯片的组合那就是开关电源方案。稳压方案效率5V转3.3V输出噪声发热量成本适用场景LDO约66%低大低小电流、对噪声敏感DC-DC约90%较高小中大电流、电池供电DC-DCLDO约85%低中高射频应用、高要求场景2.3 去耦电容的布局看不见但决定成败ESP32-S3的电源引脚旁边必须放置去耦电容这是硬件设计的基本功。但“放了”和“放对了”是两回事。芯片的VDD3P3引脚需要0.1μF和10μF的组合0.1μF负责滤高频噪声10μF负责应对瞬态电流需求。关键是这两个电容要尽可能靠近引脚走线要短而粗。我拆过一块出问题的板子去耦电容离芯片引脚有将近1厘米远走线还是细的。结果就是WiFi一工作就复位。后来把电容挪到引脚旁边问题立刻消失。这个细节在原理图上完全看不出来只有看PCB布局才能发现。所以如果你在调试时遇到莫名其妙的复位不妨用放大镜看看去耦电容的位置。另外ESP32-S3的模拟电源引脚VDDA对噪声特别敏感通常需要单独的LC滤波。有些板子为了省事直接把VDDA和数字电源接在一起结果就是ADC采样值跳动很大触摸按键误触发。如果你要做模拟信号采集或者触摸应用这一点必须注意。3. 引脚设计的门道哪些引脚能随便用哪些碰了会出事3.1 Strapping引脚上电瞬间的“命运决定者”ESP32-S3有几个Strapping引脚这些引脚在上电复位的那一刻会被芯片采样决定启动模式。具体来说GPIO0、GPIO3、GPIO45、GPIO46这几个引脚在复位时会决定芯片是从Flash启动还是进入下载模式以及电压域的选择。问题在于很多开发板把这些引脚直接引出来给用户用但没有在板子上做明确标注。如果你在GPIO0上接了一个外部电路比如按键或者传感器而这个电路在上电时把GPIO0拉低了芯片就会进入下载模式你的程序根本不会运行。我遇到过好几次客户说板子“坏了”程序不跑结果一查是GPIO0上接的传感器在上电时输出低电平。所以我的建议是拿到一块ESP32-S3板子第一件事就是查清楚哪些引脚是Strapping引脚然后在你的电路设计里避开它们或者确保外部电路不会在上电时干扰它们的状态。如果非要用加一个跳线帽或者拨码开关调试的时候断开。3.2 USB OTG引脚D和D-的隐藏功能ESP32-S3支持USB OTG也就是说它既可以当USB设备比如虚拟串口、HID键盘也可以当USB主机比如读取U盘、连接摄像头。这个功能对应的引脚是GPIO19D-和GPIO20D。这两个引脚在芯片内部有专用的USB PHY不需要外部转换芯片。但这里有一个设计上的取舍当你把GPIO19和GPIO20用作USB OTG的时候就不能同时用作普通的GPIO或者ADC了。有些开发板把这两个引脚同时引到排针和USB口上如果你在排针上接了其他电路可能会干扰USB通信。我见过一个案例用户在GPIO19上接了一个LED结果USB枚举时不时失败。原因是LED的限流电阻和USB的阻抗匹配网络形成了分压导致D-信号电平不达标。另外USB OTG的VBUS检测也很关键。当ESP32-S3作为USB主机时它需要检测VBUS是否存在以判断是否有设备插入。有些板子用GPIO38或者别的引脚来做VBUS检测这个引脚的电平必须和VBUS同步。如果检测引脚的电平不对芯片就不知道设备插入了。3.3 特殊功能引脚JTAG、ADC和触摸的分配ESP32-S3的JTAG调试接口默认使用GPIO39到GPIO42。这四个引脚在芯片复位后默认是JTAG功能但也可以配置成普通GPIO。如果你不需要硬件调试可以把它们当普通IO用。但要注意一旦你把这些引脚配置成其他功能下次想用JTAG调试就需要特殊的时序来切换比较麻烦。ADC引脚方面ESP32-S3有两组ADCADC1和ADC2。ADC2在WiFi工作时会被占用所以如果你要同时用WiFi和ADC只能用ADC1的通道。这个限制在官方文档里有写但很多人不看文档直接用了ADC2结果WiFi一开ADC就读不准。触摸引脚有14个分布在GPIO1到GPIO14之间。触摸功能对PCB布局和周围走线很敏感如果触摸引脚旁边有高频信号线触摸读数会跳得很厉害。我在设计触摸应用的时候通常会在触摸引脚周围做一圈接地保护环并且远离WiFi天线区域。引脚类型典型GPIO注意事项StrappingGPIO0/3/45/46上电时电平决定启动模式避免外部干扰USB OTGGPIO19/20用作USB时不能复用为其他功能JTAGGPIO39-42默认调试功能可复用但切换麻烦ADC2GPIO11-20WiFi工作时不可用触摸GPIO1-14对布局敏感需远离高频信号4. USB OTG双模设计一块板子同时当主机和设备的实现细节4.1 设备模式虚拟串口和HID的配置要点ESP32-S3作为USB设备时最常用的功能是虚拟串口CDC-ACM和HID设备。虚拟串口的好处是你不需要额外的USB转串口芯片直接通过USB线就能看到串口输出。但这里有一个坑很多开发板同时板载了USB转串口芯片比如CH340或CP2102和ESP32-S3的原生USB口。如果你两个口都插上电脑上会出现两个串口你分不清哪个是哪个。我的做法是在设备管理器里看VID和PID。原生USB的VID是303A乐鑫的厂商ID而CH340的VID是1A86CP2102的VID是10C4。认准303A那个就是原生USB。另外原生USB虚拟串口在芯片刚上电时可能还没枚举完成你需要等一两秒再打开串口监视器否则会看到乱码。HID设备模式适合做键盘、鼠标或者自定义的人机交互设备。配置的时候要注意报告描述符的编写这个描述符告诉主机你的设备是什么类型、有多少个按键、每个按键的用途。报告描述符写错了主机就识别不了。我建议用现成的库比如TinyUSB它提供了HID的模板改一改就能用。4.2 主机模式供电和信号完整性的双重挑战当ESP32-S3作为USB主机时它需要给外设供电。USB 2.0标准要求主机端口提供至少500mA的电流。ESP32-S3的VBUS引脚本身不输出电源你需要外部电路来提供5V。常见的做法是用一个MOS管或者负载开关由GPIO控制通断。这里的关键问题是当外设插入时浪涌电流可能很大。比如U盘插入的瞬间电流可能冲到1A以上。如果电源设计没有余量电压就会跌落导致ESP32-S3自己复位。我实测过用一块普通的ESP32-S3板子接U盘插入瞬间3.3V轨电压从3.3V掉到2.8V芯片直接重启。后来在VBUS上并联了一个470μF的电解电容问题才解决。信号完整性方面USB的D和D-需要90Ω的差分阻抗。如果PCB走线没有控制阻抗或者走线太长、有分支眼图就会闭合通信误码率上升。我见过一块板子USB走线绕了半个板子结果U盘识别率只有50%。所以如果你要自己设计板子USB走线尽量短尽量直差分对要等长。4.3 双模切换硬件和软件如何配合有些开发板设计了USB OTG的双模切换也就是说同一个USB口既可以当设备也可以当主机。这种设计通常需要一个ID引脚来判断插入的是什么。但在Type-C接口上ID引脚被CC引脚取代了所以需要额外的电路来检测CC的方向。软件层面ESP32-S3的USB PHY支持动态切换模式。你可以在运行时通过寄存器配置来切换主机和设备模式。但切换的时候需要重新枚举也就是说如果正在传输数据切换会导致连接断开。所以实际应用中通常是在启动时根据某个GPIO的状态来决定模式而不是运行时动态切换。我个人的经验是如果你要做双模应用最好用两个独立的USB口一个专门做设备一个专门做主机。这样硬件设计简单软件也不用处理切换逻辑。虽然多占一点PCB面积但稳定性好很多。5. 从原理图到实物几个容易翻车的实操细节5.1 电源指示灯的电流陷阱几乎每块开发板上都有电源指示灯通常是一个LED串联一个电阻接在3.3V和GND之间。这个电路看起来人畜无害但如果你用电池供电这个LED可能就是你续航时间短的原因。一个普通的0603封装LED亮度调到可见的程度电流大概在2mA到5mA。听起来不多但如果你的应用大部分时间在深度睡眠ESP32-S3睡眠电流只有几十微安这个LED的电流就是睡眠电流的几十倍。我做过一个电池供电的传感器项目一开始没注意LED实测待机电流3mA算下来一节2000mAh的电池只能撑不到一个月。后来把LED拆了待机电流降到80μA续航直接拉到两年。所以如果你做低功耗项目第一件事就是把电源指示灯去掉或者用MOS管控制它只在需要的时候亮。5.2 排针焊接的冷焊问题ESP32-S3开发板的排针通常是用户自己焊接的。我见过太多因为排针焊接不良导致的问题时好时坏、轻轻一碰就复位、某个引脚完全没信号。冷焊是罪魁祸首。冷焊的外观特征是焊点表面粗糙、有气孔、不光滑看起来像豆腐渣。正确的焊接方法是烙铁温度调到350度左右先给焊盘和引脚分别上锡然后把引脚按在焊盘上烙铁头同时接触引脚和焊盘等锡融化后迅速移开。一个合格的焊点应该是光滑的圆锥形表面有金属光泽。如果你焊完发现焊点发黑或者呈球状那就是温度不够或者焊接时间太短。提示焊接排针的时候可以先焊对角两个引脚固定然后再焊其余引脚。这样排针不会歪。5.3 天线区域的“禁区”ESP32-S3开发板通常板载PCB天线或者IPEX接口。如果你用的是PCB天线板子边缘那块没有铺铜的区域就是天线辐射区。这个区域绝对不能放金属物体也不能用手直接按住。我见过一个案例用户把开发板装在一个金属盒子里结果WiFi信号几乎为零。后来把盒子换成塑料的信号满格。另外如果你在开发板旁边放锂电池或者金属支架也会影响天线性能。天线周围至少要保持15mm以上的净空区域。如果你要做产品最好把天线放在板子边缘并且外壳对应位置不要有金属涂层。5.4 复位电路的可靠性设计ESP32-S3的复位引脚是CHIP_PU低电平复位。开发板上通常有一个复位按键和一个RC电路。RC电路的作用是保证上电时CHIP_PU保持低电平足够长的时间让电源稳定后再释放复位。如果RC时间常数太小电源还没稳芯片就开始运行可能导致启动失败。我测过一块板子上电时CHIP_PU的电压上升时间只有100微秒结果芯片偶尔启动不了。后来把电容从0.1μF换成1μF上升时间变成1毫秒问题解决。所以如果你自己设计板子复位电路的RC参数不要随便抄要根据电源的上升时间来算。6. 调试实录一次USB主机识别失败的完整排查过程6.1 现象描述与初步判断前段时间帮朋友调一块ESP32-S3板子现象是作为USB主机连接U盘时有时候能识别有时候识别不了。识别不了的时候串口打印“USB device not responding”。用示波器看VBUS发现插入U盘的瞬间VBUS从5V掉到4.2V然后慢慢恢复。初步判断是电源带载能力不足。U盘插入瞬间的浪涌电流导致VBUS跌落ESP32-S3的USB PHY检测到VBUS低于阈值就放弃了枚举。6.2 逐步排查从电源到信号第一步检查VBUS的供电路径。板子上VBUS来自一个SOT-23封装的P沟道MOS管导通电阻大约50mΩ。U盘工作电流按200mA算MOS管上的压降只有10mV不是问题。问题在于MOS管前面的5V电源来自LDO而LDO的输入是USB口的5V。USB口本身能提供500mA但LDO的限流可能更低。第二步测LDO的输出电流能力。查手册这颗LDO的最大输出电流是300mA。U盘插入瞬间的浪涌电流可能超过500mALDO进入限流模式输出电压跌落。这就解释了为什么VBUS会掉到4.2V。第三步检查去耦电容。VBUS上只有一个10μF的陶瓷电容储能不够。浪涌电流一来电容上的电荷瞬间被抽走电压就掉了。6.3 解决方案与验证方案一换一颗输出电流更大的LDO比如500mA或者1A的。但LDO发热会更大需要评估散热。方案二在VBUS上并联一个大容量电解电容比如470μF。电解电容的等效串联电阻比较大但对低频浪涌的储能效果好。方案三在VBUS和U盘之间加一个负载开关带软启动功能。软启动可以限制浪涌电流的上升速率避免电压跌落。我选了方案二加方案三的组合并联470μF电解电容同时用一颗带软启动的负载开关。改完之后插入U盘的瞬间VBUS最低只掉到4.8V识别率100%。连续插拔50次没有一次失败。6.4 经验总结USB主机设计的检查清单从这次排查中我整理了一个USB主机设计的检查清单供你参考VBUS的供电源必须能提供至少500mA的持续电流瞬态电流要能到1AVBUS上至少要有100μF以上的储能电容电解电容和陶瓷电容组合使用如果供电源有限流要确认限流值大于U盘的浪涌电流USB差分对的走线要控制90Ω阻抗长度尽量短VBUS检测引脚的响应时间要足够快能捕捉到插入瞬间的电平变化软件上要加超时重试机制枚举失败后自动重试这个清单我后来用在了好几个项目上再也没有遇到过USB主机识别不稳定的问题。7. 选板子时我会重点看的几个硬件指标市面上ESP32-S3开发板很多价格从二十几块到两三百都有。抛开品牌溢价从硬件角度我会重点看这几个指标。第一看电源方案。如果板子上只有一颗AMS1117那基本可以判断是大电流场景下会发热的。如果用了DC-DC加LDO的组合说明厂家在电源上下了功夫。你可以看板子背面有没有电感有电感的基本就是DC-DC。第二看USB口的设计。如果板子有两个Type-C口一个标UART一个标USB那说明原生USB和转串口是分开的用起来方便。如果只有一个口那大概率是通过跳线或者模拟开关来切换的灵活性差一些。第三看引脚标注。好的板子会在丝印上标注每个引脚的功能包括Strapping引脚、ADC通道、触摸通道。有些板子只标GPIO编号用的时候还要查手册很麻烦。第四看天线设计。PCB天线的板子成本低但增益一般。IPEX接口的板子可以外接天线适合需要远距离通信的场景。如果你要做产品建议选IPEX接口的方便做天线匹配。第五看去耦电容的布局。这个只能拿到实物才能看但你可以从板子的照片上大致判断。如果芯片周围的电容排列整齐、靠近引脚说明 layout 做得不错。第六看复位和启动电路。有没有复位按键有没有BOOT按键这两个按键在调试的时候太重要了。没有BOOT按键的板子烧录的时候要手动短接引脚很痛苦。8. 写在最后一些零散但有用的经验关于ESP32-S3开发板的硬件设计还有一些零散的经验想分享。第一如果你要用电池供电选板子的时候注意看有没有电池管理芯片。有些板子集成了TP4056充电芯片和电池保护电路直接接锂电池就能用。没有的话你需要外接充电模块麻烦一些。第二ESP32-S3的GPIO在复位后的默认状态各不相同。有些是高电平有些是低电平有些是浮空。如果你用某个GPIO控制继电器或者MOS管一定要确认复位期间的状态不会导致误动作。我见过一个案例GPIO默认输出高电平结果上电瞬间继电器就吸合了差点出事故。第三关于烧录失败的问题。如果你遇到“Failed to connect to ESP32-S3”的错误先检查是不是GPIO0被拉低了再检查USB线是不是只供电不传数据的那种。有些便宜的USB线只有电源线没有数据线插上能亮灯但电脑识别不到串口。第四ESP32-S3的Flash和PSRAM是共享SPI总线的。如果你同时使用Flash和PSRAM要注意时序配置。有些板子用了高速PSRAM但Flash的时序没跟上导致程序跑飞。这种情况通常需要调整SPI的时钟频率或者等待周期。第五关于散热。如果你要做长时间高负载运行比如持续跑神经网络推理建议给芯片加一个小散热片。ESP32-S3在满负荷运行时功耗大概1W左右芯片表面温度能到60度以上。虽然不至于烧坏但高温会影响WiFi性能和Flash寿命。这些经验都是我在实际项目中踩坑踩出来的希望能帮你少走一些弯路。硬件设计这件事原理图上看不出问题的地方往往才是最容易出问题的地方。多测、多看、多动手比看一百遍文档都管用。
返回列表