乐鑫技术交流
直播中

七上八下

9年用户 905经验值
私信 关注
[问答]

ESP8266_RTOS在线升级FOTA CRC遇到的疑问求解

背景:用ESP8266模组,云端自己搭建(参考Upgrade.c文件)。
问题:
1. 做FOTA时,从Server端下载文件成功,但调用upgrade_crc_check函数时,计算出来的img_crc不正确。读出来的flash_crc正确。
2. 有时候编译出来的user1.bin或者user2.bin放在Server端,进行在线升级时,img_crc又是正确的。
问题2,是非常令我困惑的地方。要么img_crc总是不正确,为何有时候又是正确的呢?程序只是增加了一个串口打印。
                                 

回帖(1)

发财树

2024-7-15 16:54:04
问题1:在做FOTA时,从Server端下载文件成功,但调用upgrade_crc_check函数时,计算出来的img_crc不正确。

可能的原因及解决方法:

1. 检查升级文件的完整性:确保从Server端下载的文件没有损坏或丢失数据。可以尝试重新下载文件或检查网络连接。

2. 检查升级文件的格式:确保升级文件的格式正确,例如是否为二进制文件。如果文件格式不正确,可能导致CRC校验失败。

3. 检查升级过程中的数据传输:在升级过程中,可能存在数据传输错误。可以检查串口通信是否稳定,或者尝试使用其他通信方式。

4. 检查升级函数的实现:检查升级_crc_check函数的实现是否正确,确保CRC计算方法与文件生成时使用的CRC算法一致。

问题2:有时候编译出来的user1.bin或者user2.bin放在Server端,进行在线升级时,img_crc又是正确的。

可能的原因:

1. 随机性:有时候编译出来的文件可能由于某些随机因素(如编译器优化、内存布局等)导致CRC校验正确。这种情况下,问题可能不是持续出现的,而是偶尔发生。

2. 编译器或环境差异:不同的编译器或编译环境可能导致生成的文件略有差异,从而影响CRC校验结果。可以尝试在相同的编译器和环境下重新编译文件。

3. 代码逻辑问题:可能存在代码逻辑问题,导致在某些情况下CRC校验正确,而在其他情况下不正确。检查代码逻辑,确保在所有情况下都能正确计算CRC。

4. 硬件问题:如果ESP8266模组存在硬件问题,可能导致数据传输错误或CRC校验失败。可以尝试更换模组或检查硬件连接。

建议:

1. 对比正确和错误的升级文件,找出差异,并分析可能的原因。

2. 在升级过程中增加日志输出,记录关键步骤的状态,以便分析问题。

3. 确保升级文件的生成、传输和校验过程都使用相同的CRC算法。

4. 如果问题仍然存在,可以尝试寻求社区或专业人士的帮助。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分