PicoMultiLoader: an ESP32-P4-WIFI brain for the PicoCalc, with an SD-card app loader

PicoMultiLoader turns the Waveshare ESP32-P4-WIFI6 into a drop-in replacement for the Pico in the PicoCalc, and adds a firmware loader to it:

  1. Copy apps (.bin files) to the microSD card.
  2. Pick one on the PicoCalc screen.
  3. The loader flashes it and starts it.

To get back to the menu, hold Up while switching on.

Download v1.2.0: Release PicoMultiLoader v1.2.0 · hexadevti/PicoMultiLoader · GitHub Source and documentation: GitHub - hexadevti/PicoMultiLoader · GitHub


Why the ESP32-P4?

The ESP32-P4-WIFI6 has the same footprint and pinout as a Pico, so it plugs into the PicoCalc’s Pico socket.

Waveshare ESP32-P4-WIFI6
The Waveshare ESP32-P4-WIFI6 (picture: Waveshare)

Here is how it compares:

ESP32-P4 RP2040 (Pico) RP2350 (Pico 2)
CPU 2× RISC-V @ 400 MHz 2× Cortex-M0+ @ 133 MHz 2× Cortex-M33 @ 150 MHz
Floating point FPU + SIMD/AI instructions none (software) FPU
SRAM 768 KB 264 KB 520 KB
PSRAM 32 MB none none
Flash 32 MB 2 MB 4 MB
Wireless Wi-Fi 6 + BT 5 LE (ESP32-C6) Wi-Fi 4 (Pico W) Wi-Fi 4 (Pico 2 W)
USB USB 2.0 high-speed (480 Mbit/s) 12 Mbit/s 12 Mbit/s
Media MIPI-DSI/CSI, H.264, JPEG, 2D accelerator — —

What that means in practice:

  • Speed: about 3× the clock of a Pico, with more powerful cores, a hardware FPU and SIMD.
  • Memory: 32 MB of PSRAM for emulators, games, interpreters and big framebuffers. Apps get a 10 MB slot, plus about 20 MB of flash for their own data.
  • 16-bit-era emulation: that CPU and memory are enough for heavier emulators than a Pico can run, such as a 386 PC, the Amiga 500, Neo Geo, Mega Drive / Genesis and SNES, with room for their ROMs and RAM in PSRAM.
  • USB drive mode is high-speed: the PicoCalc’s SD card shows up on your PC through a 480 Mbit/s USB 2.0 port, instead of the Pico’s 12 Mbit/s.
  • Software: it runs any ESP-IDF, Arduino or MicroPython build for the ESP32-P4, with no changes. Merged *.factory.bin images work too: the loader takes only the app part and never overwrites the bootloader.

One thing to know: the board has a USB-C connector where the Pico has micro-USB, so the case opening must be made a little bigger. The README shows how.

Enlarged USB opening in the PicoCalc case


Screenshots

File list App details
File list on the SD card Checking an app before flashing it
Web server screen Setup
Web file manager (F4) Setup: Wi-Fi and start folder (F1)
USB drive mode Help
USB drive mode (F5) On-screen help

Web file manager in a browser
The web file manager in a browser


Features

On the PicoCalc

  • Browse the SD card with the keyboard and flash an app in two key presses. Each file is checked first (chip, revision, image format), and an unsuitable file shows why.
  • Copy, move and delete files and folders (F2, new in v1.2). The shortcuts are C, X, V and Del, and copying shows a progress bar.
  • Back to the loader by holding Up, F1 or F5 while switching on. Apps can also open it in software.
  • The loader never touches your app. It lives in its own partition, so the installed app keeps starting until you choose another one.
  • Remembers the last folder and file, or opens a start folder of your choice.
  • On-screen help. There’s also a serial console that works like the keyboard.

Web file manager (F4), over Wi-Fi

  • Upload with drag-and-drop or Ctrl+V, and download, rename, delete or create folders.
  • Select several files to download, move or delete them together (new in v1.2).
  • Sort by name, size or date, and see progress for big folders and transfers.
  • Flash an app straight from the browser.
  • Joins your Wi-Fi, or makes its own access point if it can’t. It can start automatically at switch-on, and an icon at the top shows its state.

