Table of Contents

Micropython

Python for microcontrollers.

Setup

Install ESPTool for ESP8266 and ESP32. Install STLink for STM32.

ESP32

To reset the device for access by esptool, hold IO0 and tap EN. Release IO0.

Erase flash chip

esptool.py --chip esp32 --port /dev/ttyUSB0 erase_flash
esptool.py v3.0-dev
Serial port /dev/ttyUSB0
Connecting........_____.
Chip is ESP32-D0WDQ6 (revision 1)
Features: WiFi, BT, Dual Core, 240MHz, VRef calibration in efuse, Coding Scheme None
Crystal is 40MHz
MAC: 30:ae:a4:fe:03:80
Uploading stub...
Running stub...
Stub running...
Erasing flash (this may take a while)...
Chip erase completed successfully in 6.4s
Hard resetting via RTS pin...

Fetch firmware

wget "http://micropython.org/resources/firmware/esp32-idf3-20200816-unstable-v1.12-665-g60f5b941e.bin"

Write flash chip

esptool.py --chip esp32 --port /dev/ttyUSB0 --baud 460800 write_flash -z 0x1000 esp32-idf3-20200816-unstable-v1.12-665-g60f5b941e.bin
esptool.py v3.0-dev
Serial port /dev/ttyUSB0
Connecting........_
Chip is ESP32-D0WDQ6 (revision 1)
Features: WiFi, BT, Dual Core, 240MHz, VRef calibration in efuse, Coding Scheme None
Crystal is 40MHz
MAC: 30:ae:a4:fe:03:80
Uploading stub...
Running stub...
Stub running...
Changing baud rate to 460800
Changed.
Configuring flash size...
Auto-detected Flash size: 4MB
Compressed 1448240 bytes to 925586...
Wrote 1448240 bytes (925586 compressed) at 0x00001000 in 23.4 seconds (effective 495.0 kbit/s)...
Hash of data verified.

Leaving...
Hard resetting via RTS pin...

Verify flash

esptool.py --chip esp32 --port /dev/ttyUSB0 --baud 460800 verify_flash 0x1000 esp32-idf3-20200816-unstable-v1.12-665-g60f5b941e.bin
esptool.py v3.0-dev
Serial port /dev/ttyUSB0
Connecting........_____....._____....._
Chip is ESP32-D0WDQ6 (revision 1)
Features: WiFi, BT, Dual Core, 240MHz, VRef calibration in efuse, Coding Scheme None
Crystal is 40MHz
MAC: 30:ae:a4:fe:03:80
Uploading stub...
Running stub...
Stub running...
Changing baud rate to 460800
Changed.
Configuring flash size...
Auto-detected Flash size: 4MB
Verifying 0x161930 (1448240) bytes @ 0x00001000 in flash against esp32-idf3-20200816-unstable-v1.12-665-g60f5b941e.bin...
-- verify OK (digest matched)
Hard resetting via RTS pin...

Run

picocom -b 115200 /dev/ttyUSB0
picocom v3.1

port is        : /dev/ttyUSB0
flowcontrol    : none
baudrate is    : 115200
parity is      : none
databits are   : 8
stopbits are   : 1
escape is      : C-a
local echo is  : no
noinit is      : no
noreset is     : no
hangup is      : no
nolock is      : no
send_cmd is    : sz -vv
receive_cmd is : rz -vv -E
imap is        :
omap is        :
emap is        : crcrlf,delbs,
logfile is     : none
initstring     : none
exit_after is  : not set
exit is        : no

Type [C-a] [C-h] to see available commands
Terminal ready

MPY: soft reboot
MicroPython v1.12-665-g60f5b941e on 2020-08-16; ESP32 module with ESP32
Type "help()" for more information.
>>> help("modules")
__main__          gc                uasyncio/stream   upip_utarfile
_boot             inisetup          ubinascii         upysh
_onewire          machine           ubluetooth        urandom
_thread           math              ucollections      ure
_uasyncio         micropython       ucryptolib        urequests
_webrepl          neopixel          uctypes           uselect
apa106            network           uerrno            usocket
btree             ntptime           uhashlib          ussl
builtins          onewire           uhashlib          ustruct
cmath             sys               uheapq            utime
dht               uarray            uio               utimeq
ds18x20           uasyncio/__init__ ujson             uwebsocket
esp               uasyncio/core     umqtt/robust      uzlib
esp32             uasyncio/event    umqtt/simple      webrepl
flashbdev         uasyncio/funcs    uos               webrepl_setup
framebuf          uasyncio/lock     upip              websocket_helper
Plus any modules on the filesystem

ESP8266

Install

esp8266-20191220-v1.12.bin

Run

picocom -b 115200 /dev/ttyUSB0
picocom v1.7

port is        : /dev/ttyUSB0
flowcontrol    : none
baudrate is    : 115200
parity is      : none
databits are   : 8
escape is      : C-a
local echo is  : no
noinit is      : no
noreset is     : no
nolock is      : no
send_cmd is    : sz -vv
receive_cmd is : rz -vv
imap is        :
omap is        :
emap is        : crcrlf,delbs,

