
我最近在移植一套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 FlashMD5: 9aa1578b5c18bc6c41323ed38c390b02Hard 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。查了手册翻了官方的QA.原来有两种烧录模式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 退出。重新编译下载。成功。正确打印。谢谢哦~