Booting the Sipeed M0sense Dev Board

2025-10-18 01:36:36 PDT

Bart Massey 2025

The Sipeed M0sense is an interesting little budget microcontroller dev board that I got from Seeed Studio. I bought six of them for a price that worked out to about US$7.50 per board with shipping. I was initially looking for the similarly-priced Sipeed Longan Nano that I've used many times, but it is discontinued, which makes sense: the M0sense really is a more capable board.

The shipping time was the usual couple of weeks. The boards arrived in cute little plastic boxes, with pins included to be soldered onto the board as desired.

Like the Longan Nano, a glitz feature of the M0sense is its pre-attached screen. The M0sense screen is connected by a ribbon cable with a non-stress-relief connector; this is unfortunate for a screen that flops around mercilessly. Foreshadowing.

The M0sense is well-documented, with both a Wiki and a quite complete manufacturer page. Unfortunately, I found these resources pretty late, and was initially relying on various bits and pieces from the Internet and AI.

The M0sense powered up nicely, showing a cute demo mode on its screen. Its sole RGB LED was showing a pretty color. All good.

Initial Boot Attempt

The plan for the M0sense boards was to run Rust code on them. This meant getting them to flash offboard binaries. As with many modern dev boards, the M0sense firmware is supposed to provide a USB drive emulation onto which one can drop binaries to be flashed. This is not my favorite interface, as it doesn't provide for tracing or debugging, but it is quite a good starting point.

Unfortunately, my M0sense would not show up on USB at all. After trying several failing USB-C cables (a standard theme), I took out Old Faithful and connected the board to my Linux box. Linux tried to configure/enumerate the device USB and failed. It was spotty to get it even that far.

Much messing around later, I managed to grab the screen on my board with my thumb while pulling out the USB connector and, inadvertently, the display cable. I got the display cable back in (and was proud that I could do it — tiny fiddly thing) only to find out that I'd cracked the screen. Good thing I bought five spares. Also, this allowed me to continue trying to boot the board without worrying about the now-missing screen. Didn't need it anyway.

There are two little buttons on the board: one labeled BOOT and the other RESET. The Internets said that the trick to bootloading was to hold down BOOT while tapping RESET ("like the ESP32", I guess). No luck. Found in the manufacturer docs where it said to hold BOOT during power-up. No luck.

Finishing Bootloading

I eventually found the manufacturer docs section that talks about what to do in my situation. The recommendation was to download manufacturer bootloader software (which had versions for Windows, Mac and Linux — good job) and then to jumper the BOOT pin on the board to the adjacent 3.3V pin while powering up. I couldn't believe that this was different from holding the BOOT button, so put it off for a long time. Turns out I was wrong.

Eventually I soldered pins onto my board, scrounged around my work until I found a jumper (yeesh), and tried it their way. Worked. Sigh. The M0sense showed up on USB as a drive, with USB information like this:

Bus 001 Device 058: ID ffff:ffff Bouffalo Bouffalo CDC DEMO

Could be more jank, but not sure how. CDC is surely "USB CDC (Communications Device Class)", but there is no obvious ACM port. Probably can mess with Linux udev to change that. Device ID ffff:ffff is just lazy and janky. "Bouffalo Bouffalo" doesn't even identify the processor (Bouffalo BL702 RISC-V), much less the board.

But hey, could flash demos from the manufacturer website now. Seemed to work. Hooray!

Went and got some ½" double-sided foam tape from the local hardware store: it fit perfectly. I taped down the screen to the top of the board Longan-Nano-Style — pressing firmly… and cracked the screen again. Luckily the crack this time was pretty livable. Still, need to be really careful with delicate screen.

Running Rust?

Haven't got there yet. There's a workable-looking PAC crate and a minimal HAL crate by a known-good developer. Flashing Rust still seems to be a pain, though.

Having built the HAL blinky.bin demo, I tried flashing with:

Anyhow, it looks like I have a long road ahead to figure out what's going on with bootloading on this chip. Seems like it's more complicated that one would hope. Will post here when I figure stuff out.

Other Limitations

The M0sense physical organization is not ideal. With the screen stuck to the side of the board opposite the buttons and LED, everything is good — until you solder pins on. If you solder them so that you can push the buttons and see the LED, you can no longer see the pin labels. (The silk for the pin labels should have been on the other side or on both sides.) At that point there's also no longer anyplace to put the screen, so it just dangles out onto the breadboard on the same side as the USB connector.

I'm suspecting that I'll need to JTAG the M0sense eventually. Fortunately, the Sipeed RV Debugger Plus is a JTAG unit still available as an open source project: it's on Amazon right now for US $9.

Status

After about 8 hours with the M0sense, I'm not yet convinced it was a good buy. But I still have hope. If I can get it to boot anything written in Rust it will suddenly look like a great deal.