1、乐鑫官方例程
ESP32的OTA 例程是基于HTTP接口,需要连接WIFI和HTTP服务器,使用上不是很灵活,根据ESP32 idf component OTA相关API接口,理论上可以通过任何通信方式和协议进行升级,只要保证文件传输准确、flash空间足够、partitions文件flash布局合理就可以升级成功。
2、升级过程中出现:
bin文件传输完成,更新加载时报错:esp_image: invalid segment length 0x…/或者其他加载错误
3、问题分析
a、USB协议使用ymodem协议无问题,文件能够传输完成,文件传输长度正常
b、升级失败,通过esptool.py -p com5 -b 460800 read_flash 0x210000(地址) 0x200000(长度) flash_ota0.bin读取flash OTA写入的固件,发现写入到flash的固件和源文件不一致;
c、经过USB接收打印和OTA flash写入打印,定位到接收数据后,放入USB自定义的队列(由于ESP32接收到的数据是按每包64字节接收的,所以自己做了一个队列,每收到一包64字节就放入队列,通过超时机制–超过10ms没收到USB包,来判断一帧数据是否结束,然后对一帧数据进行处理),从队列取出数据的时候发生数据异常,导致写入的数据错误,在写入完成加载新固件时,升级失败报错,各种校验错误和加载错误