3.9.28 MMC

Generic Multimedia Card. This model is written in LISA+.

MMC contains the following CADI targets:

  • MMC

About MMC

This component simulates an SD or SDHC card that is compatible with the MultiMedia Card Association (MMCA, https://www.jedec.org) specification version 3.31. The parameters permit configuration of a number of attributes reflected in the CID and CSD registers. You can customize the component further by modifying the supplied MMC model source code directly.

When paired with a PL180_MCI component, the MMC device model provides emulation of a flexible, persistent storage mechanism.

The MMC component uses a file on the host PC to simulate the storage device. The size of this backing store file determines the reported size of the MMC device. As small sections of this file are paged in by the model, large filesystems can be modeled while making efficient use of host PC memory. The backing store file can contain a partition table and filesystems such as FAT or EXT2.

The image file is a direct bit copy of the contents of an SD card. If the image file that the p_mmc_file parameter refers to does not exist, the component behaves as if the card is absent. If the image file is read-only, then the component behaves as if the card is read-only.


Operating system boots often attempt to write to the boot filesystem. They might not work properly if the boot filesystem is on a read-only card.

The MMC component does not model card insertion or removal. It models the card having already been inserted at system instantiation time.

You can configure the MMC component to behave as an SDHC card by setting the card_type parameter to SDHC. SDHC mode is a model-specific extension, and is not supported by PL180 hardware. It supports filesystems that are larger than 2GB.

The component supports these commands:

  • MMC_SEND_EXT_CSD. This command is supported in SDHC mode only.

The block length is 512 bytes. SimGen reports attempts to change it as errors.

The component supports these erase commands (Class 5), but they have no effect on the disk backing storage:


The component does not support these commands:


The component does not support stream read and write commands (Classes 1 and 3):


The component does not support block oriented write protection commands (Class 6):


The component does not support lock card commands (Class 7) or application-specific commands (Class 8):


The component does not support I/O mode commands (Class 9):


The component does not support reserved commands. Using a reserved command sets the MMC ST_ER_B_ILLEGAL_COMMAND bit in the status register of the card. Read this with the MMC_SEND_STATUS command.

Use the p_diagnostics parameter to select the level of diagnostic output, to help to debug device driver and controller-to-card protocol issues. It supports the following levels:

Level 0
Level 1
Warnings about attempting to change read-only settings.
Level 2
Trace of command calls.
Level 3
Information about every step in the MMC_Protocol interaction.
Level 4
Hex dump of every block sent or received.

The registers are not memory mapped. Instead, you access them using relevant MMC commands. The MMC component model makes the registers available through a CADI interface. Modification of these registers through CADI is not recommended, but not prohibited. For example, modifying the card ID (CID) registers can be useful when experimenting with drivers, but direct modification of the STATUS_REG register is likely to put the card model into an indeterminate state.

For a full definition of MMC registers, see the MMCA System Summary documentation. Device-specific register information can also be obtained from MMC vendors.

Table 3-342 MMC registers

Name CADI register number Description
OCR_REG 0x000 Operating conditions register
CID_REG0 0x004 Card ID bits 127:96
CID_REG1 0x005 Card ID bits 95:64
CID_REG2 0x006 Card ID bits 63:32
CID_REG3 0x007 Card ID bits 31:0
CSD_REG0 0x008 Card specific data bits 127:96
CSD_REG1 0x009 Card specific data bits 95:64
CSD_REG2 0x00a Card specific data bits 63:32
CSD_REG3 0x00b Card specific data bit 31:0
RCA_REG 0x00c Relative card address register
DSR_REG 0x00d Driver stage register
BLOCKLEN_REG 0x00e Block length
STATUS_REG 0x00f Card status
BLOCK_COUNT_REG 0x010 Block count

Table 3-343 Ports

Name Protocol Type Description
card_present StateSignal Master Used to signal whether an MMC image is loaded. It is set if an image is loaded, and is clear if no image is loaded.
clk_in ClockSignal Slave Input clock signal used to drive our 'bus'.
mmc MMC_Protocol Slave The MMC slave port.

Table 3-344 Parameters for MMC

Name Type Default value Description
card_type string "SD" Card type ('SD' or 'SDHC')
diagnostics int 0x0 Diagnostics level
force_sector_addressing bool 0x0 Use sector addressing even on small cards
p_OEMid int 0x0 Card ID OEM ID
p_fast_access bool 0x1 Don't simulate MMC block access delays
p_manid int 0x2 Card ID Manufacturer ID
p_mmc_file string "mmc.dat" MMCard filename
p_prodName string "ARMmmc" Card ID Product Name (6 chars)
p_prodRev int 0x1 Card ID Product Revision
p_sernum int 0xca4d0001 Card Serial Number
Non-ConfidentialPDF file icon PDF version100964_1110_00_en
Copyright © 2014–2020 Arm Limited or its affiliates. All rights reserved.