How to flash the eMMC on the Mars CM?

Hey,

I use the recommended Debian image from github.com/milkv-mars/mars-buildroot-sdk, 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”

:thinking:

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.