Terminal ready

MPY: soft reboot
MicroPython v1.12 on 2019-12-20; ESP module with ESP8266
Type "help()" for more information.

STM32

Probe

st-info --probe
Found 1 stlink programmers
 serial:     303636444646353135343536373037303637313733313437
 hla-serial: "\x30\x36\x36\x44\x46\x46\x35\x31\x35\x34\x35\x36\x37\x30\x37\x30\x36\x37\x31\x37\x33\x31\x34\x37"
 flash:      524288 (pagesize: 16384)
 sram:       131072
 chipid:     0x0431
 descr:      stm32f411re

Install gccarm

Checkout micropython and build mpy-cross.

In ports directory, build stm32.

Eg.

make BOARD=NUCLEO_F411RE deploy-stlink
Use make V=1 or set BUILD_VERBOSE in your environment to increase build verbosity.
Writing build-NUCLEO_F411RE/firmware0.bin to the board via ST-LINK
st-flash 1.6.1-86-gf162a5d
2020-08-16T06:59:50 INFO common.c: stm32f411re: 128 KiB SRAM, 512 KiB flash in at least 16 KiB pages.
file build-NUCLEO_F411RE/firmware0.bin md5 checksum: 1d81eee6e92c41643d7b3ae71cd4f, stlink checksum: 0x001867ec
2020-08-16T06:59:50 INFO common.c: Attempting to write 14780 (0x39bc) bytes to stm32 address: 134217728 (0x8000000)
EraseFlash - Sector:0x0 Size:0x4000 2020-08-16T06:59:51 INFO common.c: Flash page at addr: 0x08000000 erased
2020-08-16T06:59:51 INFO common.c: Finished erasing 1 pages of 16384 (0x4000) bytes
2020-08-16T06:59:51 INFO common.c: Starting Flash write for F2/F4/F7/L4
2020-08-16T06:59:51 INFO flash_loader.c: Successfully loaded flash loader in sram
enabling 32-bit flash writes
size: 14780
2020-08-16T06:59:51 INFO common.c: Starting verification of write complete
2020-08-16T06:59:51 INFO common.c: Flash written and verified! jolly good!
Writing build-NUCLEO_F411RE/firmware1.bin to the board via ST-LINK
st-flash 1.6.1-86-gf162a5d
2020-08-16T06:59:51 INFO common.c: stm32f411re: 128 KiB SRAM, 512 KiB flash in at least 16 KiB pages.
file build-NUCLEO_F411RE/firmware1.bin md5 checksum: 15c0323c6561a0651eed6d4a34ff33a1, stlink checksum: 0x019ebca3
2020-08-16T06:59:51 INFO common.c: Attempting to write 284128 (0x455e0) bytes to stm32 address: 134348800 (0x8020000)
EraseFlash - Sector:0x5 Size:0x20000 2020-08-16T06:59:53 INFO common.c: Flash page at addr: 0x08020000 erased
EraseFlash - Sector:0x6 Size:0x20000 2020-08-16T06:59:55 INFO common.c: Flash page at addr: 0x08040000 erased
EraseFlash - Sector:0x7 Size:0x20000 2020-08-16T06:59:57 INFO common.c: Flash page at addr: 0x08060000 erased
2020-08-16T06:59:57 INFO common.c: Finished erasing 3 pages of 131072 (0x20000) bytes
2020-08-16T06:59:57 INFO common.c: Starting Flash write for F2/F4/F7/L4
2020-08-16T06:59:57 INFO flash_loader.c: Successfully loaded flash loader in sram
enabling 32-bit flash writes
size: 32768
size: 32768
size: 32768
size: 32768
size: 32768
size: 32768
size: 32768
size: 32768
size: 21984
2020-08-16T07:00:04 INFO common.c: Starting verification of write complete
2020-08-16T07:00:07 INFO common.c: Flash written and verified! jolly good!

Run

picocom -b 115200 /dev/ttyACM0
picocom v3.1

port is        : /dev/ttyACM0
flowcontrol    : none
baudrate is    : 115200
parity is      : none
databits are   : 8
stopbits are   : 1
escape is      : C-a
local echo is  : no
noinit is      : no
noreset is     : no
hangup is      : no
nolock is      : no
send_cmd is    : sz -vv
receive_cmd is : rz -vv -E
imap is        :
omap is        :
emap is        : crcrlf,delbs,
logfile is     : none
initstring     : none
exit_after is  : not set
exit is        : no

Type [C-a] [C-h] to see available commands
Terminal ready

MPY: sync filesystems
MPY: soft reboot
MicroPython v1.12-663-g9883d8e81 on 2020-08-16; NUCLEO-F411RE with STM32F411xE
Type "help()" for more information.

Resources

ESP8266 firmware

ESP32 firmware

STM32 firmware