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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章