Update onboard ESP8285 firmware

Introduction:

At present, MaixPy series adopt M1W module as the core module development boards: MaixDock(M1W), MaixGo

Normally we don’t need to update the firmware of the WIFI SOC ESP8285 inside the module, but if there is a bug in the use process, and a new version of the firmware is released, we can update the firmware

The ESP8285 in the M1W module used by MaixDock and MaixGo burns AT firmware by default

Verify that ESP8285 can work normally

  • MaixPy verifies whether ESP8285 is working properly

View the end of text routine

  • External USB to serial module test

    Use USB to serial port module, connect according to the following table, and then power on

M1W USB Module Description
M1W GND GND Common ground
K210 (IO6)/ESP8285 TX RX -
K210 (IO7)/ESP8285 RX TX -
k210 RST (ground before power on, pull down RST during the whole process) GND

After power-on, the board will output serial port (here XCOM, baud rate 115200) to verify whether ESP8285 starts normally image-20200805175207487

AT command set

ESP8285 and ESP8266 are the same series of products, using the same set of AT commands ESP8285/ESP8266/ESP32 latest AT command set https://github.com/espressif/esp-at/blob/v2.0.0.0_esp8266/docs/ESP_AT_Commands_Set.md

Update ESP8285 firmware steps

Before burning ESP8285 firmware, first understand the ESP8285 burning principle:

ESP8285 firmware burning principle

When ESP8285 is powered on, it will determine the state of the boot stapping pin and determine the boot mode, such as:

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

The first digit (3) of the printed boot mode represents the current boot mode. Boot mode is determined by the 3-bit value of strapping pin [GPIO15, GPIO0, GPIO2]. As shown in the following table Show:

3-bit value of strapping pin/[GPIO15, GPIO0, GPIO2] Boot mode
7 / [1, 1, 1] SDIO HighSpeed ​​V2 IO
6 / [1, 1, 0] SDIO LowSpeed ​​V1 IO
5 / [1, 0, 1] SDIO HighSpeed ​​V1 IO
4 / [1, 0, 0] SDIO LowSpeed ​​V2 IO
3 / [0, 1, 1] Flash Boot
2 / [0, 1, 0] Jump Boot
1 / [0, 0, 1] UART Boot
0 / [0, 0, 0] Remapping

Please see the following table for the IO level of ESP8285 entering different modes:

Mode CH_PD(EN) RST GPIO15 GPIO0 GPIO2 TXD0
UART download mode High High Low Low High High
Flash operating mode High High Low High High High
Chip Test Mode - - - - - Low

That is, ESP8285 enters UART download mode, the first bit of the startup information mode should be mode:(1, X), as follows:

ets Jan 8 2013,rst cause:1, boot mode:(1,1)

Taking MaixDock as an example, you can see the schematic diagram of MaixDock as follows:

Preparation

Here is MaixDock(M1W), Windows 10 system as an example

  • Hardware: MaixDock, USB Type-C data cable
  • Software:

  • ESP firmware update tool: ESP8285 flash_download_tools

  • ESP8285 AT firmware:

Windows uses flash_download_tools to update ES8285 (here, MaixDock is taken as an example):

  1. Follow the configuration below to connect to MaixDock,

    Connect the USB to serial port module and ESP8285, the connection method has been introduced above Before power-on, GPIO0 needs to be pulled down, that is, the contact in the upper left corner next to the antenna is grounded to enter the UART download mode.

  1. Open flash_download_tools

  2. Download MaixDock ESP8285 firmware

  3. Select ESP8285 serial port (usually the serial port number is relatively large)

  4. Set download options:

    Configure the corresponding options as shown in the figure, note that the baud rate must be set to 115200**

  5. Click Start to update the firmware and wait for the update to complete

  6. Verify that the update is complete

    • Use the XCOM baud rate of 115200, open the ESP8285 serial port, and output AT\r\n, as shown in the figure, it prompts OK to flash in successfully esp8285_at.png

LINUX uses esp_tool to update ES8285 (here, MaixDock is taken as an example):

  1. Follow the configuration below to connect to MaixDock,

  2. Install esptool

     pip3 install esptool
    
  3. Download MaixDock ESP8285 firmware

     ls /dev/ttyUSB* # View USB serial port
     esptool --port /dev/ttyUSB0 write_flash 0x0 ESP8285-AT-V1.7.4_8Mbit_40Mhz.bin # Burn the firmware
    
  4. Verify that the update is complete

    Use XCOM baud rate 115200, open ESP8285 serial port, output AT\r\n, as shown in the figure, prompt OK, then flashing is successful esp8285_at.png

MaixPy routine test:

import network, time
from machine import UART
from Maix import GPIO
from fpioa_manager import fm

# En SEP8285 rst
#fm.register(8, fm.fpioa.GPIOHS0, force=True)
#wifi_en=GPIO(GPIO.GPIOHS0, GPIO.OUT)
#wifi_en.value(1)
# En SEP8285 rst
fm.register(0, fm.fpioa.GPIOHS0, force=True)
wifi_io15=GPIO(GPIO.GPIOHS0, GPIO.OUT)
wifi_io15.value(0)

fm.register(8, fm.fpioa.GPIOHS1, force=True)
wifi_en=GPIO(GPIO.GPIOHS1, GPIO.OUT)
wifi_en.value(1)
# for new MaixGO board, if not, remove it
#fm.register(0, fm.fpioa.GPIOHS1, force=True)
#wifi_io15_en=GPIO(GPIO.GPIOHS1, GPIO.OUT)
#wifi_io15_en.value(0)

fm.register(6, fm.fpioa.UART2_RX, force=True)
fm.register(7, fm.fpioa.UART2_TX, force=True)

uart = UART(UART.UART2,115200,timeout=1000, read_buf_len=4096)

def wifi_enable(en):
    global wifi_en
    wifi_en.value(en)

def wifi_deal_ap_info(info):
    res = []
    for ap_str in info:
        ap_str = ap_str.split(",")
        info_one = []
        for node in ap_str:
            if node.startswith('"'):
                info_one.append(node[1:-1])
            else:
                info_one.append(int(node))
        res.append(info_one)
    return res


#wifi_enable(0)
time.sleep(2)
nic = network.ESP8285(uart)

ap_info = nic.scan()
ap_info = wifi_deal_ap_info(ap_info)

ap_info.sort(key=lambda x:x[2], reverse=True) # sort by rssi
for ap in ap_info:
    print("SSID:{:^20}, RSSI:{:>5}, MAC:{:^20}".format(ap[1], ap[2], ap[3]))