How to flash the eMMC on the Mars CM?


I use the recommended Debian image from, which works nicely. However I cannot find and/or access the eMMC on my Mars CM module. It won’t show up via lsblk, nor can I find anything obvious in /dev. dmesg lists the following errors periodically

[87121.373922] mmc0: cache flush error -110
[87121.377930] mmc_host mmc0: Bus speed (slot 0) = 49500000Hz (slot req 400000Hz, actual 399193HZ div = 62)
[87121.451169] mmc_host mmc0: Bus speed (slot 0) = 49500000Hz (slot req 100000000Hz, actual 49500000HZ div = 0)

Anyone has an idea how I can get the eMMC running? I would already be happy to somehow have the ability to flash it from external. Thank you!

Short answer: You can’t use the SD-Card and the eMMC module at the same time, as Boot the Mars CM | Milk-V states:

[The] eMMC version shares the hardware interface with the SD card, so they cannot be used at the same time.

Boot the Mars CM | Milk-V now also shows, how the eMMC can be flashed via USB-OTG.

I tried to flash my Mars CM via a Waveshare CM4-IO-Base-A Board and via an updated Turing Pi v2, and in both cases it doesn’t work.

The CM4-IO-Base-A Board doesn’t show up on my laptop when connecting it via USB-C (yes I put it into Boot mode) and the Turing Pi (after updating to BMC 2.0 RC1) states “No supported devices found”


I think I slowly make some progress by following Boot the Mars CM | Milk-V, instead of relying on Linux tools. After several unsuccessful attempts, it looks like the image burning is slowly progressing, yay :slightly_smiling_face: knocks on wood

Note to my future self: If something goes wrong during flashing (e.g. timeouts), do a system reboot.

Anyone who comes here after me. Flashing works following the Boot the Mars CM | Milk-V procedure.

Here are some of the pitfalls that I encountered:

  • You need to flash the firmware every time before you can flash the eMMC
  • If you run into timeout issues, only a reboot helps (Windows 10). Don’t ask me why
  • The USB Slave is only needed for power. Data transfer happens via the TLL serial port!

It would be awesome if Milk-V could publish the source code of the tool, so we can port this to Linux. The Windows application is no fun to use.

Really? Isn’t serial transmission very slow?

It is, but if you know a better way please let us know!

I think data transmission is through USB, otherwise why install USB driver software? I think serial port is used to control the related operations of sending instructions to configure USB transmission. However, I don’t understand why there is no significant improvement in the running speed of the system installed in EMMC compared to TF cards

1 Like

Ah yes, that’s possible. I would really like to get the source code for the Windows application, then we can check if that’s true.