我最近在移植一套esp32程序,因为在S3上面跑起来很吃力,于是换成了乐鑫官方新出品得P4,但是烧录官方小demo---hello world时,出现了MD5验证失败的报错。
Writing 'bootloader/bootloader.bin' at 0x00002000...
SHA digest in image updated. Flash will be erased from 0x00002000 to 0x00007fff...
Wrote 24000 bytes (14674 compressed) at 0x00002000 in 0.1 seconds (2220.3 kbit/s). Input MD5: 8e8afb41f2e50c0cb8c737041e215c55 Flash
MD5: 9aa1578b5c18bc6c41323ed38c390b02
Hard resetting via RTS pin...
A fatal error occurred: MD5 of file does not match data in flash!
问AI,说的时flush电压不足,数据线有问题等这些硬件问题。
使用乐鑫官方的下载器,
结果还是一样的问题。
于是我尝试清空flush
这里可以看到flush已经成功被清空了的,于是我重新编译,下载。
菩萨保佑一下吧。
还是不成功!!!
老天,如果我有罪,请打电话告诉我。
看来不是硬件的问题,那有没有可能是程序的问题呢?
可以一个循环打印
能有什么错呢。
于是我上了csdn一查到底,大家遇到这个问题怎么做的呢
有连锡的,有供电电压不足的等等等等。。。。
我反复查看并没有连锡漏焊搭错线,电表打了电压也正常,其他的也不符合我这个场景。
资源好少哦,我之前很少接触到esp32的芯片,有点 犯难。
遇事不决,问AI。
但不知道是我关键字不对还是ai太笨,结果跟之前还是一样。
于是换了一个方向,就找flush。
查了手册,翻了官方的Q&A.
原来有两种烧录模式:Stub flasher(默认模式)和--no-stub模式
- Stub flasher(默认模式):通过芯片的 SPI 控制器写入 →写入失败(MD5 不匹配)
--no-stub模式:使用 ROM bootloader 的原始写入程序 →写入成功(Hash verified
而我使用的芯片为ESP32P4的v1.3版本。
直接在控制台输入
idf.py -p COM21 flash --no-stub
成功了,烧录进去了,但是我这个会不断重启。
原来是时钟初始化总是崩溃。
v1.3 芯片可能不支持 400MHz CPU 频率。需要改到360MHz:
具体的原因是:
32MB Flash 与 esptool stub flasher 不兼容
Stub flasher(默认模式)是上传到芯片 RAM 的一个小程序,它通过芯片的 SPI 控制器来写 Flash。但它对>16MB 的 Flash 支持不完善——能擦除,但写入时数据实际没写进去,校验自然失败。
--no-stub模式直接调用芯片 ROM 中固化的烧录程序,这些程序能正确处理 32MB Flash,所以写入和校验都成功。
至此,程序已经能正确烧写到板子能正常运行了。
但是还是有很多地方不是很理解,以后都得这样操作一遍吗,不利于记忆,长记性。
于是我深度挖掘。
第一步,打开配置器,
第二步:将安全下载关闭,保存
接下来是设置芯片版本,官方默认是最新的版本,V3.0以上。
我使用的是上一代的版本,为V1.3。
在终端输入 idf.py menuconfig
进入如下界面
选择Component config
选择Hardware Settings
选择Chip revision
移到图表所示,按空格选中,根据自己手上的芯片版本进行选择
再设置最小版本支持
最后按 s 保存 ,q 退出。
重新编译,下载。
成功。
正确打印。
谢谢哦~