做产品的时候,我曾对ESP32嗤之以鼻,觉得它只不过是一个小玩具,可靠性,易用性,抗干扰等都没办法用来做到实际产品里面,直到后来,小米的一些智能家居用品开始大批量采用,让我稍稍改变了一些观念,但是,我依然不会在产品里面使用它。
不过,ESP的性价比以及可玩性确实非常牛逼,牛逼到我固守着“32们”的顺手经验,都不敢去碰它。因为它看起来相对单片机要复杂。
实在抵挡不住它的高性价比和高可玩度,现在AI又盛行起来,必须要尝试一下。
我从来都不是一个好学生,老老实实的啃几天数据手册也从来不是我的作风,所以直接撸,反正立创打板子免费,手里又有些破烂IC。
我直接按照官方推荐的最小系统设计图复刻了一个,然后右面增加了一个PAN3029的无线收发器。不出所料,乱拳打死老师傅呀,而我就是那个老师傅。
花了半天的时间焊好了三块,0402的小元件,逼瞎了我的眼睛,上电的一瞬间还是颇有成就感,出院两年了,我得手终于不那么抖了。很快,电脑上的USB就弹出了端口6。
要说这esp32还真是方便,直接串口就可以烧写,而且上电就能打印log信息,只要拉低GPIO0上电复位,系统就会进入下载状态,至少到这一步,我们能够确认,板子上电没问题,CP2102也没问题,串口通信也OK。
接下来,怎么开发难住了我,有两个选择,一个是基于vs code的IDF,一个是基于arduino的IDE,由于我从来没使用过arduino,本身也想带孩子学习一下编程,那么首选就是arduino。
在ardiuno的IDE里面,我们需要安装ESP32的开发板,可以从开发板管理器中直接搜索想要的芯片方案。
我选了官方出的这一个,至此,不得不说,这比“32们”搭建环境可方便太多了,这里也有stm32的一些开发板可以选,有空得玩一玩。除此之外,这里还有很多软件库,我简单浏览了一下,非常全面。
我在开发板中随便选了个一个ESP32 S3的板子,找到了最经典的blink工程,编译,下载,一气呵…
嗯? 打不开串口,原来是占用了,关掉其他的串口调试工具。再来一遍。
看来一气呵成挺难的,这里的log显示,没有接收到串口数据,我看上面信息显示,它把波特率改为921600了,会不会是速度太快了呢?或者说没有修改成功?
从上面的chip型号,晶振频率和mac地址来看,串口的收发开始肯定是正常的,那么我只能怀疑是这个921600的波特率的changing有问题,我可以降低这个波特率,既然默认的115200可以读取到mac地址等信息,直接用115200肯定没错。
这里还有很多选项可以设置,后续一定要逐一弄清楚才行,等实践的时候再说,现在顾不上那么多了。编译,下载…
还是有错呀,这次提示说不能够验证Flash的链接,括号里的也挺诡异,依然是没有接收到串口数据。可是前面明明都读到了mac地址等信息。
于是我Google这个No serial data received,chatGPT也问了,deepseek也问了,回答的都很全面,让我检查供电,检查接线,检查flash。
我也顺着Google中的几个帖子开始验证,电源测量没问题,又在电源引脚处堆了几个电容,大的小的都加上,不起作用。
我又将ESP32芯片拆下来,短路了tx和rx,验证了cp2102的功能,可以自发自收。
对于unable to verify flash chip connection,我查了一个小时的帖子,网络上遇到这个的也是五花八门,有的说换一个USB线就好了,因为需要4pin的USB供电线,有的说电源要是用LDO供电,DCDC不行。这些都是国外的帖子,看起来国外玩这个出现问题的都是比较初级的。
看起来没有捷径了,只能去啃手册了。
反复检查电源系统,一共5个地方是电源相关的,只有第五个地方我悬空了,这个地方按理说是对外部接入flash时候供电的。应该没有问题。
我把chip-pu和gpio0的逻辑也反复看了几遍,我的板子能够复位,通过拉低gpio0进入下载模式,这部分也不知道的怀疑。
直到最后,我才关注到自己的SPI用法,最开始画图的时候,我只是按照引脚映射表来规划线路。
从上图可以看出,对于28到35引脚,它们的第一功能F0是默认的SPI连接Flash,F1功能映射就是普通的GPIO了。我本来也像是用GPIO来模拟SPI的。
可气至极的是,官方文档提示:
官方的说明文档里面还有一句话让我误解了
这里得避免应该是说不要的意思,我给理解成尽量不要了。真的不如直接写不要。我就想当然得认为IO映射是可以更改的。
我立即把我的SPI通信的RF芯片拆焊下来,编译,下载。
1893