ESP8266烧录官方AT指令V1.7.3

前言

在淘宝买了块NODEMCU开发板,里面默认固件是lua脚本编程。感觉用着不爽,用来玩一玩还行,不能作为实际项目使用。于是想烧录AT指令。

需要工具:

固件烧录上位机:flash_download_tools_v3.6.8_0(乐鑫官网下载)

AT指令固件:ESP8266_NonOS_AT_Bin_V1.7.3(乐鑫官网下载)

开发板:NODEMCU一块(4M Flash配置)

开始烧录官方固件

  1. 打开 flash_download_tools,如下图
  2. 选择要烧录的bin文件并填写烧录地址,不要忘记在前面打勾,至于为什么要这么选看下面?

引用官方指南:

BOOT MODE

download

Flash size 16Mbit-C1: 1024KB+1024KB

boot_v1.2+.bin              0x00000
user1.2048.new.5.bin        0x01000
esp_init_data_default.bin   0x1fc000
blank.bin                   0xfe000 & 0x1fe000

Flash size 32Mbit-C1: 1024KB+1024KB

boot_v1.2+.bin              0x00000
user1.2048.new.5.bin        0x01000
esp_init_data_default.bin   0x3fc000
blank.bin                   0xfe000 & 0x3fe000

NON-BOOT MODE

download

eagle.flash.bin              0x00000
eagle.irom0text.bin          0x10000
blank.bin
    Flash size 8Mbit:        0x7e000 & 0xfe000
    Flash size 16Mbit:       0x7e000 & 0x1fe000
    Flash size 16Mbit-C1:    0xfe000 & 0x1fe000
    Flash size 32Mbit:       0x7e000 & 0x3fe000
    Flash size 32Mbit-C1:    0xfe000 & 0x3fe000
esp_init_data_default.bin    
    Flash size 8Mbit:        0xfc000
    Flash size 16Mbit:       0x1fc000
    Flash size 16Mbit-C1:    0x1fc000
    Flash size 32Mbit:       0x3fc000
    Flash size 32Mbit-C1:    0x3fc000

compile

modify eagle.app.v6.ld, as
irom0_0_seg :                         org = 0x40210000, len = 0x6C000

NOTICE: UPDATE is not supported in non-boot mode; 4Mbit Flash is not supported in non-boot mode;

Update steps

1.Make sure TE(terminal equipment) is in sta or sta+ap mode

AT+CWMODE=3
OK

2.Make sure TE got ip address

AT+CWJAP="ssid","12345678"
OK

AT+CIFSR
192.168.1.134

3.Let's update

AT+CIUPDATE
+CIPUPDATE:1    found server
+CIPUPDATE:2    connect server
+CIPUPDATE:3    got edition
+CIPUPDATE:4    start start

OK

NOTICE: If there are mistakes in the updating, then break update and print ERROR.

 

至于还不知道为什么的再看下面引用官方手册:

不带OTA功能的FLASH布局

带OTA功能的Flash布局

我们AT指令是带OTA功能的,看FOTA图即可。

下图是下载地址

知道为什么了吗?其实不为什么,因为程序里面固定死了。

3.注意SPI MODE选择

这个和你的spi硬件连接有关,了解一下 SPI和QSPI就知道了。

我们这个NODEMCU是普通的SPI选前面不带Q的DIO或DOUT。

FLASH SIZE选择 32Mbit-C1??.其它按图选择。

NONOS_SDK3.0以后只支持Flash 1024+1024模式了,解释一下带OTA功能的固件需要user1.bin和user2.bin这两个用户空间一样最大支持1024Byte(其实是<=1000Byte)。烧录固件只烧录user1.bin就可以了。user2.bin用来OTA升级的时候用的,升级后程序就从user2.bin启动。

开发板进入下载模式:

按住flash按键不松开,再按reset按键不松开,然后松开flash按键,然后松开reset按键,灯闪烁。这时进入下载模式。

点击START按钮开始等待烧录(注意开发板的COM口,和波特率,串口驱动装不好的直接下载个驱动精灵来安装串口驱动) 

下载成功后,按RST按钮,打开串口助手(波特率115200),发现串口打印出信息是乱码,发送AT指令也不回复。

我们把波特率改为 74880 ,这个波特率是MCU内部ROM串口打印出来的信息,我们无法修改,出厂固化的。

