1> 在PC端,生成测试程序(从Esp8266源码中抽出upgrade相关代码,直接调用upgrade_crc_check函数)计算CRC值。发现生成的CRC值和用Esp8266编译出来的CRC值有时候相等,有时候不等。
2> 怀疑是Esp8266编译产生的CRC有问题,跟踪makefile文件。发现Esp8266生成bin文件后,是通过调用\tools\gen_appbin.py脚本产生CRC。
3> 对\tools\gen_appbin.py脚本单独进行测试,发现问题出在函数gen_appbin()的最后对all_bin_crc的判断上:
if boot_mode == '1' or boot_mode == '2':
all_bin_crc = getFileCRC(flash_bin_name)
if all_bin_crc < 0:
all_bin_crc = abs(all_bin_crc) - 1
else :
all_bin_crc = abs(all_bin_crc) + 1
print "bin crc: %x"%all_bin_crc
如果all_bin_crc < 0,那么计算出的CRC就是正确的,否则错误。这就是为何有时候CRC相等,有时候不等的原因。
4> 修改上述代码为如下,CRC问题解决。
if boot_mode == '1' or boot_mode == '2':
all_bin_crc = getFileCRC(flash_bin_name)
all_bin_crc = ~all_bin_crc

Statistics: Posted by John Liu — Thu Jul 19, 2018 3:03 pm
]]>