关于市面上某些8266模组无法深度睡眠下唤醒的解决办法
4061N
2024年02月04日 20:28

前情提要:

近日,有一些网友发现自己买的8266(ESP12)模组无法通过GPIO16进行深度睡眠下的唤醒,使得低功耗场景下的应用无法使用。因此我向网友申请一片有问题的样品进行研究。

先说结论:

在8266模组的MOSI引脚和VCC之间接一个上拉电阻即可解决问题(测试时此电阻为100K,测试成功,其他阻值未进行测试)

建议各位开源作者在设计PCB时,加上此电阻,以防玩家们在复刻的时买到的模组不兼容。

此问题的研究历程:

首先是找到ESP12F模组的原理图

图片来源:https://docs.ai-thinker.com/ (安信可官网)

经过网友测量,不能工作的模组其原理图是没问题的,GPIO16下拉正常,手动下拉RST引脚也可以正常唤醒,但GPIO16的信号无法唤醒芯片。利用三极管放大GPIO16上电流依旧无法解决问题。经示波器探测,GPIO16上具有正常的40us下拉电平。

GPIO16(连接到RST)上测到的下拉脉冲

网友发现在唤醒失败时8266在串口正常打印了boot信息,但似乎未加载flash。可以认为8266是卡在了加载flash这一步。

在这样的情况下,我首先关注的是flash芯片,这个无法工作的模组上使用的并不是我以前买的8266里面使用的华邦,而是博雅的flash。

(疑似盗版)模组内的flash芯片

更换flash后,发现原本不正常的模组可以正常工作。因此可以认为flash存在问题。但阅读规格书后,我发现博雅的flash和华邦的ID一致,并不存在芯片ID识别错误的可能。

将flash换回,经测量发现,8266卡住以后,flash的引脚上依旧有波形,说明8266在尝试读flash,或至少可以认为8266是正常工作了,但并没有和flash兼容。

flash引脚上的波形

此时我将flash的六路信号接入逻辑分析仪准备进行测试,正当我烦恼逻辑分析仪的上位机无法正常解析SPI数据时,我发现8266可以正常唤醒了。因此我又执行进一步测试,将逻辑分析仪上的线一根根拔掉,看是否为逻辑分析仪内电阻使得8266恢复了工作。当拔掉MOSI上的线时,8266停止了工作,插回去可以工作,这时可以确认当MOSI有上下拉电阻时8266可以工作。

因此,我后续将100K电阻在MOSI分别上拉和下拉,经测试,下拉到GND没有效果,上拉至3.3V时8266恢复了工作。至此问题成功解决。

后续猜测:

我认为可能是两种flash内部上下拉问题,或是对于浮空电平的处理方式不同,导致了8266在深睡眠后flash陷入异常工作状态。因为在测试时手边没有万用表,未经过测量,所以还不确定。