Resetting the firmware on the M5Stack Dial

Problem

A M5Stack Dial comprises a small LCD screen, Wi-Fi, BT, a rotary encoder, and the processor is in a Stamp S3.

Well, I have one of these devices, and managed to brick it in the first week of ownership! Now given that the Stamp S3 is available separately, if I get stuck, I can fix it cheaply.

So, here is how I broke it. I was using Arduino IDE in Linux. I used Tools > Burn Bootloader, and this has removed the demo software from the device. Moreover, in Linux it is no longer visible via lsusb, and Windows 10 seems to repeatedly auto-detect it, but I can’t find the JTAG device in the Device Manager.

Current possible solutions

I’ve tried downloading M5Burner.exe for Windows, but the list of firmwares under “Stamp” seems to be very incomplete (it has something for the Stamp Pico, but nothing for the Stamp S3).

Here is the factory demo for the Dial. However I don’t think this includes firmware; I need the firmware to be operational so that the device is recognised again.

There is some stuff here which sounds like firmware, but I don’t plan to use this project once the device has working firmware again.

This article from Espressif might be useful.

I might be able to get help here.

What is the safest thing to try?

Addendum

I will update this post as I learn new things about fixing this - unfortunately the information on the web for this problem is extremely patchy.

To my surprise, I have fixed it. Here is how I did so.

My main build machine runs Linux. Normally if I do lsusb and the ESP32 device is plugged in, I should get this line (amongst many others):

Bus 001 Device 019: ID 303a:1001 Espressif USB JTAG/serial debug unit

However my eager and premature use of “Burn Bootloader” in the Arduino editor wiped the device, which I think included whatever code is required to expose the JTAG debug device. Oops!

So I decided to see what Espressif tooling could do for me. I plugged in the Dial into a Windows 10 laptop. The machine struggled to recognise the USB device, and every few seconds the Device Manager would refresh, as if it was trying (but failing) to autodetect something.

I installed the “Universal Online Installer 2.24” (source) from Espressif. This is a small program that fetches everything it needs, and it seems to work very well. I should think it installed 1-2GB of software. In short order the USB system had settled down, and Device Manager was not longer emitting its “new installation” bongs.

I was then able to pull the Dial out, and plug it back in, to find that it was being detected on COM4.

I then changed directory to here:

C:\Expressif\frameworks\esp-idf-5.1.2\examples\get-started\hello-world

From there I could issue these commands:

idf.py set-target esp-s3
idf.py build
idf.py -p COM4 flash

So this seemed to write the image correctly, but the program did not seem to work on the device. However this did not matter, because I now had a working bootloader and a working JTAG device. So I could just go back to the Arduino IDE and reflash a program that was known to work.

In hindsight I think I could have done the rescue on Linux: it looks like Espressif build tools are available for Mac and Linux too. I expect I will bork it again, so perhaps I will try a different rescue next time.

Anyway, it’s nice to see that this device is (so far) proving quite resilient! 🎉