发现串口打印信息,出现分区错误提示。(这个问题我也捣鼓了大半天)。

原来是固件和FLASH SIZE不匹配导致的。

解决方法有两种:

第一种:官方提供的AT指令固件 只支持 2M Flash,我们把开发板4M的Flash当2M使用。

4个bin文件不变,但是地址要改变如下

boot_v1.2+.bin                   @0x00000
user1.2048.new.5.bin        @0x01000
esp_init_data_default.bin   @0x1fc000
blank.bin                             @ 0x1fe000

我们烧录的时候 FLASH SIZE选 16Mbit-C1,

第二种:下载 ESP8266_NONOS_SDK-3.0.3 SDK 重新编译AT固件,编译选项如下:

make COMPILE=gcc BOOT=new APP=1 SPI_SPEED=40 SPI_MODE=QIO SPI_SIZE_MAP=6

因为程序里面做了定义:

#if ((SPI_FLASH_SIZE_MAP == 0) || (SPI_FLASH_SIZE_MAP == 1))
#error "The flash map is not supported"
#elif (SPI_FLASH_SIZE_MAP == 2)
#error "The flash map is not supported"
#elif (SPI_FLASH_SIZE_MAP == 3)
#error "The flash map is not supported"
#elif (SPI_FLASH_SIZE_MAP == 4)
#error "The flash map is not supported"
#elif (SPI_FLASH_SIZE_MAP == 5)
#define SYSTEM_PARTITION_OTA_SIZE                            0xE0000
#define SYSTEM_PARTITION_OTA_2_ADDR                            0x101000
#define SYSTEM_PARTITION_RF_CAL_ADDR                        0x1fb000
#define SYSTEM_PARTITION_PHY_DATA_ADDR                        0x1fc000
#define SYSTEM_PARTITION_SYSTEM_PARAMETER_ADDR                0x1fd000
#define SYSTEM_PARTITION_AT_PARAMETER_ADDR                    0xfd000
#define SYSTEM_PARTITION_SSL_CLIENT_CERT_PRIVKEY_ADDR        0xfc000
#define SYSTEM_PARTITION_SSL_CLIENT_CA_ADDR                    0xfb000
#define SYSTEM_PARTITION_WPA2_ENTERPRISE_CERT_PRIVKEY_ADDR    0xfa000
#define SYSTEM_PARTITION_WPA2_ENTERPRISE_CA_ADDR            0xf9000
#elif (SPI_FLASH_SIZE_MAP == 6)
#define SYSTEM_PARTITION_OTA_SIZE                            0xE0000
#define SYSTEM_PARTITION_OTA_2_ADDR                            0x101000
#define SYSTEM_PARTITION_RF_CAL_ADDR                        0x3fb000
#define SYSTEM_PARTITION_PHY_DATA_ADDR                        0x3fc000
#define SYSTEM_PARTITION_SYSTEM_PARAMETER_ADDR                0x3fd000
#define SYSTEM_PARTITION_AT_PARAMETER_ADDR                    0xfd000
#define SYSTEM_PARTITION_SSL_CLIENT_CERT_PRIVKEY_ADDR        0xfc000
#define SYSTEM_PARTITION_SSL_CLIENT_CA_ADDR                    0xfb000
#define SYSTEM_PARTITION_WPA2_ENTERPRISE_CERT_PRIVKEY_ADDR    0xfa000
#define SYSTEM_PARTITION_WPA2_ENTERPRISE_CA_ADDR            0xf9000
#else
#error "The flash map is not supported"
#endif

目前AT指令只支持2M 1024+1024 和 4M 1024+1024 模式。

至于如何编译NONOS AT例程,大家去安信可官网下载集成环境的eclipse工具来安装,这种教程网上很多。

编译完成后,用编译出来的bin烧录,FLASH SIZE 选32Mbit-C1即可,其它选项如下图,地址空间改变。

总结:遇到问题多去官方看资料,网上很多资料都是很老的,已经和最新的SDK不一样了,建议去乐鑫官网多看看还有他们的github项目。

我贴几个github地址

ESP8266EX项目

https://github.com/espressif/ESP8266_NONOS_SDK

https://github.com/espressif/ESP8266_RTOS_SDK

ESP32项目

https://github.com/espressif/esp-idf

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

懂IT的嵌入式工程师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值