esp8266~启动模式和烧写错误

1. error magic! backup boot failed

在使用8266时遇到了如下错误:
esp8266~启动模式和烧写错误_第1张图片
找个一早上在群里面发问,原来是烧写工具配置时出错了,flashsize莫名的选错了!
2Mb = 16Mbit。

2. boot

8266启动日志分析,程序上电之后运行的大概流程:

  1. boot模式选择
  2. 加载ram rom,校验flash是否完成
  3. boot跳转到用户区,运行程序
  4. rf初始化、扇区选择,下面是正常的user_init里面的程序

ESP8266有三种BOOT模式,由MTDO(GPIO15),GPIO0,GPIO2共同决定。boot mode:(3,7)中的3代表从flash启动,1则代表通过串口烧写代码。具体的boot过程,参考Github。

MTDO GPIO0 GPIO2 Mode Description
L L H UART Download code from UART
L H H Flash Boot from SPI Flash
H x x SDIO Boot from SD-card

3. waiting for host

和硬件工程师联调项目,esp8266启动之后打印:

ets Jan 8 2013,rst cause:2, boot mode:(7,7)
waiting for host

wifi模块没启动起来正常工作,百度查询了下,就是因为IO 15被拉高了,正常工作时需要将 ESP8266 的 boot模式切换到 flash boot,即 GPIO15→0, GPIO0→1, GPIO2→1。
更详细的,可以参考百度贴吧。还有就是8266一定要单独供电或者外接电源,不要使用usb下载器供电,我之前测量gpio
的波形时也发现,usb供电的波形居然是不规则的锯齿形状。

4. 怎么控制8266运行user1还是user2?

平时使用download烧写程序时,擦除flash,下载user1、user2后,程序默认是从user1启动的,如果擦除之后只下载user2,8266会boot失败之后reboot,看门狗复位跳转到@81000运行user2程序并会更新系统参数从user2启动(注意:当不擦除flash情况下,再次把use1程序也下载之后也同样会从user2启动,因为系统参数已更新)。在进行FOTA远程升级时,也是会更新这个系统参数,FOTA具体参考ESP8266 RTOS SDK实现OTA 和 安信可SDK入门指南。
那么我们要控制从user1启动还是user2,需要找到修改系统参数的接口,具体可以参考OTA的实现原理。大家也可以自己去实现OTA,目前我只会按照它提供的方案实现功能。
如下:
esp8266~启动模式和烧写错误_第2张图片
补充:esp8266模组最好外部供电,串口只接RX、TX、GND。总是用TTL下载器,在开发时总会遇到程序烧进去了,但一复位启动,芯片不能正常运行。我遇到boot成功后跳转到user时停止的情况!


参考:
1、ESP8266 Boot 详解
2、ESP8266 烧写问题 SPI的不同模式

你可能感兴趣的:(IoT嵌入式,#,wifi,蓝牙)