Starting at the CM3, the CM3+ and continuing with the CM4 there have been variants available with or without onboard eMMC.
eMMC is a semiconductor device soldered directly to the circuit board which acts very much like an SD card – it can be used to boot RISC OS from, or store files for day to day use.
The key differentiator of eMMC is that it cannot be ejected from the socket because it’s soldered down (fixed media ), whereas an SD card can be (removable media ).
These 2 types of media are handled differently in software because FileCore allows multiple discs to be mounted and in use for a removable drive. It keeps track of which disc is currently inserted by polling the drive periodically and looking at the disc record for the disc it finds, optionally prompting the user to swap discs if it’s the wrong one.
Removable discs are also the reason why the drive icon doesn’t show the disc name under it; FileCore may be unsure exactly which disc is present.
With a fixed disc it knows exactly which one it is so can skip all the polling and prompting, and also display the disc name.
Unfortunately the different variants of Compute Module report the same board identity whether they are fitted with eMMC or not, and the SD card filing system (SDFS) can’t deduce on its own whether the chip is soldered down or in a socket – they “look” the same, are on the same pins, and on the same bus.
The job of knowing these low level hardware details falls to the HAL. It also can’t deduce on its own which is which so needs a help by assigning meaning to a spare I/O line. With this, it is possible to signal to the HAL, and hence to SDFS, that you are certain that there is an eMMC chip fitted.
Caution: DO NOT signal a removable disc as fixed, this will almost certainly result in data being lost or corrupted if the card is ejected!
The concept behind the modification is for a spare I/O line to be held low at boot time – this is most easily achieved with a solder blob to ground on the respective pin.
The modification was first introduced in February 2017 so will only be acted upon for versions of RISC OS newer than that.
U8 is an I/O expander, type FXL6408, which is surrounded by ground flood. Pin 4 of U8 is GPIO6. To denote “this board definitely has eMMC and it’s safe to treat it as a fixed disc” scrape a little solder resist off and use a blob of solder to join that to GPIO6 of U8.
The Compute Module 4 includes a one-time-programmable flag, defined at the factory, to denote the presence or absence of eMMC. RISC OS will read this flag instead of needing a spare I/O line to signal the state.
This requires firmware in the !Boot.Loader directory dated 29-Feb-2024 or later (the OTP flag existed before that date, but there was no way for RISC OS to read the flag in older firmware).