ESP8266 SPI代码段写入问题:如何禁用SDK添加的校验和?
解决ESP8266 WiFi重编程时的校验和错误问题
我来帮你解决这个ESP8266 WiFi重编程时遇到的校验和错误问题。首先,你看到的这个校验和是ESP-IDF SDK默认添加的安全验证机制,bootloader会通过它来确认加载的固件没有损坏或被篡改。要禁用这个校验,你可以按以下几种方式操作:
基于ESP-IDF项目配置修改(推荐)
这是最简便的无代码修改方案:- 在你的ESP-IDF项目目录下,运行
idf.py menuconfig打开配置界面。 - 进入
Component config->Bootloader->Bootloader config选项。 - 找到
Enable firmware checksum validation这一项,取消勾选它。 - 保存配置后,重新编译bootloader和应用固件(执行
idf.py build),烧录新固件后,bootloader就不会再校验固件的校验和了。
- 在你的ESP-IDF项目目录下,运行
修改bootloader源码(自定义场景)
如果你的设备使用的是自定义bootloader,可以直接修改校验逻辑:- 找到bootloader源码中的校验相关文件,通常是
bootloader_common.c或者esp_image_format.c。 - 定位到
esp_image_verify或负责校验和验证的函数,注释掉或移除校验和检查的代码块(比如跳过ESP_IMAGE_VERIFY_CHECKSUM类型的验证步骤)。 - 重新编译bootloader并烧录到设备的bootloader分区(通常对应地址0x1000)。
- 找到bootloader源码中的校验相关文件,通常是
临时修复已导出的SPI数据(不推荐)
如果你不想重新编译固件,只想修改已导出的SPI代码段,可以计算正确的校验和替换错误值,但这种方法容易出错——因为校验和是基于整个固件段计算的,稍有改动就会失效。更稳妥的还是前面两种禁用校验机制的方法。
你提供的重启错误日志如下:
ets Jan 8 2013,rst cause:2, boot mode:(3,7)
load 0x40100000, len 7208, room 16 tail 8 chksum 0x63
load 0x3ffe8408, len 24, room 0 tail 8 chksum 0xea
load 0x3ffe8420, len 3536, room 0 tail 0 chksum 0xff
csum 0xff csum err
ets Jan 8 2013,rst cause:4, boot mode:(3,7)
内容的提问来源于stack exchange,提问作者amin
相关产品推荐
相关产品推荐

