Adafruit Metro ESP32-S2 drive not showing up

Hi, I have a problem with my new Adafruit Metro ESP32-S2: it does not show up as a drive.
I followed the Adafruit tutorial exactly on how to set the board up with CircuitPython. I flashed the latest CircuitPython to the board which tells me, that the cable is ok. Then I press “Reset”, the serial port disappears and then… nothing. The drive does not show up.

I tried it on 2 Macs, a Windows 7 and a Win10 machine with two different USB-C cables. I searched the forums (Pimoroni and Adafruit) but all troubleshooting requires that there is either the CIRCUITPY or the boardnameBOOT drive to show up. But neither does
Everything is the latest version, I’m outta ideas. I am fairly confident with all kinds of microcontrollers, but I can’t get this CircuitPython board running. It is my first and only CircuitPython board, so I can’t check another. Any advice would be greatly appreciated.

Can you definitely not get into the ROM bootloader mode or connect to it with esptool?

From the sounds of it the ROM bootloader shouldn’t ever be corrupted so the only thing I can think is that something shorted. You don’t have anything else hooked up to it do you?

I can get into the ROM bootloader mode. I first tried with esptool 3.0 to upload the latest CircuitPython firmware 6.3.0. This succeeded. Then I pressed the reset button.
After pressing reset, the serial port in /dev/ disappears but no drive is showing up.

I upgraded to esptool 3.1 - same story.
Then I uploaded the .uf2 file insead of the firmware from this site

This also succeeds - but after a reset no drive appears.

The Adafruit manual of this topic is sadly not super clear: should the board show up as a drive when you get it delivered (i suppose yes)? And they decribe 3 different bootloaders - it would be good to have a sentence how to proceed if you just want to get it running with CircuitPython.

Nevertheless - I tried also a USBC-USBC cable on a USBC port now - nothing changes.

Just to confirm:
The firmware is the .bin file on the above site, correct? When I upload this via esptool on the board and then press reset - then the drive should appear, correct?
This is not stated explicetly in the guides but I guess this is the way it should work.

I am also confidend that something changed, because when the board got delivered, the NeoPixel was cycling through colours. This led me to think that there is a program installed and that I should be able to see this program when I connect the board. But as mentioned - I did not see a drive.
After I upgraded the firmware with esptool, the NeoPixel did not do anything anymore. So the flashing works (also esptool is telling me this). But the drive does not show up.

Maybe someone with a CircuitPython board can gibe some steps how he/she did get it running. Was the drive there “out of the box”?
Thanks in advance

I don’t have one of these so I can’t test it unfortunately. However, that firmware .bin is, as far as I can tell, CircuityPython, not the bootloader. The Adafruit Product Guide says that you need to use esptool to install tinyuf2_combo.bin, linked on that page, and then it should show up as a driver after a reset.

The first page of the ROM Bootloader guide says:

The ESP32-S2 has a built in bootloader, which means you never have to worry about ‘bricking’ your board. You can use it to load code directly, say CircuitPython or the binary output of an Arduino compilation or you can use it to load a second bootloader on, like UF2 which has a drag-n-drop interface

So I take it tinyuf2_combo.bin is the second bootloader, and then you install CircuitPython beside that. Again, I’ve not used this particular board before, but I’ve always used the .UF2 files for CircuitPython, not the .bin.

I’ve made some custom Cortex M0/4 boards which are basically clones of the M0/4 Express before, and there was always a .bin bootloader which came first, and was then followed by the CircuitPython .UF2 file.

Thank you, Shoe, for pointing that out and all your information.
When I flash the tinyuf2_combo.bin, a drive shows up with the name METROS2BOOT. The mu editor does not recognize it. So I manually created a file called and put the blink example into it - nothing.
I then renamed the drive to CIRCUITPY - also nothing.
I am absolutely confused with all the bootloaders and the order they are mentioned in the Adafruit guide. When I flash the tiny… and then afterwards the uf2 firmware nothing happens. I also wonder why there are the uf2 file and the .bin for CircuitPython.

So if anybody could comment: how is any CircuitPython board to be set up, after unpacking? Is it supposed to run out of the box or do you have to take care to flash several bootloaders?

When I flash the tinyuf2_combo.bin, a drive shows up with the name METROS2BOOT.

Ah, brilliant! So as far as I understand it, once you have this done then you drag and drop the .UF2 file from here onto the drive, and that should be CircuitPython set up, and Mu should see it (or should be able to set to see it by selecting the interpreter in the bottom right of the Mu window). With just the tinyuf2_combo.bin file I think the chip is set up to expect Arduino programs.

Out of the box, most Express boards are set up for Arduino code, and just need the CircuitPython .UF2 file flashed to them to run CircuitPython. I think the ESP32-S2 is a little odd for having it’s own hardware bootloader, though.

omg, Shoe, thank you so much. This was the last missing puzzle piece. It now works and the LED blinks with my desired rate. Mu does not recognize it yet although the board now shows up as CIRCUITPY drive.
I really love the Adafruit products and guides but this experience is just terrible. I will email them to update their guide with these simple steps:

  • flash the tinyuf2_combo.bin to the board
  • METROS2BOOT shows up as a drive
  • copy the CircuitPython .UF2 file to the drive
  • the drive disconnects and reconnects with the name CIRCUITPY

If I only would have found these steps clearly on the Adafruit site.
Thanks again, Shoe. I’ll do some rebooting and stuff to make Mu and the serial console work.