1. error magic! backup boot failed
在使用8266时遇到了如下错误:
找个一早上在群里面发问,原来是烧写工具配置时出错了,flashsize莫名的选错了!
2Mb = 16Mbit。
2. boot
8266启动日志分析,程序上电之后运行的大概流程:
- boot模式选择
- 加载ram rom,校验flash是否完成
- boot跳转到用户区,运行程序
- 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模组最好外部供电,串口只接RX、TX、GND。总是用TTL下载器,在开发时总会遇到程序烧进去了,但一复位启动,芯片不能正常运行。我遇到boot成功后跳转到user时停止的情况!