USB drive mode (F5)

  • The SD card appears as a USB drive on your PC, at high speed on the ESP32-P4.

Also for Pico and Pico 2 W

You don’t have an ESP32-P4? The same loader works on the boards you already have:

  • Pico / Pico W (RP2040): it installs .uf2 apps from the SD card. There is no Wi-Fi on this build.
  • Pico 2 W (RP2350): it installs .uf2 apps from the SD card and includes the Wi-Fi web file manager. Updating the menu only means copying one file (pml2350.uf2) to the SD card.

Getting started (ESP32-P4)

  1. Make the case opening bigger for the USB-C port, and put the ESP32-P4-WIFI6 in the Pico socket.

  2. Flash the full image once over the board’s USB-C port:

    esptool --chip esp32p4 -p COMx -b 460800 write_flash 0x0 PicoMultiLoader-v1.2.0-esp32p4-full.bin
    
    
  3. Copy your .bin apps to the SD card, switch on, and pick one.

The release files are built for ESP32-P4 chip revision v3.x. For a v1.x chip, build from source. The Pico and Pico 2 W are installed through BOOTSEL; the release notes have the steps for every board.


Credits

The Pico and Pico 2 W builds are inspired by uf2loader by pelrun, the SD-card UF2 loader many PicoCalc owners already use. Many thanks to pelrun for making it and sharing it.


Feedback, bug reports and app compatibility reports are very welcome, here or on GitHub issues. If you port something to the ESP32-P4 PicoCalc, please share it!

2 Likes

wow - I can finally get files into my picocalc from my iPad! Very nice!

1 Like

While I don’t mind in the slightest people making alternatives to my stuff (go ham), to claim this is a “full” replacement is a bit disingenuous. It does things differently and doesn’t support quite a few things that uf2loader had to do a lot of work to implement (and does a bunch of things uf2loader doesn’t, to be fair.)

There’s nothing wrong with liking this project better, you don’t need to make overblown claims about it’s featureset.

Separately, you might say “this doesn’t use any code from uf2loader” since you got an LLM to generate it (I also don’t have a problem with LLM use), but you definitely took a lot of information from it, if not had the LLM look directly at the code to figure some things out. At least be gracious about it and provide some credit to me and the other projects uf2loader built upon! We didn’t have the benefit of a coding agent to write it, we had to do it all manually.

6 Likes

Hello, pelrun! I’m sorry; it was never my intention to replace your work or to be disrespectful toward you. My primary goal here is to create a loader for the ESP32-P4 that allows it to reach its full potential and capacity. I will include proper credit to you and remove the parts that implied a replacement (the way that was phrased really didn’t come across well). I apologize for any inconvenience, and I want to reiterate that this is nothing personal—alright?

Hey, no offense taken. Figuring out how to operate in the face of the rapidly oncoming AI apocalypse is a work in progress :grinning_face:

As long as there’s even a minor mention of the people who’s work informed your project, I’m satisfied.

2 Likes

If I may offer a comment: AI-driven assistance has not come to replace us, but rather to empower us to reach a higher level in our development—at a significantly lower cost.

I got my Computer Science degree way WAY back in the 1980s, so I used traditional programming (none of the Object Oriented stuff or C++) and I’ve been toying with Claude generated code. It’s an interesting tension between the two methods. I also used to code in assembly language code in high school in the 1970s and considered people who programmed in a high-level language to be not as “in tune” with the machine as us purists who used assembly (I also input raw machine code on a few machines using front panel switches).

It’s interesting how “programming” is evolving. I assume that in ten years, very few people will be coding C++ or Python by hand anymore and everyone will be vibe coding.

Thomas Dzubin

1 Like

Ah, I figured you were an old hand given the quality of your PRs to my projects.

1 Like

@Luciano_Faria, if you look at my shell project that plugs into @pelrun’s uf2loader, I made sure to spell out where I obtained my reference material (or out-right stolen implementations).

2 Likes

@BlairLeduc Actually, I didn’t copy any code from uf2loader. it served more as an inspiration. In any case, I will include the third-party documentation and mention the technical foundations and the inspiration I drew upon. Thanks for the tips!

1 Like