MAIX Go STM32 Firmware Update


The preburned MAIX Go’s STM32 firmware is DAP firmware, it is slow and have some bug in windows, so we build new Firmware call open-ec for MAIX Go, you can update it use ST-Link or ISP.

it is github address:

It is blog tutorials:


need help I think, I just brick the STM32!
uploaded firmware(“ec.bin”) using st-link_v2 using SWD pins. No changes in boot pin as well as DFU pins.
How to get recovery!!


I’m also having the same problem!
I’ve been roughly following the instructions here:
Except I’ve been flashing ec.bin instead of the BMP firmware in the link above, and there is only one flash_write command:

flash write_bank 0 ec.bin 0

Along the process, everything has been as expected, the OpenOCD responses were as appeared above, and the STM32F103C8 was recognized, but when I removed the STLINK probe and rebooted the MAIX Go board, no USB serial port has been detected on my Linux machine.

Can you provide an updated build, the original firmware, even better a github repo (for the original firmware) and building instructions?
I understand the original firmware is based on DAPLink (foremly CMSIS-DAP)?


you should brun flash-zero.bin


you should brun flash-zero.bin


edited: @cnXEL sorry, saw your message after I have sent mine. Will check that tomorrow.

@Zepan: Thanks for the link you added!
Are there instructions on how to build the original CMCIS DAP?
Have you used DAPLink on my response above, or the original CMSIS-DAP?
Looking at the DAPLink git tree, I suspect the STM103C8 is too small for it, as the build target they offer is the STM32F103xB (i.e. with 128KB flash, not 64KB).
They also don’t seem to offer STM32F103 prebuild targets, one must build these by himself from source.
There are also a few CMSIS-DAP STM32 implementations, maybe you took one of those?

Are there special build instructions?


@cnXEL : I’ve used the flash-zero.bin file and everything is working!
@Sentry: I have used your script as in - it is working great, but for some reason the new firmware required me to use /dev/ttyUSB1 instead.


hi, the new firmware is simulate FT2232D, so the /dev/ttyUSB0 is reserve for JTAG usage.


@Zepan, First let me say that everything works now, but as I’m new to ARM echosystem, I want to see if I understand some things -
Please correct me where I’m wrong.

USB devices usually supports the DFU protocol that allows upgrading firmware for USB-connected devices.

On newer STM32 devices, the DFU code is stored in an internal ROM, any blank device can be programmed externally bya DFU utility from the USB port alone.

The STM32F103xx and other older STM32 devices have no internal ROM, and so the DFU bootloader must reside in ROM (0x80000000).
The DFU code write the uploaded firmware into a different address, usually 0x80002000 (above the DFU code).

The MAIX-GO board originally came loaded with a DFU bootloader, so the STM32 could be upgraded via USB alone (by shorting the DFU pins on the bvoard).

By using ST-LINK and writing the memory at 0x80000000, I have effectively erased any DFU loader I already had on my MAIX Go board.
The new open-ec firmware contains no DFU code (I went over all ec.c), and so even after upgrading to it, any future upgrade will require me to rewire the board with ST-LINK.

Where can I get the original DFU code, so I can load the open-ec code above it and do any future updates via USB alone?


Hi, in github release, there is, and bl.bin is inside, it is bootloader for stm32 DFU functions.
The code for it is not open source yet