最近在调试ESP32S3的板子,打样回来调试,更新程序正常但是上电后一直重启,报错误信息如下:
rst:0x3 (RTC_SW_SYS_RST),boot:0x8 (SPI_FAST_FLASH_BOOT) Saved PC:0x403cd98e SPIWP:0xee
线路板布局如下:
正面:
反面:
异常说明:查了网上很多相关的贴子,很多人反馈是电源的问题,我项目是使用6V适配器供电的方案,硬件上开启wifi AP模式用于OTA,开启wifi STA 使用MQTT用于产品数据上报和参数下发设置使用,工作电流较大,因LDO一般电流较小、发热大,不利于产品散热,故采用DCDC降压3.3V给芯片供电。故我也怀疑是DCDC纹波较大,导致产品启动异常,一直报错重启。因此一直在调试DCDC部分,使用示波器抓波形,发现纹波确实比较大,100mV~300MV左右,相比LDO来说纹波确实大很多。于是尝试使用LDO供电,发现问题依旧,并未解决。
解决办法:于是陷入僵局,折腾了大半天换晶振、并1M电阻等等都无明显改善。后来认真看报错信息,“SPIWP:0xee”,是SPI读写报错,难道是芯片工作了,但是flash读写异常导致的,于是看了下电路,发现,时钟和数据线上我都给加了330R的电阻,于是将时钟线电阻改为100R,其他电阻用0R替换,重新上电,板子正常跑起来了。
以上是针对项目异常处理做个记录,esp32确实有它的一些优点,价格便宜,性能强大,但是也发现有不少的坑等着我去踩:
1、上电无限重启或不定时重启,这个问题存在很多可能,大致总结如下:
1.1.硬件设计问题,如电源纹波较大,电磁干扰、flash通讯异常等,处理方式可以先试用外接供电的方式进行排出,程序跑个简单的demo验证,目的是尝试跑起来,确认基本硬件OK与否;
1.2.部分复用功能引脚配置错误或外部异常上下拉电阻配置异常或外部电容设置不合理等,这个主要是芯片的Steapping管脚和内置ram等引脚复用问题引起,稍作确认即可;
1.3.程序问题,此错误最常见的比如异常未处理导致看门狗复位重启,空指针错误等,一般通过打印错误信息可以快速定位,此异常只要确认非硬件问题,相对比较好处理。最头疼的还是硬件问题。
2、EMI问题,这是项目上最头痛的问题,使用esp32开发产品,设计时一定要充分评估此问题。抗干扰测试,电脉冲群测试、ESD静电测试、浪涌雷击测试最好提前先验证下,有问题及时调整设计。
以上大致是使用ESP32上遇到的一些问题总结,希望能让后续的朋友们少踩坑,硬件设计不容易,靠的是平时的积累,软硬结合才能使产品更好更稳定,加油!!