[讨论] ESP8266固件完整性检查

dcexpert   2016-8-5 22:39 楼主
在最新的ESP8266固件中(昨天才加入的),提供了固件完整性检查的功能: >>> import esp >>> esp.check_fw() size: 525336 md5: 56c08c1678a4c098048284846b439b6a True 如果最后显示True,代表固件是完整的,否则可能存在问题(即使可以运行)。这次活动的ESP8266模块的固件还不带有这个功能,下周我会提供更新的固件,大家也可以下载官方的固件(esp8266-20160805-v1.8.2-90以后的版本)试试。 本帖最后由 dcexpert 于 2016-8-5 22:43 编辑

回复评论 (7)

如果显示False,最好重新刷一次固件,刷固件前,先清除一次Flash,然后在写入固件。
点赞  2016-8-5 22:40
引用: dcexpert 发表于 2016-8-5 22:40
如果显示False,最好重新刷一次固件,刷固件前,先清除一次Flash,然后在写入固件。

我想请问一下,固件烧写进去,运行不了,出现乱码,怎么解决
点赞  2016-8-5 23:38
引用: qwerghf 发表于 2016-8-5 23:38
我想请问一下,固件烧写进去,运行不了,出现乱码,怎么解决

偶尔会出现这个情况,通常是ESP8266模块内部flash出现错误,这时需要重新刷固件。

如果直接刷还是乱码,通常就需要擦除一次Flash,然后在写固件。在windows下不知道用什么软件擦除,在Linux下用esptools,如:

esptool.py --port /dev/ttyXXX erase_flash
点赞  2016-8-5 23:51
引用: dcexpert 发表于 2016-8-5 23:51
偶尔会出现这个情况,通常是ESP8266模块内部flash出现错误,这时需要重新刷固件。

如果直接刷还是乱码 ...

好的,多谢,我试试
点赞  2016-8-6 00:23
引用: dcexpert 发表于 2016-8-5 23:51
偶尔会出现这个情况,通常是ESP8266模块内部flash出现错误,这时需要重新刷固件。

如果直接刷还是乱码 ...

   print("AP ifconfig:", network.WLAN(network.AP_IF).ifconfig())
    print("Free WiFi driver buffers of type:")
    for i in range(5):
        print("4: 1074791312" (i, esp.esf_free_bufs(i)))
    print("lwIP PCBs:")
    lwip.print_pcbs()


main()
Fatal exception 28(LoadProhibitedCause):
epc1=0x40250b4d, epc2=0x00000000, epc3=0x00000000, excvaddr=0x0000001c, depc=0x00000000

ets Jan  8 2013,rst cause:2, boot mode:(3,6)

load 0x40100000, len 30832, room 16
tail 0
chksum 0x12
load 0x3ffe8000, len 1060, room 8
tail 12
chksum 0xc6
ho 0 tail 12 room 4
load 0x3ffe8430, len 3000, room 12
tail 12
chksum 0xd8
csum 0xd8




    print("AP ifconfig:", network.WLAN(network.AP_IF).ifconfig())
    print("Free WiFi driver buffers of type:")
    for i in range(5):
        print("4: 1074791312" (i, esp.esf_free_bufs(i)))
    print("lwIP PCBs:")
    lwip.print_pcbs()


main()
Fatal exception 28(LoadProhibitedCause):
epc1=0x40250b4d, epc2=0x00000000, epc3=0x00000000, excvaddr=0x0000001c, depc=0x00000000

ets Jan  8 2013,rst cause:2, boot mode:(3,6)

load 0x40100000, len 30832, room 16
tail 0
chksum 0x12
load 0x3ffe8000, len 1060, room 8
tail 12
chksum 0xc6
ho 0 tail 12 room 4
load 0x3ffe8430, len 3000, room 12
tail 12
chksum 0xd8
csum 0xd8
此行乱码
然后重复上面错误

用了此命令擦除还是不行。
esptool.py --port /dev/ttyXXX erase_flash

刷回 esp8266-20160710-v1.8.2.bin 这个版本就不会乱码。之后的全部都会乱码。

esptool.py -p /dev/cu.wchusbserial1410 write_flash 0x00000 ~/Downloads/esp8266-20160807-v1.8.2-104-ga4aaf82.bin
esptool.py v1.1
Connecting...
Running Cesanta flasher stub...
Flash params set to 0x0000
Writing 528384 @ 0x0... 528384 (100 %)
Wrote 528384 bytes at 0x0 in 45.9 seconds (92.2 kbit/s)...
Leaving...


点赞  2016-8-7 20:00
引用: dcexpert 发表于 2016-8-5 23:51
偶尔会出现这个情况,通常是ESP8266模块内部flash出现错误,这时需要重新刷固件。

如果直接刷还是乱码 ...

刷了esp8266-20160805-v1.8.2-90-g7fb3147.bin 这个不乱码,但 chechk_fw 是 False
>>> import esp
>>> esp.check_fw()
size: 527328
md5: de6f1039be64be8932e5931ca211ad6f
False
>>>

点赞  2016-8-7 20:07
引用: szqt 发表于 2016-8-7 20:07
刷了esp8266-20160805-v1.8.2-90-g7fb3147.bin 这个不乱码,但 chechk_fw 是 False
>>> import esp
>>> ...

目前测试看,必须全部清除Flash,校验才会正确。

有时运行esptool.py --port /dev/ttyXXX erase_flash后速度非常快,这时很可能没有真正擦除,可以尝试在擦除一下。一般正常擦除Flash需要2S以上。

出现乱码后,通常擦除Flash可以恢复正常。写入Flash时,注意电源稳定性,有些USB线阻抗较高,容易写入失败。官方的固件,偶然也遇到过出问题的,写入后不能运行,自己重新编译源码却没有问题。

esp.check_fw() 这个功能也是官方刚提供的,感觉还有些不太稳定。
点赞  2016-8-7 21:12
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复