54. Secure digital input/output MultiMediaCard interface (SDMMC)

54.1 SDMMC main features

The SD/SDIO, embedded MultiMediaCard (e•MMC) host interface (SDMMC) provides an interface between the AHB bus and SD memory cards, SDIO cards and e•MMC devices.

The MultiMediaCard system specifications are available through the MultiMediaCard Association website at www.jedec.org , published by the MMCA technical committee.

SD memory card and SD I/O card system specifications are available through the SD card Association website at www.sdcard.org .

The SDMMC features include the following:

The MultiMediaCard/SD bus connects cards to the host.

The current version of the SDMMC supports only one SD/SDIO/e•MMC card at any one time and a stack of e•MMC.

54.2 SDMMC implementation

Table 385. STM32L4Rxxx and STM32L4Sxxx SDMMC features

SDMMC modes/features (1)SDMMC1
Variable delay (SDR104, HS200)-
SDMMC_CKINX
SDMMC_CDIR, SDMMC_D0DIRX
SDMMC_D123DIRX

1. X = supported.

Table 386. STM32L4P5xx and STM32L4Q5xx SDMMC features

SDMMC modes/features (1)SDMMC1SDMMC2
Variable delay (SDR104, HS200)--
SDMMC_CKINXX

Table 386. STM32L4P5xx and STM32L4Q5xx SDMMC features (continued)

SDMMC modes/features (1)SDMMC1SDMMC2
SDMMC_CDIR, SDMMC_D0DIRX-
SDMMC_D123DIRX-

1. X = supported.

54.3 SDMMC bus topology

Communication over the bus is based on command/response and data transfers.

The basic transaction on the SD/SDIO/e•MMC bus is the command/response transaction. These types of bus transaction transfer their information directly within the command or response structure. In addition, some operations have a data token.

Data transfers are done in the following ways:

Data transfers to/from e•MMC cards are done in data blocks or streams.

Figure 568. SDMMC “no response” and “no data” operations

Timing diagram for SDMMC 'no response' and 'no data' operations. The diagram shows two command-response transactions on the SDMMC_CMD line. In the first transaction, a CMD is sent from host to card, but no response is received. This period is labeled 'Operation no response and no data'. In the second transaction, a CMD is sent and a Response is received from card to host. This period is labeled 'Operation response no data'. The SDMMC_D line is idle throughout. A legend indicates white boxes are 'From host to card' and blue boxes are 'From card to host'. Reference MSv40124V1.
Timing diagram for SDMMC 'no response' and 'no data' operations. The diagram shows two command-response transactions on the SDMMC_CMD line. In the first transaction, a CMD is sent from host to card, but no response is received. This period is labeled 'Operation no response and no data'. In the second transaction, a CMD is sent and a Response is received from card to host. This period is labeled 'Operation response no data'. The SDMMC_D line is idle throughout. A legend indicates white boxes are 'From host to card' and blue boxes are 'From card to host'. Reference MSv40124V1.

Figure 569. SDMMC (multiple) block read operation

Timing diagram for SDMMC (multiple) block read operation. The diagram shows a sequence of operations on the SDMMC_CMD and SDMMC_D lines. It starts with a CMD from host to card, followed by a Response from card to host. Then, a series of three 'Data block + CRC' tokens are transferred from card to host. The first block read is labeled 'Block read operation', and the entire sequence of three blocks is labeled 'Multiple block read operation'. After the third block, a 'Data stop operation' is indicated by a CMD from host to card and a Response from card to host. A legend indicates white boxes are 'From host to card' and blue boxes are 'From card to host'. Reference MSv40155V1.
Timing diagram for SDMMC (multiple) block read operation. The diagram shows a sequence of operations on the SDMMC_CMD and SDMMC_D lines. It starts with a CMD from host to card, followed by a Response from card to host. Then, a series of three 'Data block + CRC' tokens are transferred from card to host. The first block read is labeled 'Block read operation', and the entire sequence of three blocks is labeled 'Multiple block read operation'. After the third block, a 'Data stop operation' is indicated by a CMD from host to card and a Response from card to host. A legend indicates white boxes are 'From host to card' and blue boxes are 'From card to host'. Reference MSv40155V1.

Note: The Stop Transmission command is not required at the end of a e•MMC multiple block read with predefined block count.

Figure 570. SDMMC (multiple) block write operation

Timing diagram for SDMMC (multiple) block write operation. It shows two signal lines: SDMMC_CMD and SDMMC_D. On the SDMMC_CMD line, a CMD is sent from host to card, followed by a Response from card to host. On the SDMMC_D line, a 'Block write operation' consists of a Data block (host to card), CRC (host to card), CRC status (card to host), and a Busy signal (card to host). This sequence repeats. A 'Multiple block write operation' is indicated by a long double-headed arrow covering the entire sequence. At the end, a 'Data stop operation' is shown with another CMD and Response on the SDMMC_CMD line. A legend at the bottom left indicates white boxes are 'From host to card' and blue boxes are 'From card to host'. The diagram is labeled MSv40156V1.
Timing diagram for SDMMC (multiple) block write operation. It shows two signal lines: SDMMC_CMD and SDMMC_D. On the SDMMC_CMD line, a CMD is sent from host to card, followed by a Response from card to host. On the SDMMC_D line, a 'Block write operation' consists of a Data block (host to card), CRC (host to card), CRC status (card to host), and a Busy signal (card to host). This sequence repeats. A 'Multiple block write operation' is indicated by a long double-headed arrow covering the entire sequence. At the end, a 'Data stop operation' is shown with another CMD and Response on the SDMMC_CMD line. A legend at the bottom left indicates white boxes are 'From host to card' and blue boxes are 'From card to host'. The diagram is labeled MSv40156V1.

Note: The Stop Transmission command is not required at the end of an e•MMC multiple block write with predefined block count.

Note: The SDMMC does not send any data as long as the Busy signal is asserted (SDMMC_D0 pulled low).

Figure 571. SDMMC (sequential) stream read operation

Timing diagram for SDMMC (sequential) stream read operation. It shows two signal lines: SDMMC_CMD and SDMMC_D. On the SDMMC_CMD line, a CMD is sent from host to card, followed by a Response from card to host. On the SDMMC_D line, a continuous 'Data stream' is shown as a blue bar from card to host. A 'Stream read operation' is indicated by a long double-headed arrow. At the end, a 'Data stop operation' is shown with another CMD and Response on the SDMMC_CMD line. A legend at the bottom left indicates white boxes are 'From host to card' and blue boxes are 'From card to host'. The diagram is labeled MSv40157V2.
Timing diagram for SDMMC (sequential) stream read operation. It shows two signal lines: SDMMC_CMD and SDMMC_D. On the SDMMC_CMD line, a CMD is sent from host to card, followed by a Response from card to host. On the SDMMC_D line, a continuous 'Data stream' is shown as a blue bar from card to host. A 'Stream read operation' is indicated by a long double-headed arrow. At the end, a 'Data stop operation' is shown with another CMD and Response on the SDMMC_CMD line. A legend at the bottom left indicates white boxes are 'From host to card' and blue boxes are 'From card to host'. The diagram is labeled MSv40157V2.

Figure 572. SDMMC (sequential) stream write operation

Timing diagram for SDMMC (sequential) stream write operation. It shows two signal lines: SDMMC_CMD and SDMMC_D. On the SDMMC_CMD line, a CMD is sent from host to card, followed by a Response from card to host. On the SDMMC_D line, a continuous 'Data stream' is shown as a white bar from host to card. A 'Stream write operation' is indicated by a long double-headed arrow. At the end, a 'Data stop operation' is shown with another CMD and Response on the SDMMC_CMD line, and a Busy signal (card to host) appears on the SDMMC_D line. A legend at the bottom left indicates white boxes are 'From host to card' and blue boxes are 'From card to host'. The diagram is labeled MSv40158V2.
Timing diagram for SDMMC (sequential) stream write operation. It shows two signal lines: SDMMC_CMD and SDMMC_D. On the SDMMC_CMD line, a CMD is sent from host to card, followed by a Response from card to host. On the SDMMC_D line, a continuous 'Data stream' is shown as a white bar from host to card. A 'Stream write operation' is indicated by a long double-headed arrow. At the end, a 'Data stop operation' is shown with another CMD and Response on the SDMMC_CMD line, and a Busy signal (card to host) appears on the SDMMC_D line. A legend at the bottom left indicates white boxes are 'From host to card' and blue boxes are 'From card to host'. The diagram is labeled MSv40158V2.

Stream data transfer operates only in a 1-bit wide bit bus configuration on SDMMC_D0 in single data rate modes (DS, HS, and SDR).

54.4 SDMMC operation modes

Table 387. SDMMC operation modes SD & SDIO

SDIO Bus Speed modes (1)(2)Max Bus Speed (3) [Mbyte/s]Max Clock frequency [MHz] (4)Signal Voltage [V]
DS (Default Speed)12.5253.3
HS (High Speed)25503.3
SDR1212.5251.8
SDR2525501.8
DDR5050501.8
SDR50501001.8
  1. 1. SDR single data rate signaling.
  2. 2. DDR double data rate signaling. (data is sampled on both SDMMC_CK clock edges).
  3. 3. SDIO bus speed with 4bit bus width.
  4. 4. Maximum frequency depending on maximum allowed IO speed.

Table 388. SDMMC operation modes e•MMC

e•MMC bus speed modes (1)(2)Max bus speed (3) [Mbyte/s]Max clock frequency [MHz] (4)Signal voltage [V]
Legacy compatible26263/1.8/1.2V
High speed SDR52523/1.8/1.2V
High speed DDR104523/1.8/1.2V
  1. 1. SDR single data rate signaling.
  2. 2. DDR double data rate signaling. (data is sampled on both SDMMC_CK clock edges).
  3. 3. e•MMC bus speed with 8bit bus width.
  4. 4. Maximum frequency depending on maximum allowed IO speed.

54.5 SDMMC functional description

The SDMMC consists of three parts:

54.5.1 SDMMC block diagram

Figure 573 shows the SDMMC block diagram.

SDMMC block diagram showing internal components and external pins.

Figure 573. SDMMC block diagram

The diagram illustrates the internal architecture of the SDMMC interface. On the left, external signals include sdmmc_ker_ck (kernel clock), sdmmc_hclk (AHB clock), and sdmmc_it (interrupt). These connect to an AHB INTERFACE block containing Registers , a FIFO , and an IDMA unit. The IDMA is connected to a 32-bit AHB master bus . The AHB INTERFACE connects to an SDMMC ADAPTER block. Inside the adapter, there is a Control unit , a Data transmit path , a Command path , a Data receive path , and a Response path . A CLK MUX block is also present in the adapter. The adapter connects to external pins on the right: SDMMC_D0DIR , SDMMC_D123DIR , SDMMC_CDIR , SDMMC_CK , sdmmc_io_in_ck , SDMMC_CKIN , SDMMC_D[7:0] (8-bit data bus), and SDMMC_CMD . A reference code MSV41696V4 is shown in the bottom right corner.

SDMMC block diagram showing internal components and external pins.

54.5.2 SDMMC pins and internal signals

Table 389 lists the SDMMC internal input/output signals, Table 390 the SDMMC pins (alternate functions).

Table 389. SDMMC internal input/output signals

Signal nameSignal typeDescription
sdmmc_ker_ckDigital inputSDMMC kernel clock
sdmmc_hclkDigital inputAHB clock
sdmmc_itDigital outputSDMMC global interrupt
sdmmc_io_in_ckDigital inputSD/SDIO/e•MMC card feedback clock. This signal is internally connected to the SDMMC_CK pin (for DS and HS modes).

Table 390. SDMMC pins

Signal nameSignal typeDescription
SDMMC_CKDigital outputClock to SD/SDIO/e•MMC card
SDMMC_CKINDigital inputClock feedback from an external driver for SD/SDIO/e•MMC card. (for SDR12, SDR25, SDR50, DDR50)
SDMMC_CMDDigital input/outputSD/SDIO/e•MMC card bidirectional command/response signal.
SDMMC_CDIRDigital outputSD/SDIO/e•MMC card I/O direction indication for the SDMMC_CMD signal.

Table 390. SDMMC pins (continued)

Signal nameSignal typeDescription
SDMMC_D[7:0]Digital input/outputSD/SDIO/eMMC card bidirectional data lines.
SDMMC_D0DIRDigital outputSD/SDIO/eMMC card I/O direction indication for the SDMMC_D0 data line.
SDMMC_D123DIRDigital outputSD/SDIO/eMMC card I/O direction indication for the data lines SDMMC_D[3:1].

54.5.3 General description

The SDMMC_D[7:0] lines have different operating modes:

To allow the connection of an external driver (a voltage switch transceiver), the direction of data flow on the data lines is indicated with I/O direction signals. The SDMMC_D0DIR signal indicates the I/O direction for the SDMMC_D0 data line, the SDMMC_D123DIR for the SDMMC_D[3:1] data lines.

SDMMC_CMD only operates in push-pull mode:

To allow the connection of an external driver (a voltage switch transceiver), the direction of data flow on the SDMMC_CMD line is indicated with the I/O direction signal SDMMC_CDIR .

SDMMC_CK clock to the card originates from sdmmc_ker_ck :

Figure 574. SDMMC Command and data phase relation

Timing diagram showing the phase relation between SDMMC_CMD, SDMMC_Dn, SDMMC_CK, and sdmmc_ker_ck signals across five different configurations. The configurations are: 1) CLKDIV = 0; 2) CLKDIV > 0, DDR = 0, NEGEDGE = 0; 3) CLKDIV > 0, DDR = 0, NEGEDGE = 1; 4) CLKDIV > 0, DDR = 1, NEGEDGE = 0; 5) CLKDIV > 0, DDR = 1, NEGEDGE = 1. The diagram shows the relative timing of the command, data, and clock signals for each case.

The figure is a timing diagram illustrating the phase relation between SDMMC_CMD, SDMMC_Dn, SDMMC_CK, and sdmmc_ker_ck signals across five different configurations. The configurations are: 1) CLKDIV = 0; 2) CLKDIV > 0, DDR = 0, NEGEDGE = 0; 3) CLKDIV > 0, DDR = 0, NEGEDGE = 1; 4) CLKDIV > 0, DDR = 1, NEGEDGE = 0; 5) CLKDIV > 0, DDR = 1, NEGEDGE = 1. The diagram shows the relative timing of the command, data, and clock signals for each case.

Timing diagram showing the phase relation between SDMMC_CMD, SDMMC_Dn, SDMMC_CK, and sdmmc_ker_ck signals across five different configurations. The configurations are: 1) CLKDIV = 0; 2) CLKDIV > 0, DDR = 0, NEGEDGE = 0; 3) CLKDIV > 0, DDR = 0, NEGEDGE = 1; 4) CLKDIV > 0, DDR = 1, NEGEDGE = 0; 5) CLKDIV > 0, DDR = 1, NEGEDGE = 1. The diagram shows the relative timing of the command, data, and clock signals for each case.

Table 391. SDMMC Command and data phase selection

CLKDIVDDRNEGEDGESDMMC_CKCommand outData out
0xx=
sdmmc_ker_ck
generated on sdmmc_ker_ck falling edge
>000generated on
sdmmc_ker_ck
rising edge
generated on sdmmc_ker_ck falling edge succeeding the SDMMC_CK rising edge.generated on sdmmc_ker_ck falling edge succeeding a SDMMC_CK edge.
1generated on the same sdmmc_ker_ck rising edge that generates the SDMMC_CK falling edge.
10generated on sdmmc_ker_ck falling edge succeeding the SDMMC_CK rising edge.
1generated on the same sdmmc_ker_ck rising edge that generates the SDMMC_CK falling edge.

By default, the sdmmc_io_in_ck feedback clock input is selected for sampling incoming data in the SDMMC receive path. It is derived from the SDMMC_CK pin.

When using an external driver (a voltage switch transceiver), the SDMMC_CKIN feedback clock input can be selected to sample the receive data.

For an SD/SDIO/e•MMC card, the clock frequency can vary between 0 and 208 MHz (limited by maximum I/O speed).

Depending on the selected bus mode (SDR or DDR), one bit or two bits are transferred on SDMMC_D[7:0] lines with each clock cycle. The SDMMC_CMD line transfers only one bit per clock cycle.

54.5.4 SDMMC adapter

The SDMMC adapter (see Figure 573: SDMMC block diagram ) is a multimedia/secure digital memory card bus master that provides an interface to a MultiMediaCard stack or to a secure digital memory card. It consists of the following subunits:

Note: The adapter registers and FIFO use the AHB clock domain (sdmmc_hclk). The control unit, command path and data transmit path use the SDMMC adapter clock domain (sdmmc_ker_ck). The response path and data receive path use the SDMMC adapter feedback clock domain from the sdmmc_io_in_ck, or SDMMC_CKIN.

Adapter register block

The adapter register block contains all system control registers, the SDMMC command and response registers and the data FIFO.

This block also generates the signals from the corresponding bit location in the SDMMC Clear register that clear the static flags in the SDMMC adapter.

Control unit

The control unit illustrated in Figure 575 , contains the power management functions, the SDMMC_CK clock management with divider, and the I/O direction management.

Figure 575. Control unit

Figure 575. Control unit diagram showing the internal structure of the control unit. It includes a 'Registers' block, a 'Control unit' block containing 'Clock management', 'Power management', and 'IO management' subunits. The 'Registers' block is connected to the 'Control unit' and the 'Clock management' subunit. The 'sdmmc_ker_ck' input is connected to the 'Clock management' subunit. The 'Clock management' subunit outputs 'SDMMC_CK' and is connected to 'To command/response and data paths'. The 'Power management' subunit outputs 'SDMMC_D0DIR', 'SDMMC_D123DIR', and 'SDMMC_CDIR'. The 'IO management' subunit is also connected to 'To command/response and data paths'.
graph LR
    subgraph Control_unit [Control unit]
        CM[Clock management]
        PM[Power management]
        IM[IO management]
    end
    R[Registers] --> CM
    R --> PM
    R --> IM
    SKC[sdmmc_ker_ck] --> CM
    CM --> SDCK[SDMMC_CK]
    CM --> CRDP[To command/response and data paths]
    PM --> SD0D[SDMMC_D0DIR]
    PM --> SD12D[SDMMC_D123DIR]
    PM --> SCD[SDMMC_CDIR]
    PM --> CRDP
    IM --> CRDP
    MSV[MSV39278V2]
  
Figure 575. Control unit diagram showing the internal structure of the control unit. It includes a 'Registers' block, a 'Control unit' block containing 'Clock management', 'Power management', and 'IO management' subunits. The 'Registers' block is connected to the 'Control unit' and the 'Clock management' subunit. The 'sdmmc_ker_ck' input is connected to the 'Clock management' subunit. The 'Clock management' subunit outputs 'SDMMC_CK' and is connected to 'To command/response and data paths'. The 'Power management' subunit outputs 'SDMMC_D0DIR', 'SDMMC_D123DIR', and 'SDMMC_CDIR'. The 'IO management' subunit is also connected to 'To command/response and data paths'.

The power management subunit disables the card bus output signals during the power-off and power-up phases.

There are three power phases:

The clock management subunit uses the sdmmc_ker_ck to generate the SDMMC_CK and provides the division control. It also takes care of stopping the SDMMC_CK for i.e. flow control.

The clock outputs are inactive:

The I/O management subunit takes care of the SDMMC_Dn and SDMMC_CMD I/O direction signals, which controls the external voltage transceiver.

Command/response path

The command/response path subunit transfers commands and responses on the SDMMC_CMD line. The command path is clocked on the SDMMC_CK and sends commands to the card. The response path is clocked on the sdmmc_rx_ck and receives responses from the card.

Figure 576. Command/response path

Block diagram of the Command/Response path subunit. The diagram shows a 'Command / Response path' block containing 'Status flag', 'Command timer', and 'Control logic'. The 'Control logic' is connected to 'To control unit', 'Registers', 'Response registers', and 'Command registers'. The 'Command path' consists of 'Command shift register' and 'CRC' block, connected to 'SDMMC_CK' and 'SDMMC_CMD' (out). The 'Response path' consists of 'Response shift register' and 'CRC' block, connected to 'sdmmc_rx_ck' and 'SDMMC_CMD' (in).

The diagram illustrates the internal architecture of the Command/Response path subunit. A central grey box labeled 'Command / Response path' contains three sub-blocks: 'Status flag', 'Command timer', and 'Control logic'. The 'Control logic' is connected to an external 'To control unit' via a bidirectional arrow. It also has connections to three external register blocks: 'Registers', 'Response registers', and 'Command registers'. Inside the 'Command / Response path' box, the 'Status flag' and 'Command timer' are connected to the 'Control logic'. Below them, the 'Response path' includes a 'Response shift register' and a 'CRC' block. The 'Response shift register' is connected to the 'Control logic' and the 'CRC' block. The 'CRC' block is connected to the 'SDMMC_CMD' line (labeled 'in'). The 'Command path' includes a 'Command shift register' and a 'CRC' block. The 'Command shift register' is connected to the 'Control logic' and the 'CRC' block. The 'CRC' block is connected to the 'SDMMC_CMD' line (labeled 'out'). The 'Command shift register' is also connected to the 'SDMMC_CK' line. The 'Response shift register' is connected to the 'sdmmc_rx_ck' line. The diagram is labeled 'MSV40160V2' in the bottom right corner.

Block diagram of the Command/Response path subunit. The diagram shows a 'Command / Response path' block containing 'Status flag', 'Command timer', and 'Control logic'. The 'Control logic' is connected to 'To control unit', 'Registers', 'Response registers', and 'Command registers'. The 'Command path' consists of 'Command shift register' and 'CRC' block, connected to 'SDMMC_CK' and 'SDMMC_CMD' (out). The 'Response path' consists of 'Response shift register' and 'CRC' block, connected to 'sdmmc_rx_ck' and 'SDMMC_CMD' (in).

Command/response path state machine (CPSM)

When ever the CPSM is active, i.e. not in the Idle state, the CPSMACT bit is set.

Figure 577. Command path state machine (CPSM)

Figure 577. Command path state machine (CPSM) state transition diagram. The diagram shows five states: Idle, Pending, Boot, Send, and Wait. Transitions are triggered by specific conditions involving SDMMC_CMD write, CPSMEN, WAITPEND, BOOTEN, BOOTMODE, and WAITRESP. Idle is the initial state. Transitions from Idle: to Pending (SDMMC_CMD write and CPSMEN = 1 and WAITPEND = 1), to Boot (SDMMC_CMD write and CPSMEN = 1 and BOOTEN = 1), to Send (SDMMC_CMD write and CPSMEN = 1 and WAITPEND = 0 and BOOTEN = 0). Transitions from Pending: to Idle (DPSM send CMD or WAITPEND = 0), to Boot (BOOTMODE = 0 and BOOTEN = 1). Transitions from Boot: to Idle (BOOTMODE = 0 and BOOTEN = 0), to Send (BOOTMODE = 1). Transitions from Send: to Idle (End of CMD and WAITRESP = 00), to Wait (End of CMD and WAITRESP = not 00). Transitions from Wait: to Receive (Start bit detected), to Idle (End of response or CRC status error).
stateDiagram-v2
    [*] --> Idle
    Idle --> Pending: SDMMC_CMD write and CPSMEN = 1 and WAITPEND = 1
    Idle --> Boot: SDMMC_CMD write and CPSMEN = 1 and BOOTEN = 1
    Idle --> Send: SDMMC_CMD write and CPSMEN = 1 and WAITPEND = 0 and BOOTEN = 0
    Pending --> Idle: DPSM send CMD or WAITPEND = 0
    Pending --> Boot: BOOTMODE = 0 and BOOTEN = 1
    Boot --> Idle: BOOTMODE = 0 and BOOTEN = 0
    Boot --> Send: BOOTMODE = 1
    Send --> Idle: End of CMD and WAITRESP = 00
    Send --> Wait: End of CMD and WAITRESP = not 00
    Wait --> Receive: Start bit detected
    Receive --> Idle: End of response or CRC status error
  
Figure 577. Command path state machine (CPSM) state transition diagram. The diagram shows five states: Idle, Pending, Boot, Send, and Wait. Transitions are triggered by specific conditions involving SDMMC_CMD write, CPSMEN, WAITPEND, BOOTEN, BOOTMODE, and WAITRESP. Idle is the initial state. Transitions from Idle: to Pending (SDMMC_CMD write and CPSMEN = 1 and WAITPEND = 1), to Boot (SDMMC_CMD write and CPSMEN = 1 and BOOTEN = 1), to Send (SDMMC_CMD write and CPSMEN = 1 and WAITPEND = 0 and BOOTEN = 0). Transitions from Pending: to Idle (DPSM send CMD or WAITPEND = 0), to Boot (BOOTMODE = 0 and BOOTEN = 1). Transitions from Boot: to Idle (BOOTMODE = 0 and BOOTEN = 0), to Send (BOOTMODE = 1). Transitions from Send: to Idle (End of CMD and WAITRESP = 00), to Wait (End of CMD and WAITRESP = not 00). Transitions from Wait: to Receive (Start bit detected), to Idle (End of response or CRC status error).

CMDSENT flag is generated immediately after the command end bit.
The RESPCMDR and RESPxR registers are not modified.

DPSM before moving to the Send state. This enables i.e. the CMD12 Stop Transmission command to be sent aligned with the data.

Note: The CPSM remains in the Idle state for at least eight SDMMC_CK periods to meet the \( N_{CC} \) and \( N_{RC} \) timing constraints. \( N_{CC} \) is the minimum delay between two host commands, and \( N_{RC} \) is the minimum delay between the host command and the card response.

Note: The response timeout has a fixed value of 64 SDMMC_CK clock periods.

A command is a token that starts an operation. Commands are sent from the host to either a single card (addressed command) or all connected cards (broadcast command are available for e•MMC V3.31 or previous). Commands are transferred serially on the SDMMC_CMD line. All commands have a fixed length of 48 bits. The general format for a command token for SD-Memory cards, SDIO cards, and e•MMC cards is shown in Table 392 .

The command token data is taken from 2 registers, one containing a 32-bits argument and the other containing the 6-bits command index (six bits sent to a card).

Table 392. Command token format

Bit positionWidthValueDescription
4710Start bit
4611Transmission bit
[45:40]6xCommand index
[39:8]32xArgument
[7:1]7xCRC7
011End bit

Next to the command data there are command type (WAITRESP) bits controlling the command path state machine (CPSM). These bits also determine whether the command requires a response, and whether the response is short (48 bit) or long (136 bits) long, and if a CRC is present or not.

A response is a token that is sent from an addressed card or synchronously from all connected cards to the host as an answer to a previous received command. All responses are sent via the command line SDMMC_CMD. The response transmission always starts with the left bit of the bit string corresponding to the response code word. The code length depends on the response type. Response tokens R1, R2, R3, R4, R5, and R6 have various

coding schemes, depending on their content. The general formats for the response tokens for SD-Memory cards, SDIO cards, and e•MMC cards are shown in Table 393 , Table 394 and Table 395 .

A response always starts with a start bit (always 0), followed by the bit indicating the direction of transmission (card = 0). A value denoted by x in the tables below indicates a variable entry. Most responses, except some, are protected by a CRC. Every command code word is terminated by the end bit (always 1).

The response token data is stored in 5 registers, four containing the 32-bits card status, OCR register, argument or 127-bits CID or CSD register including internal CRC, and one register containing the 6-bits command index.

Table 393. Short response with CRC token format

Bit positionWidthValueDescription
4710Start bit
4610Transmission bit
[45:40]6xCommand index (or reserved 111111)
[39:8]32xArgument
[7:1]7xCRC7
011End bit

Table 394. Short response without CRC token format

Bit positionWidthValueDescription
4710Start bit
4610Transmission bit
[45:40]6xCommand index (or reserved 111111)
[39:8]32xArgument
[7:1]71111111(reserved 1111111)
011End bit

Table 395. Long response with CRC token format

Bit positionWidthValueDescription
13510Start bit
13410Transmission bit
[133:128]6111111Reserved
[127:1]127:8xCID or CSD slices
7:1xCRC7 (included in CID or CSD)
011End bit

The command/response path operates in a half-duplex mode, so that either commands can be sent or responses can be received. If the CPSM is not in the Send state, the

SDMMC_CMD output is in the Hi-Z state. Data sent on SDMMC_CMD are synchronous with the SDMMC_CK according the NEGEDGE register bit see Figure 574 .

The command and short response with CRC, the CRC generator calculates the CRC checksum for all 40 bits before the CRC code. This includes the start bit, transmission bit, command index, and command argument (or card status).

For the long response the CRC checksum is calculated only over the 120 bits of R2 CID or CSD. Note that the start bit, transmission bit and the six reserved bits are not used in the CRC calculation.

The CRC checksum is a 7-bit value:

\[ \text{CRC}[6:0] = \text{remainder } [(M(x) * x^7) / G(x)] \]

\[ G(x) = x^7 + x^3 + 1 \]

\[ M(x) = (\text{first bit}) * x^n + (\text{second bit}) * x^{n-1} + \dots + (\text{last bit before CRC}) * x^0 \]

Where \( n = 39 \) or \( 119 \) .

The CPSM allows to send a number of specific commands to handle various operating modes when CPSMEN is set, see Table 396 .

Table 396. Specific Commands overview

VSWITCHBOOTENBOOTMODCMDTRANWAITPENDCMDSTOPWAITINTDescription
1xxxxxxStart Voltage Switch Sequence
01xxxxxStart normal boot
011xxxxStart alternative boot
001xxxxStop alternative boot.
0001xxxSend command with associated data transfer.
000011xe•MMC stream data transfer, command (STOP_TRANSMISSION) pending until end of data transfer.
000010xe•MMC stream data transfer, command different from (STOP_TRANSMISSION) pending until end of data transfer.
000001xSend command (STOP_TRANSMISSION), stopping any ongoing data transmission.
0000001Enter e•MMC wait interrupt (Wait-IRQ) mode.
0000000Any other none specific command

The command/response path implements the status flags and associated clear bits shown in Table 397 :

Table 397. Command path status flags

FlagDescription
CMDSENTSet at the end of the command without response. (CPSM moves from Send to Idle)
CMDRENDSet at the end of the command response when the CRC is OK. (CPSM moves from Receive to Idle)
CCRCFAILSet at the end of the command response when the CRC is FAIL. (CPSM moves from Receive to Idle)
CTIMEOUTSet after the command when no response start bit received before the timeout. (CPSM moves from Wait to Idle)
CKSTOPSet after the voltage switch (VSWITCHEN = 1) command response when the CRC is OK and the SDMMC_CK is stopped. (no impact on CPSM)
VSWENDSet after the voltage switch (VSWITCH = 1) timeout of 5 ms + 1 ms. (no impact on CPSM)
CPSMACTCommand transfer in progress. (CPSM not in Idle state)

The command path error handling is shown in Table 398 :

Table 398. Command path error handling

ErrorCPSM stateCauseCard actionHost actionCPSM action
TimeoutWaitNo start bit in timeUnknownReset or cycle power card (1)Move to Idle
CRC statusReceiveNegative statusCommand ignoredResend command (1)Move to Idle
Transmission errorCommand acceptedResend command (1)
  1. 1. When CMDTRANS is set, also a stop_transmission command must be sent to move the DPSM to Idle.

Data path

The data path subunit transfers data on the SDMMC_D[7:0] lines to and from cards. The data transmit path is clocked on the SDMMC_CK and sends data to the card. The data receive path is clocked on the sdmmc_rx_ck and receives data from the card. Figure 578 shows the data path block diagram.

Figure 578. Data path

Figure 578. Data path diagram showing the internal architecture of the SDMMC interface. The diagram is divided into two main sections: 'Registers' and 'Data path'. The 'Registers' section includes a 'Registers' block and a 'FIFO' block. The 'Data path' section is a large grey box containing several sub-components: 'Status flag', 'Data timer', and 'Control logic' at the top, which connect to 'To control unit'. Below these are 'Odd receive shift register', 'Even receive shift register', 'Odd CRC', and 'Even CRC' for receiving data. At the bottom are 'Odd transmit shift register', 'Even transmit shift register', 'Odd CRC', 'Even CRC', and a 'Mux' for transmitting data. External connections include 'SDMMC_D[7:0]' (in/out), 'sdmmc_rx_ck' (in), and 'SDMMC_CK' (in/out). The diagram is labeled 'MSV40162V2' in the bottom right corner.
Figure 578. Data path diagram showing the internal architecture of the SDMMC interface. The diagram is divided into two main sections: 'Registers' and 'Data path'. The 'Registers' section includes a 'Registers' block and a 'FIFO' block. The 'Data path' section is a large grey box containing several sub-components: 'Status flag', 'Data timer', and 'Control logic' at the top, which connect to 'To control unit'. Below these are 'Odd receive shift register', 'Even receive shift register', 'Odd CRC', and 'Even CRC' for receiving data. At the bottom are 'Odd transmit shift register', 'Even transmit shift register', 'Odd CRC', 'Even CRC', and a 'Mux' for transmitting data. External connections include 'SDMMC_D[7:0]' (in/out), 'sdmmc_rx_ck' (in), and 'SDMMC_CK' (in/out). The diagram is labeled 'MSV40162V2' in the bottom right corner.

The card data bus width can be programmed in the clock control register bits WIDBUS. The supported data bus width modes are:

Next to the data bus width the data sampling mode can be programmed in the clock control register bit DDR. The supported data sampling modes are:

Note: The data sampling mode only applies to the SDMMC_D[7:0] lines. (not applicable to the SDMMC_CMD line.)

In DDR mode, data is sampled on both edges of the SDMMC_CK according the following rules, see also Figure 579 and Figure 580 :

In DDR mode the SDMMC_CK clock division must be \( \geq 2 \) .

Figure 579. DDR mode data packet clocking

Figure 579: DDR mode data packet clocking diagram. It shows four data lines (SDMMC_D3, SDMMC_D2, SDMMC_D1, SDMMC_D0) and a clock line (SDMMC_CK). The clock line has a series of rising and falling edges. Data is transferred in bytes, with odd bytes (Byte 1, Byte 3, Byte n-1) sampled on rising edges and even bytes (Byte 2, Byte 4, Byte n) sampled on falling edges. Each byte is split into odd and even bits. CRC bits are shown at the end of the data block. A legend indicates: Data odd (pink), Data even (light blue), CRC odd (yellow), CRC even (green). The diagram is labeled MSV40163V2.
Figure 579: DDR mode data packet clocking diagram. It shows four data lines (SDMMC_D3, SDMMC_D2, SDMMC_D1, SDMMC_D0) and a clock line (SDMMC_CK). The clock line has a series of rising and falling edges. Data is transferred in bytes, with odd bytes (Byte 1, Byte 3, Byte n-1) sampled on rising edges and even bytes (Byte 2, Byte 4, Byte n) sampled on falling edges. Each byte is split into odd and even bits. CRC bits are shown at the end of the data block. A legend indicates: Data odd (pink), Data even (light blue), CRC odd (yellow), CRC even (green). The diagram is labeled MSV40163V2.

Figure 580. DDR mode CRC status / boot acknowledgment clocking

Figure 580: DDR mode CRC status / boot acknowledgment clocking diagram. It shows the SDMMC_CK clock line and the SDMMC_D0 data line. The SDMMC_D0 line has a '0 start' and a '1 end' state. A 'CRC status / boot ack' signal is shown on the SDMMC_D0 line, which is sampled on the rising edges of the SDMMC_CK clock. The diagram is labeled MSV40164V1.
Figure 580: DDR mode CRC status / boot acknowledgment clocking diagram. It shows the SDMMC_CK clock line and the SDMMC_D0 data line. The SDMMC_D0 line has a '0 start' and a '1 end' state. A 'CRC status / boot ack' signal is shown on the SDMMC_D0 line, which is sampled on the rising edges of the SDMMC_CK clock. The diagram is labeled MSV40164V1.

Data path state machine (DPSM)

Depending on the transfer direction (send or receive), the data path state machine (DPSM) moves to the Wait_S or Wait_R state when it is enabled:

For boot operation with acknowledgment the DPSM moves to the Wait_Ack state and waits for the boot acknowledgment before moving to the Wait_R state.

The DPSM operates at SDMMC_CK. The DPSM has the following states, as shown in Figure 581. When ever the DPSM is active, i.e. not in the Idle state, the DPSMACT bit is set.

Figure 581. Data path state machine (DPSM)

Figure 581. Data path state machine (DPSM) state transition diagram. The diagram shows five states: Idle, Busy, Wait_S, Send, Wait_R, Wait_Ack, and R_W. Transitions are triggered by various conditions including CPSM signals, data count, and FIFO status.
stateDiagram-v2
    [*] --> Idle
    Idle --> Busy: Busy
    Busy --> Idle: Not busy & (CRC status FAIL or CPSM Abort)
    Busy --> Wait_S: (CRC status OK Or No CRC) & Not busy
    Wait_S --> Idle: (CPSM DataEnable or write DTEN=1) & DTDIR=0 & Not busy
    Wait_S --> Send: TXFIFOE= not 0 & DTHOLD=0
    Send --> Idle: End of packet or End of data (DATACOUNT=0) or CPSM Abort
    Send --> Wait_S: End of packet or End of data (DATACOUNT=0) or CPSM Abort
    Idle --> Wait_S: (CPSM DataEnable or write DTEN=1) & DTDIR=0 & Not busy
    Idle --> Wait_R: (CPSM DataEnable or write DTEN=1) & DTDIR=1 & BOOTACKEN=0
    Idle --> Wait_Ack: (CPSM DataEnable & DTDIR=1 & BOOTACKEN=1)
    Idle --> R_W: CPSM Abort & FIFO empty
    Wait_S --> Idle: End of data DATACOUNT=0 or DTHOLD=1 or CPSM Abort & FIFO empty
    Wait_S --> Send: TXFIFOE= not 0 & DTHOLD=0
    Wait_S --> Wait_R: DATACOUNT=0 or CPSM Abort or DTHOLD=1 & FIFO empty
    Wait_R --> Idle: DATACOUNT=0 or CPSM Abort or DTHOLD=1 & FIFO empty
    Wait_R --> Send: DATACOUNT not 0 & Start bit detected
    Wait_R --> Wait_Ack: (End of packet) or End of data (DATACOUNT=0) & RWSTART=0
    Wait_R --> R_W: End of packet & DATACOUNT = not 0 & RWSTART=1
    Wait_Ack --> Idle: CPSM Abort
    Wait_Ack --> Wait_R: Ack status OK
    Wait_Ack --> R_W: CPSM Abort & FIFO empty
  
Figure 581. Data path state machine (DPSM) state transition diagram. The diagram shows five states: Idle, Busy, Wait_S, Send, Wait_R, Wait_Ack, and R_W. Transitions are triggered by various conditions including CPSM signals, data count, and FIFO status.

When not busy, the DPSM activates the SDMMC_CK clock (when stopped due to power save PWRSV bit), loads the data counter with a new (DATALENGTH) value and:

When busy the DPSM keeps the SDMMC_CK clock active and move to the Busy state.

Note: DTEN must not be used to start data transfer with SD, SDIO and e•MMC cards.

Note: The DPSM remains in the Wait_S state for at least two clock periods to meet the \( N_{WR} \) timing requirements, where \( N_{WR} \) is the number of clock cycles between the reception of the card response and the start of the data transfer from the host.

with DATACOUNT=0, the transfer is completed normally, there is no DABORT flag.

The data timer (DATATIME) is enabled when the DPSM is in the Wait_R or Busy state 2 cycles after the data block end bit, or data read command end bit, or R1b response, and generates the data timeout error (DTIMEOUT):

When DATATIME = 0,

Data can be transferred from the card to the host (transmit, send) or vice versa (receive). Data are transferred via the SDMMC_Dn data lines, they are stored in a FIFO.

Table 399. Data token format

DescriptionStart bitData (1)CRC16End bitDTMODE
Block data0(DBLOCKSIZE, DATALENGTH)yes100
SDIO multibyte0(DATALENGTH)yes101
e•MMC stream0(DATALENGTH)no110
  1. 1. The total amount of data to transfer is given by DATALENGTH. Where for Block data the amount of data in each block is given by DBLOCKSIZE.

The data token format is selected with register bits DTMODE according.

The data path implements the status flags and associated clear bits shown in Table 400 :

Table 400. Data path status flags and clear bits

FlagDescription
DATAENDTXSet at the end of the complete data transfer when the CRC is OK and busy has finished and both DTHOLD = 0 and DATACOUNT = 0. (DPSM moves from Wait_S to Idle)
RXSet at the end of the complete data transfer when the CRC is OK and all data has been read, (DATACOUNT = 0 and FIFO is empty). (DPSM moves from Wait_R to Idle)
Boot

Table 400. Data path status flags and clear bits (continued)

FlagDescription
DCRCFAILTXSet at the end of the CRC when FAIL and busy has finished. (DPSM stay in Busy when there is still data to send and wait for CPSM Abort) (DPSM moves from Busy to Idle when all data has been sent) or DPSM has been started with DTEN
RXSet at the end of the CRC when FAIL and FIFO is empty. (DPSM stays in Receive when there is still data to be received and wait for CPSM Abort) (DPSM moves from Receive to Idle when all data has been received or DPSM has been started with DTEN)
Boot
ACKFAILBootSet at the end of the boot acknowledgment when fail. (DPSM stays in Wait_Ack and wait for CPSM Abort)
DTIMEOUTCMD R1bSet after the command response no end of busy received before the timeout. (DPSM stays in Busy and wait for CPSM Abort)
TXSet when no CRC token start bit received within Ncrc, or no end of busy received before the timeout. (DPSM stays in Busy and wait for CPSM Abort) (When DPSM has been started with DTEN move to Idle)
Note: The DCRCFAIL flag may also be set when CRC failed before the busy timeout.
RXSet when no start bit received before the timeout. (DPSM stays in Wait_R and wait for CPSM Abort) (When DPSM has been started with DTEN move to Idle)
Boot
ACKTIMEOUTBootSet when no start bit received before the timeout. (DPSM stays in Wait_Ack and wait for CPSM Abort)
DBCKENDTXWhen DTHOLD = 1 and IDMAEN = 0: Set at the end of data block transfer when the CRC is OK and busy has finished, when data transfer is not complete (DATACOUNT >0). (DPSM moves from Busy to Wait_S)
RXWhen RWSTART = 1: Set at the end of data block transfer when the CRC is OK, when data transfer is not complete (DATACOUNT > 0). (DPSM moves from Receive to R_W)
Boot
DHOLDTXWhen DTHOLD = 1: Set at the end of data block transfer when the CRC is OK and busy has finished. (DPSM moves from Wait_S to Idle)
RXWhen DTHOLD = 1: Set at the end of data block transfer when the CRC is OK and all data has been read (FIFO is empty), when data transfer is not complete (DATACOUNT >0). (DPSM moves from Wait_R to Idle)
DABORTCMD R1bWhen CPSM Abort event has been sent by the CPSM and busy has finished. (DPSM moves from Busy to Idle)
TX
RXWhen CPSM Abort event has been sent by the CPSM before the 2 last bits of the transfer. (DPSM moves from any state to Idle)
Boot
BUSYD0ENDCMD R1bSet after the command response when end of busy before the timeout. (DPSM moves from Busy to Idle)
DPSMACTData transfer in progress. (DPSM not in Idle state)

The data path error handling is shown in Table 401 :

Table 401. Data path error handling

ErrorDPSM stateCauseCard actionHost actionDPSM action
TimeoutWait_AckNo Ack in timeunknownCard cycle powerStay in Wait_Ack
(reset the SDMMC with the RCC.SDMMCxRST register bit)
Wait_RNo start bit in timeunknownStop data reception
Send stop transmission command
unknownStop boot procedure
BusyBusy too long (due to data transfer)unknownStop data reception
Send stop transmission command
On CPSM Abort move to Idle
Busy too long (due to R1b)unknownSend reset command
CRCReceivetransmission errorSend further dataStop data reception
Send stop transmission command
On CPSM Abort move to Idle
CRC statusBusyNegative statusIgnore further dataStop data transmission
Send stop transmission command
On CPSM Abort move to Idle
transmission errorwait for further data
Ack statusWait_Acktransmission errorSend boot dataStop boot procedureOn CPSM Abort move to Idle
OverrunReceiveFIFO fullSend further dataStop data reception
Send stop transmission command
On CPSM Abort move to Idle
UnderrunSendFIFO emptyReceive further dataStop data transmission
Send stop transmission command
On CPSM Abort move to Idle

Data FIFO

The data FIFO (first-in-first-out) subunit contains the transmit and receive data buffer. A single FIFO is used for either transmit or receive as selected by the DTDIR bit. The FIFO contain a 32-bit wide, 16-word deep data buffer and control logic. Because the data FIFO operates in the AHB clock domain (sdmmc_hclk), all signals from the subunits in the SDMMC clock domain (SDMMC_CK/sdmmc_rx_ck) are resynchronized.

The FIFO can be in one of the following states:

The end of a correctly completed SDMMC data transfer from the FIFO is indicated by the DATAEND flags driven by the data path subunit. Any incorrect (aborted) SDMMC data transfer from the FIFO is indicated by one of the error flags (DCRCFAIL, DTOUT, DABORT) driven by the data path subunit, or one of the FIFO error flags (TXUNDERR, RXOVERR) driven by the FIFO control.

The data FIFO can be accessed in the following ways, see Table 402 .

Table 402. Data FIFO access

Data FIFO accessIDMAEN
From firmware via AHB slave interface0
From IDMA via AHB master interface1

Transmit FIFO:

Data can be written to the transmit FIFO when the DPSM has been activated (DPSMACT = 1).

When IDMAEN = 1 the FIFO is fully handled by the IDMA.

When IDMAEN = 0 the FIFO is controlled by firmware via the AHB slave interface. The transmit FIFO is accessible via sequential addresses. The transmit FIFO contains a data output register that holds the data word pointed to by the read pointer. When the data path subunit has loaded its shift register, it increments the read pointer and drives new data out. The transmit FIFO is handled in the following way:

  1. 1. Write the data length into DATALENGTH and the block length in DBLOCKSIZE.
    • – For block data transfer (DTMODE = 0), DATALENGTH must be an integer multiple of DBLOCKSIZE.
  2. 2. Set the SDMMC in transmit mode (DTDIR = 0).
    • – Configures the FIFO in transmit mode.
  3. 3. Enable the data transfer
    • – either by sending a command from the CPSM with the CMDTRANS bit set
    • – or by setting DTEN bit
  4. 4. When (DPSMACT = 1) write data to the FIFO.
    • – The DPSM stays in the Wait_S state until FIFO is full (TXFIFOF = 1), or the number indicated by DATALENGTH.

In case of a data transfer error or transfer hold when IDMAEN = 0, firmware must stop writing to the FIFO and flush and reset the FIFO with the FIFOIRST register bit.

The transmit FIFO status flags are listed in Table 403 .

Table 403. Transmit FIFO status flags

FlagDescription
TXFIFOFSet to high when all transmit FIFO words contain valid data.
TXFIFOESet to high when the transmit FIFO does not contain valid data.
TXFIFOHESet to high when half or more transmit FIFO words are empty.
TXUNDERRSet to high when an underrun error occurs. This flag is cleared by writing to the SDMMC Clear register.

Receive FIFO:

Data can be read from the receive FIFO when the DPSM is activated (DPSMACT = 1).

When IDMAEN = 1 the FIFO is fully handled by the IDMA.

When IDMAEN = 0 the FIFO is controlled by firmware via the AHB slave interface. When the data path subunit receives a word of data, it drives the data on the write databus. The write pointer is incremented after the write operation completes. On the read side, the contents of the FIFO word pointed to by the current value of the read pointer is driven onto the read databus. The receive FIFO is accessible via sequential addresses.

The receive FIFO is handled in the following way:

  1. 1. Write the data length into DATALENGTH and the block length in DBLOCKSIZE.
    • – For block data transfer (DTMODE = 0), DATALENGTH must be an integer multiple of DBLOCKSIZE.
  2. 2. Set the SDMMC in receive mode (DTDIR = 1).
    • – Configures the FIFO in receive mode.
  3. 3. Enable the DPSM transfer
    • – either by sending a command from the CPSM with the CMDTRANS bit set
    • – or by setting DTEN bit.
  4. 4. When (DPSMACT = 1) the FIFO is ready to receive data.
    • – The DPSM writes the received data to the FIFO.
      • - The SDMMC keeps receiving data as long as FIFO is not full, hardware flow control during the data transfer is used to prevent FIFO overrun.
  5. 5. Read data from the FIFO.
    • – When the FIFO is handled by software, wait until the FIFO is half full (RXFIFOHF flag), read data from the FIFO until FIFO is empty (RXFIFOE = 1).
      • - When last data has been received end of data (DATAEND flag), read data from the FIFO until FIFO is empty (RXFIFOE = 1).
    • – When the FIFO is handled by the IDMA, the IDMA transfers the FIFO date.
  6. 6. SDMMC has completely received all data and the DPSM is disabled (DPSMACT = 0).

In case of a data transfer hold when IDMAEN = 0, the firmware must read the remaining data until the FIFO is empty and reset the FIFO with the FIFORST register bit. This causes the DPSM to go to the Idle state (DPSMACT = 0).

In case of a data transfer error when IDMAEN = 0, the firmware must stop reading the FIFO and flush and reset the FIFO with the FIFORST register bit. This causes the DPSM to go to the Idle state (DPSMACT = 0).

The receive FIFO status flags are listed in Table 404 .

Table 404. Receive FIFO status flags

FlagDescription
RXFIFOFSet to high when all receive FIFO words contain valid data
RXFIFOESet to high when the receive FIFO does not contain valid data.
RXFIFOHFSet to high when half or more receive FIFO words contain valid data.
RXOVERRSet to high when an overrun error occurs. This flag is cleared by writing to the SDMMC Clear register.

CLKMUX unit

The CLKMUX selects the source for clock sdmmc_rx_ck to be used with the received data and command response. The receive data clock source can be selected by the clock control register bit SELCLKRX, between:

The sdmmc_io_in_ck is selected when there is no external driver, with DS and HS.

The SDMMC_CKIN is selected when there is an external driver with SDR12, SDR25, SDR50 and DDR50.

Figure 582. CLKMUX unit

Figure 582. CLKMUX unit diagram. The diagram shows a 'Registers' block connected to a 'CLKMUX' block. Inside the 'CLKMUX' block is a 'MUX' block. The 'MUX' block has two inputs: 'sdmmc_io_in_ck' and 'SDMMC_CKIN'. The output of the 'MUX' block is labeled 'SDMMC internal receive clock'. The diagram is labeled 'MSv41697V2' in the bottom right corner.
Figure 582. CLKMUX unit diagram. The diagram shows a 'Registers' block connected to a 'CLKMUX' block. Inside the 'CLKMUX' block is a 'MUX' block. The 'MUX' block has two inputs: 'sdmmc_io_in_ck' and 'SDMMC_CKIN'. The output of the 'MUX' block is labeled 'SDMMC internal receive clock'. The diagram is labeled 'MSv41697V2' in the bottom right corner.

The sdmmc_rx_ck source must be changed when the CPSM and DPSM are in the Idle state.

54.5.5 SDMMC AHB slave interface

The AHB slave interface generates the interrupt requests, and accesses the SDMMC adapter registers and the data FIFO. It consists of a data path, register decoder, and interrupt logic.

SDMMC FIFO

The FIFO access is restricted to word access only:

When accessing the FIFO with half word or byte accesses an AHB bus fault is generated.

SDMMC interrupts

The interrupt logic generates an interrupt request signal that is asserted when at least one of the unmasked status flags is active. A mask register is provided to allow selection of the conditions that generate an interrupt. A status flag generates the interrupt request if a corresponding mask flag is set. Some status flags require an implicit clear in the clear register.

54.5.6 SDMMC AHB master interface

The AHB master interface is used to transfer the data between a memory and the FIFO using the SDMMC IDMA.

SDMMC IDMA

Direct memory access (DMA) is used to provide high-speed transfer between the SDMMC FIFO and the memory. The AHB master optimizes the bandwidth of the system bus. The SDMMC internal DMA (IDMA) provides one channel to be used either for transmit or receive.

The IDMA is enabled by the IDMAEN bit and supports burst transfers of 8 beats.

In addition the IDMA provides the following channel configurations selected by bit IDMABMODE:

Single buffered channel

In single buffer configuration the data at the memory side is accessed in a linear matter starting from the base address IDMABASE0. When the IDMA has finished transferring all data the and the DPSM has completed the transfer the DATAEND flag is set.

Double buffered channel

In double buffer configuration the data at the memory side is subsequently accessed from 2 buffers, one located from base address IDMABASE0 and a second located from base address IDMABASE1. This allows firmware to process one memory buffer while the IDMA is accessing the other memory buffer. The size of the memory buffers is defined by IDMABSIZE. The buffer size must be an integer multiple of the burst size. It is possible to update the base address of the buffers on-the-fly when the channel is enabled, the following rule apply:

When the IDMA has finished transferring the data of one buffer the buffer transfer complete flag (IDMABTC) is set and the IDMABACT bit toggles where after the IDMA continues

transferring data from the other buffer. When the IDMA has finished transferring all data and the DPSM has completed the transfer the DATAEND flag is set.

The IDMABASEn address must be word aligned.

IDMA transfer error management

An IDMA transfer error can occur:

On a IDMA transfer error subsequent IDMA transfers are disabled and an IDMATE flag is set. Depending when the IDMA transfer error occurs, it normally causes the generation of a TXUNDERR or RXOVERR error.

The behavior of the IDMATE flag depend on when the IDMA transfer error occurs during the SDMMC transfer:

The IDMATE is generated on an other SDMMC transfer interrupt (TXUNDERR, RXOVERR, DCRCFAIL, DTIMEOUT, DABORT, DHOLD, or DATAEND).

54.5.7 AHB and SDMMC_CK clock relation

The AHB must at least have 3x more bandwidth than the SDMMC bus bandwidth i.e. for SDR50 4-bit mode (50 Mbyte/s) the minimum sdmmc_hclk frequency is 37.5 MHz (150 Mbyte/s).

Table 405. AHB and SDMMC_CK clock frequency relation

SDMMC bus modeSDMMC bus widthMaximum SDMMC_CK [MHz]Minimum AHB clock [MHz]
e•MMC DS82619.5
e•MMC HS85239
e•MMC DDR5285278
SD DS / SDR124259.4
SD HS / SDR2545018.8
SD DDR5045037.5
SD SDR50410037.5

54.6 Card functional description

54.6.1 SD I/O mode

The following features are SDMMC specific operations:

Table 406. SDIO special operation control

Operation modeSDIOENRWMODRWSTOPRWSTARTDTDIR
Interrupt detection1XXXX
Suspend/Resume operationXXXXX
Read Wait SDMMC_CK clock stop (START)X1011
Read Wait SDMMC_CK clock stop (STOP)X1111
Read Wait SDMMC_D2 signaling (START)X0011
Read Wait SDMMC_D2 signaling (STOP)X0111

SD I/O interrupts

To allow the SD I/O card to interrupt the host, an interrupt function is available on pin 8 (shared with SDMMC_D1 in 4-bit mode) on the SD interface. The use of the interrupt is optional for each card or function within a card. The SD I/O interrupt is level-sensitive, which means that the interrupt line must be held active (low) until it is either recognized and acted upon by the host or deasserted due to the end of the interrupt period. After the host has serviced the interrupt, the interrupt status bit is cleared via an I/O write to the appropriate bit in the SD I/O card internal registers. The interrupt output of all SD I/O cards is active low and the application must provide external pull-up resistors on all data lines (SDMMC_D[3:0]).

In SD 1-bit mode pin 8 is dedicated to the interrupt function (IRQ), and there are no timing constraints on interrupts.

In SD 4-bit mode the host samples the level of pin 8 (SDMMC_D1/IRQ) into the interrupt detector only during the interrupt period. At all other times, the host interrupt ignores this value. The interrupt period begins when interrupts are enabled at the card and SDIOEN bit is set see register settings in Table 406 .

In 4-bit mode the card can generate a synchronous or asynchronous interrupt as indicated by the card CCCR register SAI and EAI bits.

Figure 583. Asynchronous interrupt generation

Timing diagram for Figure 583: Asynchronous interrupt generation.

The diagram illustrates the timing for asynchronous interrupt generation. It shows the following signals:

Timing diagram for Figure 583: Asynchronous interrupt generation.

The timing of the interrupt period is depended on the bus speed mode:

In DS, HS, SDR12, and SDR25 mode, selected by register bit BUSSPEED, the interrupt period is synchronous to the SD clock.

Note: DTEN must not be used to start data transfer with SD and e•MMC cards.

Figure 584. Synchronous interrupt period data read

Timing diagram for Figure 584: Synchronous interrupt period data read.

The diagram illustrates the timing for synchronous interrupt period data read. It shows the following signals:

Timing diagram for Figure 584: Synchronous interrupt period data read.

Figure 585. Synchronous interrupt period data write

Timing diagram for synchronous interrupt period data write. The diagram shows the relationship between SDMMC_CLK, SDMMC_CMD, SDMMC_D0, SDMMC_D1, SDMMC_D2, SDMMC_D3, and the Interrupt period. SDMMC_CLK is a continuous square wave. SDMMC_CMD shows a 'Command data W' (Start S, End E) followed by an 'RSP' (Start S, End E). SDMMC_D0, SDMMC_D1, SDMMC_D2, and SDMMC_D3 show 'Data' (Start S, End E) and 'CRC status' (Start S, End E) blocks. The Interrupt period shows 'IRQ' (Start S, End E) and 'Data1' (Start S, End E) blocks. The first 'IRQ' starts 2 CK cycles after the end of the 'Command data W'. The second 'IRQ' starts 2 CK cycles after the end of the 'CRC status'. The 'Data1' blocks are shown between the 'IRQ' blocks. The diagram is labeled MSV40196V2.
Timing diagram for synchronous interrupt period data write. The diagram shows the relationship between SDMMC_CLK, SDMMC_CMD, SDMMC_D0, SDMMC_D1, SDMMC_D2, SDMMC_D3, and the Interrupt period. SDMMC_CLK is a continuous square wave. SDMMC_CMD shows a 'Command data W' (Start S, End E) followed by an 'RSP' (Start S, End E). SDMMC_D0, SDMMC_D1, SDMMC_D2, and SDMMC_D3 show 'Data' (Start S, End E) and 'CRC status' (Start S, End E) blocks. The Interrupt period shows 'IRQ' (Start S, End E) and 'Data1' (Start S, End E) blocks. The first 'IRQ' starts 2 CK cycles after the end of the 'Command data W'. The second 'IRQ' starts 2 CK cycles after the end of the 'CRC status'. The 'Data1' blocks are shown between the 'IRQ' blocks. The diagram is labeled MSV40196V2.

In SDR50 and DDR50, selected by register bit BUSSPEED, due to propagation delay from the card to host, the interrupt period is asynchronous.

Note: DTEN must not be used to start data transfer with SD and e•MMC cards.

Figure 586. Asynchronous interrupt period data read

Timing diagram for asynchronous interrupt period data read. It shows the relationship between SDMMC_CLK, sdmmc_fb_ck, SDMMC_CMD, SDMMC_D0, SDMMC_D1, SDMMC_D2/SDMMC_D3, and the Interrupt period. The diagram illustrates the setup and hold times (t_op) for the interrupt signal relative to the clock edges.

Figure 586 shows the timing diagram for an asynchronous interrupt period during a data read operation. The signals shown are SDMMC_CLK, sdmmc_fb_ck, SDMMC_CMD, SDMMC_D0, SDMMC_D1, SDMMC_D2/SDMMC_D3, and the Interrupt period. The SDMMC_CMD signal shows a Command data R block. The SDMMC_D0, SDMMC_D1, and SDMMC_D2/SDMMC_D3 signals show Data blocks. The Interrupt period signal shows an IRQ signal. The setup time (t op ) is indicated as 0 CK - 2 CK, and the hold time is indicated as 2 CK. The diagram is labeled MSV40940V3.

Timing diagram for asynchronous interrupt period data read. It shows the relationship between SDMMC_CLK, sdmmc_fb_ck, SDMMC_CMD, SDMMC_D0, SDMMC_D1, SDMMC_D2/SDMMC_D3, and the Interrupt period. The diagram illustrates the setup and hold times (t_op) for the interrupt signal relative to the clock edges.

Figure 587. Asynchronous interrupt period data write

Timing diagram for asynchronous interrupt period data write. It shows the relationship between SDMMC_CLK, sdmmc_fb_ck, SDMMC_CMD, SDMMC_D0, SDMMC_D1, SDMMC_D2/SDMMC_D3, and the Interrupt period. The diagram illustrates the setup and hold times (t_op) for the interrupt signal relative to the clock edges.

Figure 587 shows the timing diagram for an asynchronous interrupt period during a data write operation. The signals shown are SDMMC_CLK, sdmmc_fb_ck, SDMMC_CMD, SDMMC_D0, SDMMC_D1, SDMMC_D2/SDMMC_D3, and the Interrupt period. The SDMMC_CMD signal shows a Command data W block and an RSP block. The SDMMC_D0, SDMMC_D1, and SDMMC_D2/SDMMC_D3 signals show Data blocks. The SDMMC_D0 signal also shows a CRC status block. The Interrupt period signal shows an IRQ signal. The setup time (t op ) is indicated as 0 CK - 2 CK, and the hold time is indicated as 2 CK - 4 CK. The diagram is labeled MSV40192V2.

Timing diagram for asynchronous interrupt period data write. It shows the relationship between SDMMC_CLK, sdmmc_fb_ck, SDMMC_CMD, SDMMC_D0, SDMMC_D1, SDMMC_D2/SDMMC_D3, and the Interrupt period. The diagram illustrates the setup and hold times (t_op) for the interrupt signal relative to the clock edges.

When transferring Open-ended multiple block data and using DTMODE “block data transfer ending with STOP_TRANSMISSION command”, the SDMMC masks the interrupt period after the last data block until the end of the CMD12 STOP_TRANSMISSION command.

The interrupt period is applicable for both memory and I/O operations.

In 4-bit mode interrupts can be differentiated from other signaling according Table 407 .

Table 407. 4-bit mode Start, interrupt, and CRC-status Signaling detection

SDMMC data lineStartInterruptCRC-status
SDMMC_D001 or CRC-status0
SDMMC_D100X
SDMMC_D201 or Read WaitX
SDMMC_D301X

SD I/O suspend and resume

This function is NOT supported in SDIO version 4.00 or later.

Within a multifunction SD I/O or a card with both I/O and memory functions, there are multiple devices (I/O and memory) that share access to the e•MMC/SD bus. To share access to the host among multiple devices, SD I/O and combo cards optionally implement the concept of suspend/resume. When a card supports suspend/resume, the host can temporarily halt (suspend) a data transfer operation to one function or memory to free the bus for a higher-priority transfer to a different function or memory. After this higher-priority transfer is complete, the original transfer is restarted (resume) where it left off.

To perform the suspend/resume operation on the bus, the host performs the following steps:

  1. 1. Determines the function currently using the SDMMC_D[3:0] line(s)
  2. 2. Requests the lower-priority or slower transaction to suspend
  3. 3. Waits for the transaction suspension to complete
  4. 4. Begins the higher-priority transaction
  5. 5. Waits for the completion of the higher priority transaction
  6. 6. Restores the suspended transaction

The card receiving a suspend command responds with its current bus status. Only when the bus has been suspended by the card the bus status indicates suspension completed.

There are different suspend cases conditions:

For the host to know if the bus has been released it must check the status of the suspend request, suspension completed.

When the bus status of the suspend request response indicates suspension completed, the card has released the bus. At this time the state of the suspended operation must be saved where after an other operation can start.

The suspend command must be sent with the CMDSUSPEND bit set. This allows to start the interrupt period after the suspend command response when the bus is suspended (response bit BS = 0).

The hardware does not save the number of remaining data to be transferred when resuming the suspended operation. It is up to firmware to determine the data that has been transferred and resume with the correct remaining number of data bytes.

While receiving data from the card, the SDMMC can suspend the read operation after the read data block end (DPSM in Wait_R). After receiving the suspend acknowledgment response from the card the following steps must be taken by firmware:

  1. 1. The normal receive process must be stopped by setting DTHOLD bit.
    1. a) The remaining number of data bytes in the FIFO must be read until the receive FIFO is empty (RXFIFOE flag is set), and when IDMAEN = 0 the FIFO must be reset with FIFORST.
  2. 2. The confirmation that all data has been read from the FIFO, and that the suspend is completed is indicated by the DHOLD flag.
    1. a) The remaining number of data bytes (multiple of data blocks) still to be read when resuming the operation must be determined from the remaining number of bytes indicated by the DATACOUNT.

Note: When a DTIMEOUT flag occurs during the suspend procedure, this must be ignored.

To resume receiving data from the card, the following steps must be taken by firmware:

  1. 1. The remaining number of data bytes (multiple of data blocks) must be programmed in DATALENGTH.
  2. 2. The DPSM must be configured to receive data in the DTDIR bit.
  3. 3. The resume command must be sent from the CPSM, with the CMDTRANS bit set and the CMDSUSPEND bit set, which ends the interrupt period when data transfer is resumed (response bit DF = 1) and enabled the DPSM, after which the card resumes sending data.

While sending data to the card, the SDMMC can suspend the write operation after the write data block CRC status end (DPSM in Busy). Before sending the suspend command to the card the following steps must be taken by firmware:

  1. 1. Enable DHOLD flag (and DBCKEND flag when IDMAEN = 0)
  2. 2. The DPSM must be prevented from start sending a new data block by setting DTHOLD.
  3. 3. When IDMAEN = 0: When receiving the DBCKEND flag the data transfer is stopped. Firmware can stop filling the FIFO, after which the FIFO must be reset with FIFORST. Any bytes still in the FIFO need to be rewritten when resuming the operation.
  4. 4. When receiving the DHOLD flag the data transfer is stopped. The remaining number of data bytes still to be written when resuming must be determined from the remaining number of bytes indicated by the DATACOUNT.
  5. 5. To suspend the card the suspend command must be sent by the CPSM with the CMDSUSPEND bit set. This allows to start the interrupt period after the suspend command response when the bus is suspended (response bit BS = 0).

To resume sending data to the card, the following steps must be taken by firmware:

  1. 1. The remaining number of data bytes must be programmed in DATALENGTH.
  2. 2. The DPSM must be configured for transmission with DTDIR set and enabled by having the CPSM send the resume command with the CMDTRANS bit set and the CMDSUSPEND bit set. This ends the interrupt period and start the data transfer. The

DPSM either goes to the Wait_S state when SDMMC_D0 does not signal busy, or goes to the Busy state when busy is signaled.

  1. 3. When IDMAEN = 1: The IDMA needs to be reprogrammed for the remaining bytes to be transferred.
  2. 4. When IDMAEN = 0: Firmware must start filling the FIFO with the remaining data.

SD I/O Read Wait

There are 2 methods to pause the data transfer during the Block gap:

  1. 1. Stopping the SDMMC_CK.
  2. 2. Using Read Wait signaling on SDMMC_D2.

The SDMMC can perform a Read Wait with register settings according Table 406 .

Depending the SDMMC operation mode (DS, HS, SDR12, SDR25) or (SDR50, DDR) each method has a different characteristic.

The timing for pause read operation by stopping the SDMMC_CK for DS, HS, SDR12, and SDR25, the SDMMC_CK may be stopped 2 SDMMC_CK cycles after the end bit. When ready the host resumes by restarting clock, see Figure 588 .

Figure 588. Clock stop with SDMMC_CK for DS, HS, SDR12, SDR25

Timing diagram for Figure 588 showing SDMMC_CK and SDMMC_Dn signals. The SDMMC_CK signal is a square wave that stops for a period. The SDMMC_Dn signal shows 'Read data' followed by an 'Interrupt period' and then 'Read data' again. The clock stop duration is marked as 2 CK cycles. The clock resumes after 1 CK cycle, and the data transfer resumes after 2 CK cycles.

The diagram shows two signal lines: SDMMC_CK (top) and SDMMC_Dn (bottom). The SDMMC_CK signal starts with a square wave, then stops (becomes a flat line) for a duration of 2 CK cycles. The SDMMC_Dn signal shows 'Read data' being transferred, followed by an 'Interrupt period' where the signal is high (H), and then 'Read data' resumes. The clock stop duration is marked as 2 CK cycles. The clock resumes after 1 CK cycle, and the data transfer resumes after 2 CK cycles. The diagram is labeled MSV40193V2.

Timing diagram for Figure 588 showing SDMMC_CK and SDMMC_Dn signals. The SDMMC_CK signal is a square wave that stops for a period. The SDMMC_Dn signal shows 'Read data' followed by an 'Interrupt period' and then 'Read data' again. The clock stop duration is marked as 2 CK cycles. The clock resumes after 1 CK cycle, and the data transfer resumes after 2 CK cycles.

The timing for pause read operation by stopping the SDMMC_CK for SDR50 and DDR50, the SDMMC_CK may be stopped minimum 2 SDMMC_CK cycles and maximum 5 SDMMC_CK cycles, after the end bit. When ready the host resumes by restarting clock, see Figure 589 . (In DDR50 mode the SDMMC_CK must only be stopped after the falling edge, when the clock line is low.)

Figure 589. Clock stop with SDMMC_CK for DDR50, SDR50

Timing diagram for Figure 589 showing SDMMC_CK and SDMMC_Dn signals. The SDMMC_CK signal is a square wave that stops for a period. The SDMMC_Dn signal shows 'Read data' followed by an 'End' bit, then a gap, and then 'Read data' resumes. The clock stop duration is marked as 2 CK min. and 5 CK max. The clock resumes after Nac 8 CK min. The diagram is labeled MSV40194V2.

The diagram shows two signal lines: SDMMC_CK (top) and SDMMC_Dn (bottom). The SDMMC_CK signal starts with a square wave, then stops for a duration of 2 CK min. and 5 CK max. The SDMMC_Dn signal shows 'Read data' being transferred, followed by an 'End' bit, then a gap, and then 'Read data' resumes. The clock stop duration is marked as 2 CK min. and 5 CK max. The clock resumes after Nac 8 CK min. The diagram is labeled MSV40194V2.

Timing diagram for Figure 589 showing SDMMC_CK and SDMMC_Dn signals. The SDMMC_CK signal is a square wave that stops for a period. The SDMMC_Dn signal shows 'Read data' followed by an 'End' bit, then a gap, and then 'Read data' resumes. The clock stop duration is marked as 2 CK min. and 5 CK max. The clock resumes after Nac 8 CK min. The diagram is labeled MSV40194V2.

In Read Wait SDMMC_CK clock stopping, when RWSTART is set, the DSPM stops the clock after the end bit of the current received data block CRC. The clock start again after writing 1 to the RWSTOP bit, where after the DPSM waits for a start bit from the card.

As SDMMC_CK is stopped, no command can be issued to the card. During a Read Wait interval, the SDMMC can still detect SDIO interrupts on SDMMC_D1.

The optional Read Wait signaling on SDMMC_D2 (RW) operation is defined only for the SD 1-bit and 4-bit modes. The Read Wait operation allows the host to signal a card that is reading multiple registers (IO_RW_EXTENDED, CMD53) to temporarily stall the data transfer while allowing the host to send commands to any function within the SD I/O device. To determine when a card supports the Read Wait protocol, the host must test capability bits in the internal card registers.

The timing for Read Wait with a SDMMC_CK less than 50MHz (DS, HS, SDR12, SDR25) is based on the interrupt period generated by the card on SDMMC_D1. The host by asserting SDMMC_D2 low during the interrupt period requests the card to enter Read Wait. To exit Read Wait the host must raise SDMMC_D2 high during one SDMMC_CK cycles before making it Hi-Z, see Figure 590 .

Figure 590. Read Wait with SDMMC_CK < 50 MHz

Timing diagram for Read Wait with SDMMC_CK < 50 MHz. The diagram shows five signal lines over time: SDMMC_CK (clock), SDMMC_D1 (data), SDMMC_D2 (Read Wait signal), SDMMC_D3/SDMMC_D0 (data), and SDMMC_CMD (command). The clock (CK) is shown as a series of pulses. Data on D1 and D3/D0 is shown as 'Read data' blocks. The Read Wait signal (D2) is shown as a low pulse during the 'Int period' on D1. The command (CMD) is shown as a pulse on the CMD line. Timing markers indicate '2 CK' cycles for various intervals.

The diagram illustrates the timing for Read Wait with SDMMC_CK < 50 MHz. It shows five signal lines over time: SDMMC_CK (clock), SDMMC_D1 (data), SDMMC_D2 (Read Wait signal), SDMMC_D3/SDMMC_D0 (data), and SDMMC_CMD (command). The clock (CK) is shown as a series of pulses. Data on D1 and D3/D0 is shown as 'Read data' blocks. The Read Wait signal (D2) is shown as a low pulse during the 'Int period' on D1. The command (CMD) is shown as a pulse on the CMD line. Timing markers indicate '2 CK' cycles for various intervals. The diagram is labeled MSv40941V2.

Timing diagram for Read Wait with SDMMC_CK < 50 MHz. The diagram shows five signal lines over time: SDMMC_CK (clock), SDMMC_D1 (data), SDMMC_D2 (Read Wait signal), SDMMC_D3/SDMMC_D0 (data), and SDMMC_CMD (command). The clock (CK) is shown as a series of pulses. Data on D1 and D3/D0 is shown as 'Read data' blocks. The Read Wait signal (D2) is shown as a low pulse during the 'Int period' on D1. The command (CMD) is shown as a pulse on the CMD line. Timing markers indicate '2 CK' cycles for various intervals.

For SDR50 with a SDMMC_CK more than 50MHz, and DDR50, the card treats the Read Wait request on SDMMC_D2 as an asynchronous event. The host by asserting SDMMC_D2 low after minimum 2 SDMMC_CK cycles and maximum 5 SDMMC_CK cycles, request the card to enter Read Wait. To exit Read Wait the host must raise SDMMC_D2 high during one SDMMC_CK cycles before making it Hi-Z. The host must raise SDMMC_D2 on the SDMMC_CK clock (see Figure 591 ).

Figure 591. Read Wait with SDMMC_CK\( \geq 50 \) MHz Timing diagram for Read Wait with SDMMC_CK ≥ 50 MHz. The diagram shows three signal lines: SDMMC_CK (clock), SDMMC_D2 (data), and SDMMC_D3/SDMMC_D1/SDMMC_D0 (data). The clock signal is a periodic square wave. The data signals show a 'Read data' block followed by a 'Read Wait' state on SDMMC_D2 and SDMMC_D3/SDMMC_D1/SDMMC_D0. The Read Wait state is initiated by a '1 End' bit on SDMMC_D2 and SDMMC_D3/SDMMC_D1/SDMMC_D0. The Read Wait state duration is indicated by a horizontal line labeled 'N_Ac 8 CK min.'. The Read data block is followed by a '0 Start' bit on SDMMC_D2 and SDMMC_D3/SDMMC_D1/SDMMC_D0. The time between the '1 End' bit and the '0 Start' bit is labeled 't_op'. The time between the '0 Start' bit and the next 'Read data' block is labeled '2 CK min.'. The time between the '1 End' bit and the '0 Start' bit is also labeled '5 CK max.'. The diagram is labeled 'MSv40948V2' in the bottom right corner.
Timing diagram for Read Wait with SDMMC_CK ≥ 50 MHz. The diagram shows three signal lines: SDMMC_CK (clock), SDMMC_D2 (data), and SDMMC_D3/SDMMC_D1/SDMMC_D0 (data). The clock signal is a periodic square wave. The data signals show a 'Read data' block followed by a 'Read Wait' state on SDMMC_D2 and SDMMC_D3/SDMMC_D1/SDMMC_D0. The Read Wait state is initiated by a '1 End' bit on SDMMC_D2 and SDMMC_D3/SDMMC_D1/SDMMC_D0. The Read Wait state duration is indicated by a horizontal line labeled 'N_Ac 8 CK min.'. The Read data block is followed by a '0 Start' bit on SDMMC_D2 and SDMMC_D3/SDMMC_D1/SDMMC_D0. The time between the '1 End' bit and the '0 Start' bit is labeled 't_op'. The time between the '0 Start' bit and the next 'Read data' block is labeled '2 CK min.'. The time between the '1 End' bit and the '0 Start' bit is also labeled '5 CK max.'. The diagram is labeled 'MSv40948V2' in the bottom right corner.

In Read Wait SDMMC_D2 signaling, when RWSTART is set, the DPSM drives SDMMC_D2 after the end bit of the current received data block CRC. The Read Wait signaling on SDMMC_D2 is removed when writing 1 to the RWSTOP bit. The DPSM remains in R_W state for two more SDMMC_CK clock cycles to drive SDMMC_D2 to 1 for one clock cycle (in accordance with SDIO specification), where after the DPSM waits for a start bit from the card.

During the Read Wait signaling on SDMMC_D2 commands can be issued to the card. During the Read Wait interval, the SDMMC can detect SDIO interrupts on SDMMC_D1.

54.6.2 CMD12 send timing

CMD12 is used to stop/abort the data transfer, the card data transmission is terminated two clock cycles after the end bit of the Stop Transmission command.

Table 408. CMD12 use cases

Data operationStop Transmission command CMD12 Description
SDMMC stream writeThe data transfer is stopped/aborted by sending the Stop Transmission command.
SDMMC open ended multiple block writeThe data transfer is stopped/aborted by sending the Stop Transmission command.
If the card detects an error, the host must abort the operation by sending the Stop Transmission command.
SDMMC block write with predefined block countThe Stop Transmission command is not required at the end of this type of multiple block write. (sending the Stop Transmission command after the card has received the last block is regarded as an illegal command.)
If the card detects an error, the host must abort the operation by sending the Stop Transmission command.
SDMMC stream readThe data transfer is stopped/aborted by sending the Stop Transmission command.

Table 408. CMD12 use cases (continued)

Data operationStop Transmission command CMD12 Description
SDMMC open ended multiple block readThe data transfer is stopped/aborted by sending the Stop Transmission command.
If the card detects an error, the host must abort the operation by sending the Stop Transmission command.
SDMMC block read with predefined block countThe Stop Transmission command is not required at the end of this type of multiple block read. (sending the Stop Transmission command after the card has transmitted the last block is regarded as an illegal command.)
Transaction can be aborted by sending the Stop Transmission command.
If the card detects an error, the host must abort the operation by sending the Stop Transmission command.

All data write and read commands can be aborted any time by a Stop Transmission command CMD12. The following data abort procedure applies during an ongoing data transfer:

  1. Load CMD12 Stop Transmission command in registers and set the CMDSTOP bit.
    1. This causes the CPSM Abort signal to be generated when the command is sent to the DPSM.
  2. Configure the CPSM to send a command immediately (clear WAITPEND bit).
    1. The card, when sending data, stops data transfer 2 cycles after the Stop Transmission command end bit.
      The card when no data is being sent, does not start sending any new data.
    2. The host, when sending data, sends one last data bit followed by an end bit after the Stop Transmission command end bit.
      The host when not sending data, does not start sending any new data.
  3. When IDMAEN = 0, the FIFO need to be reset with FIFORST.
    1. When writing data to the card. On the CMDREND flag, firmware must stop writing data to the FIFO. Subsequently the FIFO must be reset with FIFORST, this flushes the FIFO.
    2. When reading data from the card. On the CMDREND flag, firmware must read the remaining data from the FIFO. Subsequently the FIFO must be reset with FIFORST.
  4. When IDMAEN = 1, hardware takes care of the FIFO.
    1. When writing data to the card. On the CPSM Abort signal, hardware stops the IDMA and subsequently the FIFO is flushed.
    2. When reading data from the card. On the CPSM Abort signal, hardware instructs the IDMA to transfer the remaining data from the FIFO to RAM.
  5. When the FIFO is empty/reset the DABORT flag is generated.

Stream operation and CMD12

To stop the stream transfer after the last byte to be transferred, the CMD12 end bit timing must be sent aligned with the data stream end of last byte. The following write stream data procedure applies:

  1. 1. Initialize the stream data in the DPSM, DTMODE = MCC stream data transfer.
  2. 2. Send the WRITE_DATA_STREAM command from the CPSM with CMDTRANS = 1.
  3. 3. Preload CMD12 in command registers, with the CMDSTOP bit set.
  4. 4. Configure the CPSM to send a command only after a wait pending (WAITPEND = 1) end of last data (according DATALNGTH).
  5. 5. Enabling the CPSM to send the STOP_TRANSMISSION command, the stream data end bit and command end bit are aligned.
    1. a) When DATALNGTH > 5 bytes, Command CMD12 is waited in the CPSM to be aligned with the data transfer end bit.
    2. b) When DATALNGTH < 5 bytes, Command CMD12 is started before and the DPSM remains in the Wait_S state to align the data transfer end with the CMD12 end bit.
  6. 6. The write stream data can be aborted any time by clearing the WAITPEND bit. This causes the Preloaded CMD12 to be sent immediately and stop the write data stream.

Figure 592. CMD12 stream timing

Timing diagram for CMD12 stream timing. It shows three signals: SDMMC_CK (clock), SDMMC_CMD (command), and SDMMC_D0 (data). The clock is a periodic square wave. The command signal shows a CMD12 command being sent, with an 'E' (end) bit. The data signal shows a 'Stream data last byte' being sent, with an 'E' (end) bit. The time interval between the end of the command and the end of the data is labeled Nst. The diagram is labeled MSV40942V1.
Timing diagram for CMD12 stream timing. It shows three signals: SDMMC_CK (clock), SDMMC_CMD (command), and SDMMC_D0 (data). The clock is a periodic square wave. The command signal shows a CMD12 command being sent, with an 'E' (end) bit. The data signal shows a 'Stream data last byte' being sent, with an 'E' (end) bit. The time interval between the end of the command and the end of the data is labeled Nst. The diagram is labeled MSV40942V1.

To stop the read stream transfer after the last byte, the CMD12 end bit timing must occur after the last data stream byte. The following read stream data procedure applies:

  1. 1. Wait for all data to be received by the DPSM (DATAEND flag).
    1. a) The DPSM does not receive more data than indicated by DATALNGTH, even if the card is sending more data.
  2. 2. Send CMD12 by the CPSM.
    1. a) CMD12 stops the card sending data.

Note: The SDMMC does not receive any more data from the card when DATACOUNT = 0, even when the card continues sending data.

Block operation and CMD12

To stop block transfer at the end of the data, the CMD12 end bit must be sent after the last block end bit.

When writing data to the card the CMD12 end bit must be sent after the write data block CRC token end bit. This requires the CMD12 sending to be tied to the data block transmission timing. To stop an Open-ended Multiple block write, the following procedure applies:

  1. 1. Before starting the data transfer, set DTMODE to “block data transfer ending with STOP_TRANSMISSION command”.
  2. 2. Wait for all data to be sent by the DPSM and the CRC token to be received, (DATAEND flag).
    1. a) The DPSM does not send more data than indicated by DATALENGTH.
  3. 3. Send CMD12 by the CPSM.
    1. a) CMD12 sets the card to Idle mode.

When reading data from the card the CMD12 end bit must be sent earliest at the same time as the card read data block last data bit. This requires the CMD12 sending to be tied to the data block reception timing. The following stop Open-ended Multiple block read data block procedure applies:

  1. 1. Before starting the data transfer, set DTMODE to “block data transfer ending with STOP_TRANSMISSION command”.
  2. 2. Wait for all data to be received by the DPSM (DATAEND flag).
    1. a) The DPSM does not receive more data than indicated by DATALENGTH, even if the card is sending more data.
  3. 3. Send CMD12 with CMDSTOP bit set by the CPSM.
    1. a) CMD12 stops the Card sending more data and set the card to Idle mode. Any ongoing block transfer is aborted by the Card.

Note: The SDMMC does not receive any more data from the card when DATACOUNT = 0, even when the card continues sending data.

54.6.3 Sleep (CMD5)

The e•MMC card may be switched between a Sleep state and a Standby state by CMD5. In the Sleep state the power consumption of the card is minimized and the Vcc power supply may be switched off.

The CMD5 (SLEEP) is used to initiate the state transition from Standby state to Sleep state. The card indicates Busy, pulling down SDMMC_D0, during the transition phase. The Sleep state is reached when the card stops pulling down the SDMMC_D0 line.

To set the card into Sleep state the following procedure applies:

  1. 1. Enable interrupt on BUSYD0END.
  2. 2. Send CMD5 (SLEEP).
  3. 3. On BUSYD0END interrupt, card is in Sleep state
  4. 4. Vcc power supply is allowed to be switched off

The CMD5 (AWAKE) is used to initiate the state transition from Sleep state to Standby state. The card indicates Busy, pulling down SDMMC_D0, during the transition phase. The Standby state is reached when the card stops pulling down the SDMMC_D0 line.

To set the card into Sleep state the following procedure applies:

  1. 1. Switch on Vcc power supply and wait unit minimum operating level is reached.
  2. 2. Enable interrupt on BUSYD0END.
  3. 3. Send CMD5 (AWAKE).
  4. 4. On BUSYD0END interrupt card is in Standby state.

The Vcc power supply is allowed to be switched off only after the Sleep state has been reached. The Vcc supply must be reinstalled before CMD5 (AWAKE) is sent.

Figure 593. CMD5 Sleep Awake procedure

Timing diagram for CMD5 Sleep Awake procedure. The diagram shows four signal lines over time: Vcc (power supply), SDMMC_CMD (command line), SDMMC_D0 (data line), and BUSYD0END (busy signal). The sequence starts in a Standby state where SDMMC_D0 is high. The host sends a CMD5 sleep command and receives a response (RESP). The card then enters a BUSY state on SDMMC_D0. The host monitors BUSYD0END, which goes high when the card is busy. After the BUSY state, the card returns to Standby state. The host then sends a CMD5 awake command and receives a response. The card enters another BUSY state. After this BUSY state, the card returns to Standby state. The Vcc line shows a transition from On to Off and back to On during the procedure. The diagram is labeled MSV40943V1.
Timing diagram for CMD5 Sleep Awake procedure. The diagram shows four signal lines over time: Vcc (power supply), SDMMC_CMD (command line), SDMMC_D0 (data line), and BUSYD0END (busy signal). The sequence starts in a Standby state where SDMMC_D0 is high. The host sends a CMD5 sleep command and receives a response (RESP). The card then enters a BUSY state on SDMMC_D0. The host monitors BUSYD0END, which goes high when the card is busy. After the BUSY state, the card returns to Standby state. The host then sends a CMD5 awake command and receives a response. The card enters another BUSY state. After this BUSY state, the card returns to Standby state. The Vcc line shows a transition from On to Off and back to On during the procedure. The diagram is labeled MSV40943V1.

54.6.4 Interrupt mode (Wait-IRQ)

The host and card enter and exit interrupt mode (Wait-IRQ) simultaneously. In interrupt mode there is no data transfer. The only message allowed is an interrupt service request response from the card or the host. For the interrupt mode to work correctly the SDMMC_CK frequency must be set in accordance with the achievable SDMMC_CMD data rate in Open Drain mode, which depend on the capacitive load and pull-up resistor. The CLKDIV must be set >1, and the SETCLKRX must select either the sdmmc_io_in_ck or SDMMC_CLKin source.

The host must ensure that the card is in Standby state before issuing the CMD40 (GO_IRQ_STATE). While waiting for an interrupt response the SDMMC_CK clock signal must be kept active.

A card in interrupt mode (IRQ state):

The host in interrupt mode (CPSM Wait state waiting for interrupt):

When sending the interrupt service request response, the sender bit-wise monitors the SDMMC_CMD bit stream. The sender whose interrupt service request response bit does not correspond to the bit on the SDMMC_CMD line stops sending. In the case of multiple senders only one successfully sends its full interrupt service request response. If the host sends simultaneously, it loses sending after the transmission bit.

To handle the interrupt mode, the following procedure applies:

  1. 1. Set the SDMMC_CK frequency in accordance with the achievable SDMMC_CMD data rate in Open-drain mode, CLKDIV must be set >1, and SETCLKRX must select the sdmmc_io_in_ck.
  2. 2. Load CMD40 (GO_IRQ_STATE) in the command registers.
  3. 3. Enable wait for interrupt by setting WAITINT register bit.
  4. 4. Configure the CPSM to send a command immediately.
    1. a) This causes the CMD40 to be sent and the CPSM to be halted in the Wait state, waiting for a interrupt service request response.
  5. 5. To exit the wait for interrupt state (CPSM Wait state):
    1. a) Upon the detection of an interrupt service request response start bit the CPSM moves to the Receive state where the response is received. The complete reception of the response is indicated by the CMDREND or the command CRC error flags.
    2. b) To abort the interrupt mode the host clears the WAITINT register bit, which causes the host to send an interrupt service request response by itself. This moves the CPSM to the Receive state. The complete reception of the response is indicated by the CMDREND or the command CRC error flags.

Note: On a simultaneous send interrupt service request response start bit collision the host loses the bus access after the transmission bit.

54.6.5 Boot operation

In boot operation mode the host can read boot data from the card by either one of the 2 boot operation functions:

  1. 1. Normal boot. (keeping CMD line low)
  2. 2. Alternative boot (sending CMD0 with argument 0xFFFFFFFF)

The boot data can be read according the following configuration options, depending on card register settings:

If boot acknowledgment is enabled the card send pattern 010 on SDMMC_D0 within 50ms after boot mode has been requested by either CMD line going low or after CMD0 with argument 0xFFFFFFFF. A boot acknowledgment timeout (ACKTIMEOUT) and acknowledgment status (ACKFAIL) is provided.

Normal boot operation

If the SDMMC_CMD line is held low for at least 74 clock cycles after card power-up or reset, before the first command is issued, the card recognizes that boot mode is being initiated. Within 1 second after the CMD line goes low, the card starts to send the first boot code data on the SDMMC_Dn line(s). The host must keep the SDMMC_CMD line low until after all boot data has been read. The host can terminate boot mode by pulling the SDMMC_CMD line high.

Figure 594. Normal boot mode operation

Timing diagram for normal boot mode operation showing SDMMC_CK, SDMMC_CMD, and SDMMC_Dn signals. The diagram illustrates the sequence of events: SDMMC_CMD goes low, data blocks (010, Block read + CRC) are received on SDMMC_Dn, and SDMMC_CMD goes high again. Timing parameters include 74 cycles for the initial low period, 50 ms max. / 1 s max. for the data reception period, and 56 cycles min. for the CMDSENT flag generation after SDMMC_CMD goes high.

The diagram shows three signal lines over time:

Timing markers:

Timing diagram for normal boot mode operation showing SDMMC_CK, SDMMC_CMD, and SDMMC_Dn signals. The diagram illustrates the sequence of events: SDMMC_CMD goes low, data blocks (010, Block read + CRC) are received on SDMMC_Dn, and SDMMC_CMD goes high again. Timing parameters include 74 cycles for the initial low period, 50 ms max. / 1 s max. for the data reception period, and 56 cycles min. for the CMDSENT flag generation after SDMMC_CMD goes high.

To perform the normal boot procedure the following steps needed:

  1. 1. Reset the card.
  2. 2. if a boot acknowledgment is requested enable the BOOTACKEN and set the ACKTIME and enable the ACKFAIL and ACKTIMEOUT interrupt.
  3. 3. enable the data reception by setting the DPSM in receive mode (DTDIR) and the number of data bytes to be received in DATALNGTH.
  4. 4. Enable the DTIMEOUT, DATAEND, and CMDSENT interrupts for end of boot command confirmation.
  5. 5. Select the normal boot operation mode in BOOTMODE, and enable boot in BOOTEN. The boot procedure is started by enabling the CPSM with CPSMEN. This causes:
    • – the SDMMC_CMD to be driven low. (BOOTMODE = normal boot).
    • – the ACK timeout to start.
    • – DPSM to be enabled.
  6. 6. The incorrect reception of the boot acknowledgment can be detected with ACKFAIL flag or ACKTIMEOUT flag when enabled.
    • – when an incorrect boot acknowledgment is received the ACKFAIL flag occurs.
    • – when the boot acknowledgment is not received in time the ACKTIMEOUT flag occurs.
  7. 7. when all boot data has been received the DATAEND flag occurs.
    • – when data CRC fails the DCRCFAIL flag is also generated.
    • – when the data timeout occurs the DTIMEOUT flag is also generated.
  8. 8. When last data has been received, read data from the FIFO until FIFO is empty (RXFIFOE = 1) after which end of data DATAEND flag is generated.
    • – SDMMC has completely received all data and the DPSM is disabled.
  9. 9. The boot procedure is terminated by firmware clearing BOOTEN, which causes the SDMMC_CMD line to go high. The CMDSENT flag is generated 56 cycles later to indicate that a new command can be sent.
    1. a) If the boot procedure is aborted by firmware before all data has been received the CPSM Abort signal stops data reception and disables the DPSM which triggers an DABORT flag when enabled.
  10. 10. The CMDSENT flag signals the end of the boot procedure and the card is ready to receive a new command.

Alternative boot operation

After card power-up or reset, if the host sends CMD0 with the argument 0xFFFFFFFF after 74 clock cycles before CMD0 is issued, the card recognizes that boot mode is being initiated. Within 1 second after the CMD0 with argument 0xFFFFFFFF has been sent, the card starts to send the first boot code data on the SDMMC_Dn line(s). The master terminates boot operation by sending CMD0 (Reset).

Figure 595. Alternative boot mode operation

Timing diagram for Alternative boot mode operation showing SDMMC_CK, SDMMC_CMD, and SDMMC_Dn signals. The diagram illustrates the sequence of events: 74 clock cycles, CMD0 boot, data transfer (S 010 E), 50 ms max. timeout, 1 s max. timeout, CMD0 reset, CMD1, and RESP. The boot is completed after 56 cycles min.

The diagram shows the timing for alternative boot mode operation across three signal lines: SDMMC_CK (clock), SDMMC_CMD (command), and SDMMC_Dn (data).
1. **SDMMC_CK**: A continuous square wave clock signal.
2. **SDMMC_CMD**: Shows the issuance of 'CMD0 boot' at the start. After 74 clock cycles, the first data block is sent on SDMMC_Dn. A 'CMD0 reset' command is sent later, followed by 'CMD1' and 'RESP'.
3. **SDMMC_Dn**: Shows data transfer blocks. The first block is 'S 010 E' (Start, 010 data, End). Subsequent blocks are 'S Block read + CRC E'. A timeout of '50 ms max.' is indicated for the first block. A '1 s max.' timeout is shown from the start of data transfer until the 'CMD0 reset' is sent. After 'CMD0 reset', the boot is 'completed' after '56 cycles min.'.

Timing diagram for Alternative boot mode operation showing SDMMC_CK, SDMMC_CMD, and SDMMC_Dn signals. The diagram illustrates the sequence of events: 74 clock cycles, CMD0 boot, data transfer (S 010 E), 50 ms max. timeout, 1 s max. timeout, CMD0 reset, CMD1, and RESP. The boot is completed after 56 cycles min.

To perform the alternative boot procedure the following steps needed:

  1. 1. Move the SDMMC to power-off state, and reset the card
  2. 2. Move the SDMMC to power-on state. This guarantees the 74 SCDMMC_CK cycles to be clocked before any command.
  3. 3. if a boot acknowledgment is requested enable the BOOTACKEN and set the ACKTIME and enable the ACKTIMEOUT flag.
  4. 4. enable the data reception by setting the DPSM in receive mode (DTDIR) and the number of data to be received in DATALENGTH. Enable the DTIMEOUT and DATAEND flags.
  5. 5. Select the alternative boot operation mode in BOOTMODE, load the CMD0 with the 0xFFFFFFFF argument in the command registers. Enable CMDSENT flag for end of

boot command confirmation, and enable boot in BOOTEN. The boot procedure is started by enabling the CPSM with CPSMEN. This causes:

    • – the loaded command and argument to be sent out. (BOOTMODE = alternative boot).
    • – the ACK timeout to start.
    • – DPSM to be enabled.
    1. 6. When the command has been sent the CMDSENT flag is generated, at which time the BOOTEN bit must be cleared.
    2. 7. the reception of the boot acknowledgment can be detected with ACKFAIL flag when enabled.
      • – when the boot acknowledgment is not received in time the ACKTIMEOUT flag occurs.
    3. 8. when all boot data has been received the DATAEND flag occurs.
      • – when data CRC fails the DCRCFAIL flag is also generated.
      • – when the data timeout occurs the DTIMEOUT flag is also generated.
    4. 9. When last data has been received, read data from the FIFO until FIFO is empty (RXFIFOE = 1) after which end of data DATAEND flag is generated.
      • – SDMMC has completely received all data and the DPSM is disabled.
    5. 10. The BOOTEN bit must be cleared, before terminating the boot procedure by sending CMD0 (Reset) with BOOTMODE = alternative boot. This causes the CMDSENT flag to occur 56 cycles after the Command.
      • – if the boot procedure is aborted by firmware before all data has been received the CPSM Abort signal stops the data transfer and disable the DPSM which triggers an DABORT flag when enabled.
    6. 11. The CMDSENT flag signals the end of the boot procedure and the card is ready to receive a new command. When the RESET command has been sent successfully, the BOOTMODE control bit has to be cleared to terminate the boot operation.

54.6.6 Response R1b handling

When sending commands which have a R1b response the busy signaling is reflected in the BUSYD0 register bit and the release of busy with the BUSYD0END flag. The SDMMC_D0 line is sampled at the end of the R1b response and signaled in the BUSYD0 register bit. The BUSYD0 register bit is reset to not busy when the SDMMC_D0 line release busy, at the same time the BUSYD0END flag is generated.

Figure 596. Command response R1b busy signaling

Timing diagram for Command response R1b busy signaling. The diagram shows four signals over time: SDMMC_CMD, SDMMC_D0, BUSYD0, and BUSYD0END. SDMMC_CMD shows two command pulses. The first command is followed by an R1b response. During the R1b response, SDMMC_D0 goes low (BUSY). BUSYD0 goes high when SDMMC_D0 goes low and stays high until SDMMC_D0 goes high again. BUSYD0END goes high when SDMMC_D0 goes high. A horizontal double-headed arrow labeled 'Tbusy max.' indicates the maximum duration of the busy signal.

The diagram illustrates the timing relationship between the command, data line, and busy signaling for an R1b response. The top signal, SDMMC_CMD, shows a command pulse followed by an R1b response, then another command pulse and its response. The second signal, SDMMC_D0, shows a low level (BUSY) during the R1b response. The third signal, BUSYD0, is a register bit that goes high when the data line goes low and stays high until the data line goes high again. The bottom signal, BUSYD0END, is a flag that goes high when the data line goes high. A horizontal double-headed arrow labeled 'Tbusy max.' indicates the maximum duration of the busy signal.

Timing diagram for Command response R1b busy signaling. The diagram shows four signals over time: SDMMC_CMD, SDMMC_D0, BUSYD0, and BUSYD0END. SDMMC_CMD shows two command pulses. The first command is followed by an R1b response. During the R1b response, SDMMC_D0 goes low (BUSY). BUSYD0 goes high when SDMMC_D0 goes low and stays high until SDMMC_D0 goes high again. BUSYD0END goes high when SDMMC_D0 goes high. A horizontal double-headed arrow labeled 'Tbusy max.' indicates the maximum duration of the busy signal.

MSV40946V1

The expected maximum busy time must be set in the DATETIME register before sending the command. When enabled, the DTIMEOUT flag is set when after the R1b response busy stays active longer then the programmed time.

To detect the SDMMC_D0 busy signaling when sending a Command with R1b response the following procedure applies:

54.6.7 Reset and card cycle power

Reset

Following reset the SDMMC is in the reset state. In this state the SDMMC is disabled and no command nor data can be transfered. The SDMMC_D[7:0], and SDMMC_CMD are in HiZ and the SDMMC_CK is driven low.

Before moving to the power-on state the SDMMC must be configured.

In the power-on state the SDMMC_CK clock is running. First 74 SDMMC_CK cycles are clocked after which the SDMMC is enabled and command and data can be transfered.

The SDMMC states are controlled by Firmware with the PWRCTL register bits according Figure 597. .

Figure 597. SDMMC state control

Figure 597. SDMMC state control diagram showing transitions between Power-cycle, Power-off, Power-on (Wait 74 cycles), Power-on (SDMMC enabled), and Reset states based on PWRCTRL bits and Reset signals.
stateDiagram-v2
    direction TB
    
    PowerCycle: Power-cycle
SDMMC disabled
Signals drive 0 PowerOff: Power-off
SDMMC disabled
Signals drive 1 PowerOnWait: Power-on
SDMMC disabled
Wait 74 cycles PowerOnEnabled: Power-on
SDMMC enabled ResetState: Reset
SDMMC disabled
Signals HiZ [*] --> PowerOnWait: PWRCTRL = 11 PowerCycle --> PowerOff: PWRCTRL = 00 PowerCycle --> ResetState: PWRCTRL = 10 PowerOff --> PowerOnWait: PWRCTRL = 11 PowerOnWait --> PowerOnEnabled: SDMMC_CK > 74 cycles PowerCycle --> PowerCycle: Reset PowerOff --> PowerCycle: Reset PowerOnWait --> PowerCycle: Reset PowerOnEnabled --> PowerCycle: Reset ResetState --> PowerCycle: Reset

The diagram shows five states: Power-cycle (SDMMC disabled, signals drive 0), Power-off (SDMMC disabled, signals drive 1), Power-on (SDMMC disabled, wait 74 cycles), Power-on (SDMMC enabled), and Reset (SDMMC disabled, signals HiZ). Transitions are triggered by PWRCTRL register values (00, 10, 11), clock cycle counts (SDMMC_CK > 74 cycles), and Reset signals. All states can transition back to Power-cycle upon a Reset signal.

Figure 597. SDMMC state control diagram showing transitions between Power-cycle, Power-off, Power-on (Wait 74 cycles), Power-on (SDMMC enabled), and Reset states based on PWRCTRL bits and Reset signals.

Card cycle power

To perform a card cycle power the following procedure applies:

  1. 1. Reset the SDMMC with the RCC.SDMMCxRST register bit. This resets the SDMMC to the reset state and the CPSM and DPSM to the Idle state.
  2. 2. Disable the Vcc power to the card.
  3. 3. Set the SDMMC in power-cycle state. This makes that the SDMMC_D[7:0], SDMMC_CMD and SDMMC_CK are driven low, to prevent the card from being supplied through the signal lines.
  4. 4. After minimum 1 ms enable the Vcc power to the card.
  5. 5. After the power ramp period set the SDMMC to the power-off state for minimum 1 ms. The SDMMC_D[7:0], SDMMC_CMD and SDMMC_CK are set to drive "1".
  6. 6. After the 1 ms delay set the SDMMC to power-on state in which the SDMMC_CK clock is enabled.
  7. 7. After 74 SDMMC_CK cycles the first command can be sent to the card.

Figure 598. Card cycle power / power up diagram

Timing diagram for SDMMC card power cycle and power-up sequence. The diagram shows the relationship between Card Vcc, SDMMC_CK, SDMMC_CMD, SDMMC_Dn, and SDMMC state over time. Card Vcc starts at a high level, drops to Vcc min, and then ramps up to a stable level. SDMMC_CK is initially driven '0', then '1' during the power-off state, and finally a series of 74 cycles during the power-on state. SDMMC_CMD and SDMMC_Dn are initially HiZ, then driven '0' during the power-cycle state, and then driven '1' during the power-off state. The SDMMC state transitions from Reset to Power-cycle, then Power-off, and finally Power-on. Timing parameters include 1 ms min for the power-cycle state, 0.1 ms min for the power ramp up, 1 ms min for the power-off state, and 74 SDMMC_CK clocks for the power-on state.

The diagram illustrates the power cycle and power-up sequence for an SDMMC card. The top section shows the Card Vcc signal, which starts at a high level, drops to Vcc min, and then ramps up to a stable level. The SDMMC_CK signal is initially driven '0', then '1' during the power-off state, and finally a series of 74 cycles during the power-on state. The SDMMC_CMD and SDMMC_Dn signals are initially HiZ, then driven '0' during the power-cycle state, and then driven '1' during the power-off state. The SDMMC state transitions from Reset to Power-cycle, then Power-off, and finally Power-on. Timing parameters include 1 ms min for the power-cycle state, 0.1 ms min for the power ramp up, 1 ms min for the power-off state, and 74 SDMMC_CK clocks for the power-on state.

Timing diagram for SDMMC card power cycle and power-up sequence. The diagram shows the relationship between Card Vcc, SDMMC_CK, SDMMC_CMD, SDMMC_Dn, and SDMMC state over time. Card Vcc starts at a high level, drops to Vcc min, and then ramps up to a stable level. SDMMC_CK is initially driven '0', then '1' during the power-off state, and finally a series of 74 cycles during the power-on state. SDMMC_CMD and SDMMC_Dn are initially HiZ, then driven '0' during the power-cycle state, and then driven '1' during the power-off state. The SDMMC state transitions from Reset to Power-cycle, then Power-off, and finally Power-on. Timing parameters include 1 ms min for the power-cycle state, 0.1 ms min for the power ramp up, 1 ms min for the power-off state, and 74 SDMMC_CK clocks for the power-on state.

54.7 Hardware flow control

The hardware flow control during data transfer functionality is used to avoid FIFO underrun (TX mode) and overrun (RX mode) errors.

The behavior is to stop SDMMC_CK during data transfer and freeze the SDMMC state machines. The data transfer is stalled when the FIFO is unable to transmit or receive data. The data transfer remains stalled until the transmit FIFO is half full or all data according DATALENGHT has been stored, or until the receive FIFO is half empty. Only state machines clocked by SDMMC_CK are frozen, the AHB interfaces are still alive. The FIFO can thus be filled or emptied even if flow control is activated.

To enable hardware flow control during data transfer, the HWFC_EN register bit must be set to 1. After reset hardware flow control is disabled.

54.8 Ultra-high-speed phase I (UHS-I) voltage switch

UHS-I mode (SDR12, SDR25, SDR50, and DDR50) requires the support for 1.8V signaling. After power up the card starts in 3.3V mode. CMD11 invokes the voltage switch sequence to the 1.8V mode. When the voltage sequence is completed successfully the card enters UHS-I mode with default SDR12 and card input and output timings are changed.

Figure 599. CMD11 signal voltage switch sequence

Timing diagram for CMD11 signal voltage switch sequence. The diagram shows three signal lines: SDMMC_CK, SDMMC_CMD, and SDMMC_D[3:0]. SDMMC_CK starts at 3.3V, provides a clock, then goes low for at least 5 ms, and then provides a clock at 1.8V. SDMMC_CMD starts at 3.3V, sends CMD11 and R1 response, then goes low, and then goes high at 1.8V. SDMMC_D[3:0] starts at 3.3V, goes low, and then goes high at 1.8V. The transition from 3.3V to 1.8V for CMD and D[3:0] must occur within 1 ms of the CK transition. The diagram is labeled MSV40950V1.
Timing diagram for CMD11 signal voltage switch sequence. The diagram shows three signal lines: SDMMC_CK, SDMMC_CMD, and SDMMC_D[3:0]. SDMMC_CK starts at 3.3V, provides a clock, then goes low for at least 5 ms, and then provides a clock at 1.8V. SDMMC_CMD starts at 3.3V, sends CMD11 and R1 response, then goes low, and then goes high at 1.8V. SDMMC_D[3:0] starts at 3.3V, goes low, and then goes high at 1.8V. The transition from 3.3V to 1.8V for CMD and D[3:0] must occur within 1 ms of the CK transition. The diagram is labeled MSV40950V1.

To perform the signal voltage switch sequence the following steps are needed:

  1. 1. Before starting the Voltage Switch procedure, the SDMMC_CK frequency must be set in the range 100 kHz - 400 kHz.
  2. 2. The host starts the Voltage Switch procedure by setting the VSWITCHEN bit before sending the CMD11.
  3. 3. The card returns an R1 response.
    • – if the response CRC is pass, the Voltage Switch procedure continues the host does no longer drive the CMD and SDMMC_D[3:0] signals until completion of the voltage switch sequence. Some cycles after the response the SDMMC_CK is stopped and the CKSTOP flag is set.
    • – if the response CRC is fail (CCRCFAIL flag) or no response is received before the timeout (CTIMEOUT flag), the Voltage Switch procedure is stopped.
  4. 4. The card drives CMD and SDMMC_D[3:0] to low at the next clock after the R1 response.
  5. 5. The host, after having received the R1 response, may monitor the SDMMC_D0 line using the BUSYD0 register bit. The SDMMC_D0 line is sampled two SDMMC_CK clock cycles after the Response. The Firmware may read the BUSYD0 register bit following the CKSTOP flag.
    • – When the BUSYD0 is detected low the host firmware switches the Voltage regulator to 1.8V, after which it instructs the SDMMC to start the timing critical section of the Voltage Switch sequence by setting register bit VSWITCH. The hardware continues to stop the SDMMC_CK by holding it low for at least 5 ms.
    • – When the BUSYD0 is detected high the host aborts the Voltage Switch sequence and cycle power the card.
  6. 6. The card after detecting SDMMC_CK low begins switching signaling voltage to 1.8 V.
  7. 7. The host SDMMC hardware after at least 5 ms restarts the SDMMC_CK.
  8. 8. The card within 1 ms from detecting SDMMC_CK transition drives CMD and DAT[3:0] high for at least 1 SDMMC_CK cycle and then stop driving CMD and DAT[3:0].
  1. 9. The host SDMMC hardware, 1 ms after the SDMMC_CK has been restarted, the SDMMC_D0 is sampled into BUSYD0 and the VSWEND flag is set.
  2. 10. The host, on the VSWEND flag, checks SDMMC_D0 line using the BUSYD0 register bit, to confirm completion of voltage switch sequence:
    • – When BUSYD0 is detected high, Voltage Switch has been completed successfully.
    • – When BUSYD0 is detected low, Voltage Switch has failed, the host cycles the card power.

The minimum 5 ms time to stop the SDMMC_CK is derived from the internal un-gated SDMMC_CK clock, which has a maximum frequency of 25 MHz (SD mode), as set by the clock divider CLKDIV. The >5 ms time is counted by \( 2^{12} \) cycles (10.24 ms @ 400 kHz). If a lower SDMMC_CK frequency is selected by the clock divider CLKDIV the time for the SDMMC_CK clock to be stopped is longer.

The maximum 1 ms time for the card to drive the SDMMC_Dn and SDMMC_CMD lines high is derived from the internal ungated SDMMC_CK which has a maximum frequency of 25 MHz (SD mode), as set by the clock divider CLKDIV. The SDMMC checks the lines after >1 ms time which is counted by \( 2^9 \) cycles (1.28 ms @ 25 MHz). If a lower SDMMC_CK frequency is selected by the clock divider CLKDIV the time to check the lines is longer.

The signal voltage level is supported through an external voltage translation transceiver like STMicroelectronics ST6G3244ME.

Figure 600. Voltage switch transceiver typical application

Figure 600. Voltage switch transceiver typical application. A block diagram showing the connection between an SD Host, a Voltage transceiver, and an SD Card. The SD Host contains an SDMMC block with signals: SDMMC_CK, SDMMC_CKIN, SDMMC_CDIR, SDMMC_CMD, SDMMC_D0DIR, SDMMC_D0, SDMMC_D123DIR, SDMMC_D1, SDMMC_D2, and SDMMC_D3. The Voltage transceiver has EN and SEL pins connected to GPIOs. It contains a Level converter and drivers for CLK.h, CLK-f, CMD.h, DAT0.h, DAT123.dir, DAT1.h, DAT2.h, and DAT3.h. The SD Card has pins CLKB, CMDB, DAT0B, DAT1B, DAT2B, and DAT3B. The diagram shows the signal flow from the SD Host through the transceiver to the SD Card, with direction control signals (CDIR, D0DIR, D123DIR) managing the data flow.
Figure 600. Voltage switch transceiver typical application. A block diagram showing the connection between an SD Host, a Voltage transceiver, and an SD Card. The SD Host contains an SDMMC block with signals: SDMMC_CK, SDMMC_CKIN, SDMMC_CDIR, SDMMC_CMD, SDMMC_D0DIR, SDMMC_D0, SDMMC_D123DIR, SDMMC_D1, SDMMC_D2, and SDMMC_D3. The Voltage transceiver has EN and SEL pins connected to GPIOs. It contains a Level converter and drivers for CLK.h, CLK-f, CMD.h, DAT0.h, DAT123.dir, DAT1.h, DAT2.h, and DAT3.h. The SD Card has pins CLKB, CMDB, DAT0B, DAT1B, DAT2B, and DAT3B. The diagram shows the signal flow from the SD Host through the transceiver to the SD Card, with direction control signals (CDIR, D0DIR, D123DIR) managing the data flow.

To interface with an external driver (a voltage switch transceiver), next to the standard signals the SDMMC uses the following signals:

SDMMC_CKIN feedback input clock

SDMMC_CDIR I/O direction control for the CMD signal.

SDMMC_D0DIR I/O direction control for the SDMMC_D0 signal.

SDMMC_D123DIR I/O direction control for the SDMMC_D1, SDMMC_D2 and SDMMC_D3 signals.

The voltage transceiver signals EN and SEL are to be handled through general-purpose I/O.

The polarity of the SDMMC_CDIR, SDMMC_D0DIR and SDMMC_D123DIR signals can be selected through SDMMC_POWER.DIRPOL control bit.

54.9 SDMMC interrupts

Table 409. SDMMC interrupts

Interrupt acronymInterrupt eventEvent flagEnable control bitInterrupt clear methodExit from Sleep mode
SDMMCCommand response CRC failCCRCFAILCCRCFAILIECCRCFAILCYes
SDMMCData block CRC failDCRCFAILDCRCFAILIEDCRCFAILCYes
SDMMCCommand response timeoutCTIMEOUTCTIMEOUTIECTIMEOUTCYes
SDMMCData timeoutDTIMEOUTDTIMEOUTIEDTIMEOUTCYes
SDMMCTransmit FIFO underrunTXUNDERRTXUNDERRIETXUNDERRCYes
SDMMCReceive FIFO overrunRXOVERRRXOVERRIERXOVERRCYes
SDMMCCommand response receivedCMDRENDCMDRENDIECMDRENDCYes
SDMMCCommand sentCMDSENTCMDSENTIECMDSENTCYes
SDMMCData transfer endedDATAENDDATAENDIEDATAENDCYes
SDMMCData transfer holdDHOLDDHOLDIEDHOLDCYes
SDMMCData block sent or receivedDBCKENDDBCKENDIEDBCKENDCYes
SDMMCData transfer abortedDABORTDABORTIEDABORTCYes
SDMMCTransmit FIFO half emptyTXFIFOHETXFIFOHEIEn.a.Yes
SDMMCReceive FIFO half fullRXFIFOHFRXFIFOHFIEn.a.Yes
SDMMCTransmit FIFO fullTXFIFOFn.a.n.a.Yes
SDMMCReceive FIFO fullRXFIFOFRXFIFOFIEn.a.Yes
SDMMCTransmit FIFO emptyTXFIFOETXFIFOEIEn.a.Yes
SDMMCReceive FIFO emptyRXFIFOEn.a.n.a.Yes

Table 409. SDMMC interrupts (continued)

Interrupt acronymInterrupt eventEvent flagEnable control bitInterrupt clear methodExit from Sleep mode
SDMMCCommand response end of busyBUSYD0ENDBUSYD0ENDIEBUSYD0ENDCYes
SDMMCSDIO interruptSDIOITSDIOITIESDIOITCYes
SDMMCBoot acknowledgment failACKFAILACKFAILIEACKFAILCYes
SDMMCBoot acknowledgment timeoutACKTIMEOUTACKTIMEOUTIEACKTIMEOUTCYes
SDMMCVoltage switch timingVSWENDVSWENDIEVSWENDCYes
SDMMCSDMMC_CK stopped in voltage switchCKSTOPCKSTOPIECKSTOPCYes
SDMMCIDMA transfer errorIDMATEIDMATEIEIDMATECYes
SDMMCIDMA buffer transfer completeIDMABTCIDMABTCIEIDMABTCYes

54.10 SDMMC registers

The device communicates to the system via 32-bit control registers accessible via AHB slave interface.

The peripheral registers have to be accessed by words (32-bit). Byte (8-bit) and halfword (16-bit) accesses trigger an AHB bus error.

54.10.1 SDMMC power control register (SDMMC_POWER)

Address offset: 0x000

Reset value: 0x0000 0000

31302928272625242322212019181716
Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.
1514131211109876543210
Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.DIR
POL
VSWI
TCHEN
VSWI
TCH
PWRCTRL[1:0]
rwrwrwrwrw

Bits 31:5 Reserved, must be kept at reset value.

Bit 4 DIRPOL : Data and command direction signals polarity selection

This bit can only be written when the SDMMC is in the power-off state (PWRCTRL = 00).

0: Voltage transceiver IOs driven as output when direction signal is low.

1: Voltage transceiver IOs driven as output when direction signal is high.

Bit 3 VSWITCHEN : Voltage switch procedure enable

This bit can only be written by firmware when CPSM is disabled (CPSMEN = 0).

This bit is used to stop the SDMMC_CK after the voltage switch command response:

0: SDMMC_CK clock kept unchanged after successfully received command response.

1: SDMMC_CK clock stopped after successfully received command response.

Bit 2 VSWITCH : Voltage switch sequence start

This bit is used to start the timing critical section of the voltage switch sequence:

0: Voltage switch sequence not started and not active.

1: Voltage switch sequence started or active.

Bits 1:0 PWRCTRL[1:0] : SDMMC state control bits

These bits can only be written when the SDMMC is not in the power-on state (PWRCTRL ≠ 11).

These bits are used to define the functional state of the SDMMC signals:

00: After reset, Reset: the SDMMC is disabled and the clock to the Card is stopped, SDMMC_D[7:0], and SDMMC_CMD are HiZ and SDMMC_CK is driven low.

When written 00, power-off: the SDMMC is disabled and the clock to the card is stopped, SDMMC_D[7:0], SDMMC_CMD and SDMMC_CK are driven high.

01: Reserved. (When written 01, PWRCTRL value does not change)

10: Power-cycle, the SDMMC is disabled and the clock to the card is stopped, SDMMC_D[7:0], SDMMC_CMD and SDMMC_CK are driven low.

11: Power-on: the card is clocked, The first 74 SDMMC_CK cycles the SDMMC is still disabled. After the 74 cycles the SDMMC is enabled and the SDMMC_D[7:0], SDMMC_CMD and SDMMC_CK are controlled according the SDMMC operation.

Any further write is ignored, PWRCTRL value keeps 11.

54.10.2 SDMMC clock control register (SDMMC_CLKCR)

Address offset: 0x004

Reset value: 0x0000 0000

The SDMMC_CLKCR register controls the SDMMC_CK output clock, the sdmmc_rx_ck receive clock, and the bus width.

31302928272625242322212019181716
Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.SELCLKRX[1:0]BUS SPEEDDDRHWFC_ENNEG EDGE
rwrwrwrwrwrw
1514131211109876543210
WID BUS[1:0]Res.PWR SAVRes.Res.CLKDIV[9:0]
rwrwrwrwrwrwrwrwrwrwrwrwrwrw

Bits 31:22 Reserved, must be kept at reset value.

Bits 21:20 SELCLKRX[1:0] : Receive clock selection

These bits can only be written when the CPSM and DPSM are not active (CPSMACT = 0 and DPSMACT = 0)

00: sdmmc_io_in_ck selected as receive clock

01: SDMMC_CKIN feedback clock selected as receive clock

10: Reserved

11: Reserved (select sdmmc_io_in_ck)

Bit 19 BUSSPEED : Bus speed for selection of SDMMC operating modes

This bit can only be written when the CPSM and DPSM are not active (CPSMACT = 0 and DPSMACT = 0)

0: DS, HS, SDR12, SDR25, Legacy compatible, High speed SDR, High speed DDR bus speed mode selected

1: SDR50, DDR50 bus speed mode selected.

Bit 18 DDR : Data rate signaling selection

This bit can only be written when the CPSM and DPSM are not active (CPSMACT = 0 and DPSMACT = 0)

DDR rate must only be selected with 4-bit or 8-bit wide bus mode. (WIDBUS > 00). DDR = 1 has no effect when WIDBUS = 00 (1-bit wide bus).

DDR rate must only be selected with clock division >1. (CLKDIV > 0)

0: SDR Single data rate signaling

1: DDR double data rate signaling

Bit 17 HWFC_EN : Hardware flow control enable

This bit can only be written when the CPSM and DPSM are not active (CPSMACT = 0 and DPSMACT = 0)

0: Hardware flow control is disabled

1: Hardware flow control is enabled

When Hardware flow control is enabled, the meaning of the TXFIFOE and RXFIFO flags change, please see SDMMC status register definition in Section 54.10.11 .

Bit 16 NEGEDGE : SDMMC_CK dephasing selection bit for data and command

This bit can only be written when the CPSM and DPSM are not active (CPSMACT = 0 and DPSMACT = 0).

When clock division = 1 (CLKDIV = 0), this bit has no effect. Data and Command change on SDMMC_CK falling edge.

0: When clock division >1 (CLKDIV > 0) & DDR = 0:

When clock division >1 (CLKDIV > 0) & DDR = 1:

1: When clock division >1 (CLKDIV > 0) & DDR = 0:

When clock division >1 (CLKDIV > 0) & DDR = 1:

Bits 15:14 WIDBUS[1:0] : Wide bus mode enable bit

This bit can only be written when the CPSM and DPSM are not active (CPSMACT = 0 and DPSMACT = 0)

00: Default 1-bit wide bus mode: SDMMC_D0 used (Does not support DDR)

01: 4-bit wide bus mode: SDMMC_D[3:0] used

10: 8-bit wide bus mode: SDMMC_D[7:0] used

Bit 13 Reserved, must be kept at reset value.

Bit 12 PWRSAV : Power saving configuration bit

This bit can only be written when the CPSM and DPSM are not active (CPSMACT = 0 and DPSMACT = 0)

For power saving, the SDMMC_CK clock output can be disabled when the bus is idle by setting PWRSAV:

0: SDMMC_CK clock is always enabled

1: SDMMC_CK is only enabled when the bus is active

Bits 11:10 Reserved, must be kept at reset value.

Bits 9:0 CLKDIV[9:0] : Clock divide factor

This bit can only be written when the CPSM and DPSM are not active (CPSMACT = 0 and DPSMACT = 0).

This field defines the divide factor between the input clock (sdmmc_ker_ck) and the output clock (SDMMC_CK): \( SDMMC\_CK\ frequency = sdmmc\_ker\_ck / [2 * CLKDIV] \) .

0x000: SDMMC_CK frequency = sdmmc_ker_ck / 1 (Does not support DDR)

0x001: SDMMC_CK frequency = sdmmc_ker_ck / 2

0x002: SDMMC_CK frequency = sdmmc_ker_ck / 4

0x0XX: etc..

0x080: SDMMC_CK frequency = sdmmc_ker_ck / 256

0xXXX: etc..

0x3FF: SDMMC_CK frequency = sdmmc_ker_ck / 2046

  1. Note:
    1. 1 While the SD/SDIO card or e•MMC is in identification mode, the SDMMC_CK frequency must be less than 400 kHz.
    2. 2 The clock frequency can be changed to the maximum card bus frequency when relative card addresses are assigned to all cards.
    3. 3 At least seven sdmmc_hclk clock periods are needed between two write accesses to this register. SDMMC_CK can also be stopped during the Read Wait interval for SD I/O cards: in this case the SDMMC_CLKCR register does not control SDMMC_CK.

54.10.3 SDMMC argument register (SDMMC_ARGR)

Address offset: 0x008

Reset value: 0x0000 0000

The SDMMC_ARGR register contains a 32-bit command argument, which is sent to a card as part of a command message.

31302928272625242322212019181716
CMDARG[31:16]
rwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrw
1514131211109876543210
CMDARG[15:0]
rwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrw

Bits 31:0 CMDARG[31:0] : Command argument

These bits can only be written by firmware when CPSM is disabled (CPSMEN = 0).

Command argument sent to a card as part of a command message. If a command contains an argument, it must be loaded into this register before writing a command to the command register.

54.10.4 SDMMC command register (SDMMC_CMDR)

Address offset: 0x00C

Reset value: 0x0000 0000

The SDMMC_CMDR register contains the command index and command type bits. The command index is sent to a card as part of a command message. The command type bits control the command path state machine (CPSM).

31302928272625242322212019181716
Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.CMD SUS PEND
rw
1514131211109876543210
BOOT ENBOOT MODEDT HOLDCPSM ENWAITP ENDWAIT INTWAITRESP[1:0]CMD STOPCMD TRANSCMDINDEX[5:0]
rwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrw

Bits 31:17 Reserved, must be kept at reset value.

Bit 16 CMDSUSPEND : The CPSM treats the command as a Suspend or Resume command and signals interrupt period start/end

This bit can only be written by firmware when CPSM is disabled (CPSMEN = 0).

CMDSUSPEND = 1 and CMDTRANS = 0 Suspend command, start interrupt period when response bit BS=0.

CMDSUSPEND = 1 and CMDTRANS = 1 Resume command with data, end interrupt period when response bit DF=1.

Bit 15 BOOTEN : Enable boot mode procedure

0: Boot mode procedure disabled

1: Boot mode procedure enabled

Bit 14 BOOTMODE : Select the boot mode procedure to be used

This bit can only be written by firmware when CPSM is disabled (CPSMEN = 0)

0: Normal boot mode procedure selected

1: Alternative boot mode procedure selected.

Bit 13 DTHOLD : Hold new data block transmission and reception in the DPSM

If this bit is set, the DPSM does not move from the Wait_S state to the Send state or from the Wait_R state to the Receive state.

Bit 12 CPSMEN : Command path state machine (CPSM) enable bit

This bit is written 1 by firmware, and cleared by hardware when the CPSM enters the Idle state.

If this bit is set, the CPSM is enabled.

When DTEN = 1, no command is transferred nor boot procedure is started. CPSMEN is cleared to 0.

During Read Wait with SDMMC_CK stopped no command is sent and CPSMEN is kept 0.

Bit 11 WAITPEND : CPSM waits for end of data transfer (CmdPend internal signal) from DPSM

This bit when set, the CPSM waits for the end of data transfer trigger before it starts sending a command.

WAITPEND is only taken into account when DTMODE = e•MMC stream data transfer, WIDBUS = 1-bit wide bus mode, DPSMACT = 1 and DTDIR = from host to card.

Bit 10 WAITINT : CPSM waits for interrupt request

If this bit is set, the CPSM disables command timeout and waits for an card interrupt request (Response).

If this bit is cleared in the CPSM Wait state, it causes the abort of the interrupt mode.

Bits 9:8 WAITRESP[1:0] : Wait for response bits

This bit can only be written by firmware when CPSM is disabled (CPSMEN = 0).

They are used to configure whether the CPSM is to wait for a response, and if yes, which kind of response.

00: No response, expect CMDSENT flag

01: Short response, expect CMDREND or CCRCFAIL flag

10: Short response, expect CMDREND flag (No CRC)

11: Long response, expect CMDREND or CCRCFAIL flag

Bit 7 CMDSTOP : The CPSM treats the command as a Stop Transmission command and signals abort to the DPSM

This bit can only be written by firmware when CPSM is disabled (CPSMEN = 0).

If this bit is set, the CPSM issues the abort signal to the DPSM when the command is sent.

Bit 6 CMDTRANS : The CPSM treats the command as a data transfer command, stops the interrupt period, and signals DataEnable to the DPSM

This bit can only be written by firmware when CPSM is disabled (CPSMEN = 0).

If this bit is set, the CPSM issues an end of interrupt period and issues DataEnable signal to the DPSM when the command is sent.

Bits 5:0 CMDINDEX[5:0] : Command index

This bit can only be written by firmware when CPSM is disabled (CPSMEN = 0).

The command index is sent to the card as part of a command message.

  1. Note:
    1. 1 At least seven sdmmc_hclk clock periods are needed between two write accesses to this register.
    2. 2 MultiMediaCard can send two kinds of response: short responses, 48 bits, or long responses, 136 bits. SD card and SD I/O card can send only short responses, the argument can vary according to the type of response: the software distinguishes the type of response according to the send command.

54.10.5 SDMMC command response register (SDMMC_RESPCMDR)

Address offset: 0x010

Reset value: 0x0000 0000

The SDMMC_RESPCMDR register contains the command index field of the last command response received. If the command response transmission does not contain the command index field (long or OCR response), the RESPCMD field is unknown, although it must contain 111111b (the value of the reserved field from the response).

31302928272625242322212019181716
Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.
1514131211109876543210
Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.
rrrrrr

Bits 31:6 Reserved, must be kept at reset value.

Bits 5:0 RESPCMD[5:0] : Response command index

Read-only bit field. Contains the command index of the last command response received.

54.10.6 SDMMC response x register (SDMMC_RESPxR)

Address offset: \( 0x010 + 0x004 \times x \) , ( \( x = 1 \) to \( 4 \) )

Reset value: 0x0000 0000

The SDMMC_RESP1/2/3/4R registers contain the status of a card, which is part of the received response.

31302928272625242322212019181716
CARDSTATUSx[31:16]
rrrrrrrrrrrrrrrr
1514131211109876543210
CARDSTATUSx[15:0]
rrrrrrrrrrrrrrrr

Bits 31:0 CARDSTATUSx[31:0] : Card status x

See Table 410 .

The card status size is 32 or 128 bits, depending on the response type.

Table 410. Response type and SDMMC_RESPxR registers

Register (1)Short responseLong response
SDMMC_RESP1RCard status[31:0]Card status [127:96]
SDMMC_RESP2Rall 0Card status [95:64]
SDMMC_RESP3Rall 0Card status [63:32]
SDMMC_RESP4Rall 0Card status [31:0] (2)

1. The most significant bit of the card status is received first.

2. The SDMMC_RESP4R register LSB is always 0.

54.10.7 SDMMC data timer register (SDMMC_DTIMER)

Address offset: 0x024

Reset value: 0x0000 0000

The SDMMC_DTIMER register contains the data timeout period, in card bus clock periods.

A counter loads the value from the SDMMC_DTIMER register, and starts decrementing when the data path state machine (DPSM) enters the Wait_R or Busy state. If the timer reaches 0 while the DPSM is in either of these states, the timeout status flag is set.

31302928272625242322212019181716
DATATIME[31:16]
rwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrw
1514131211109876543210
DATATIME[15:0]
rwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrw

Bits 31:0 DATATIME[31:0] : Data and R1b busy timeout period

This bit can only be written when the CPSM and DPSM are not active (CPSMACT = 0 and DPSMACT = 0).

Data and R1b busy timeout period expressed in card bus clock periods.

Note: A data transfer must be written to the data timer register and the data length register before being written to the data control register.

54.10.8 SDMMC data length register (SDMMC_DLENR)

Address offset: 0x028

Reset value: 0x0000 0000

The SDMMC_DLENR register contains the number of data bytes to be transferred. The value is loaded into the data counter when data transfer starts.

31302928272625242322212019181716
Res.Res.Res.Res.Res.Res.Res.DATALENGTH[24:16]
rwrwrwrwrwrwrwrwrw
1514131211109876543210
DATALENGTH[15:0]
rwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrw

Bits 31:25 Reserved, must be kept at reset value.

Bits 24:0 DATALENGTH[24:0] : Data length value

This register can only be written by firmware when DPSM is inactive (DPSMACT = 0).

Number of data bytes to be transferred.

When DDR = 1 DATALENGTH is truncated to a multiple of 2. (The last odd byte is not transferred)

When DATALENGTH = 0 no data are transferred, when requested by a CPSMEN and CMDTRANS = 1 also no command is transferred. DTEN and CPSMEN are cleared to 0.

Note: For a block data transfer, the value in the data length register must be a multiple of the block size (see SDMMC_DCTRL). A data transfer must be written to the data timer register and the data length register before being written to the data control register.

For an SDMMC multibyte transfer the value in the data length register must be between 1 and 512.

54.10.9 SDMMC data control register (SDMMC_DCTRL)

Address offset: 0x02C

Reset value: 0x0000 0000

The SDMMC_DCTRL register control the data path state machine (DPSM).

31302928272625242322212019181716
Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.
1514131211109876543210
Res.Res.FIFO
RST
BOOT
ACK
EN
SDIO
EN
RW
MOD
RW
STOP
RW
START
DBLOCKSIZE[3:0]DTMODE[1:0]DTDIRDTEN
rwrwrwrwrwrwrwrwrwrwrwrwrwrw

Bits 31:14 Reserved, must be kept at reset value.

Bit 13 FIFORST : FIFO reset, flushes any remaining data

This bit can only be written by firmware when IDMAEN= 0 and DPSM is active (DPSMACT = 1). This bit only takes effect when a transfer error or transfer hold occurs.

0: FIFO not affected.

1: Flush any remaining data and reset the FIFO pointers. This bit is automatically cleared to 0 by hardware when DPSM gets inactive (DPSMACT = 0).

Bit 12 BOOTACKEN : Enable the reception of the boot acknowledgment

This bit can only be written by firmware when DPSM is inactive (DPSMACT = 0).

0: Boot acknowledgment disabled, not expected to be received

1: Boot acknowledgment enabled, expected to be received

Bit 11 SDIOEN : SD I/O interrupt enable functions

This bit can only be written by firmware when DPSM is inactive (DPSMACT = 0).

If this bit is set, the DPSM enables the SD I/O card specific interrupt operation.

Bit 10 RWMOD : Read Wait mode

This bit can only be written by firmware when DPSM is inactive (DPSMACT = 0).

0: Read Wait control using SDMMC_D2

1: Read Wait control stopping SDMMC_CK

Bit 9 RWSTOP : Read Wait stop

This bit is written by firmware and auto cleared by hardware when the DPSM moves from the R_W state to the Wait_R or Idle state.

0: No Read Wait stop.

1: Enable for Read Wait stop when DPSM is in the R_W state.

Bit 8 RWSTART : Read Wait start

If this bit is set, Read Wait operation starts.

Bits 7:4 DBLOCKSIZE[3:0]: Data block size

This bit can only be written by firmware when DPSM is inactive (DPSMACT = 0).

Define the data block length when the block data transfer mode is selected:

0000: Block length = \( 2^0 \) = 1 byte

0001: Block length = \( 2^1 \) = 2 bytes

0010: Block length = \( 2^2 \) = 4 bytes

0011: Block length = \( 2^3 \) = 8 bytes

0100: Block length = \( 2^4 \) = 16 bytes

0101: Block length = \( 2^5 \) = 32 bytes

0110: Block length = \( 2^6 \) = 64 bytes

0111: Block length = \( 2^7 \) = 128 bytes

1000: Block length = \( 2^8 \) = 256 bytes

1001: Block length = \( 2^9 \) = 512 bytes

1010: Block length = \( 2^{10} \) = 1024 bytes

1011: Block length = \( 2^{11} \) = 2048 bytes

1100: Block length = \( 2^{12} \) = 4096 bytes

1101: Block length = \( 2^{13} \) = 8192 bytes

1110: Block length = \( 2^{14} \) = 16384 bytes

1111: Reserved

When DATALENGTH is not a multiple of DBLOCKSIZE, the transferred data is truncated at a multiple of DBLOCKSIZE. (None of the remaining data are transferred.)

When DDR = 1, DBLOCKSIZE = 0000 must not be used. (No data are transferred)

Bits 3:2 DTMODE[1:0]: Data transfer mode selection

This bit can only be written by firmware when DPSM is inactive (DPSMACT = 0).

00: Block data transfer ending on block count.

01: SDIO multibyte data transfer.

10: e•MMC Stream data transfer. (WIDBUS must select 1-bit wide bus mode)

11: Block data transfer ending with STOP_TRANSMISSION command (not to be used with DTEN initiated data transfers).

Bit 1 DTDIR: Data transfer direction selection

This bit can only be written by firmware when DPSM is inactive (DPSMACT = 0).

0: From host to card.

1: From card to host.

Bit 0 DTEN: Data transfer enable bit

This bit can only be written by firmware when DPSM is inactive (DPSMACT = 0). This bit is cleared by Hardware when data transfer completes.

This bit must only be used to transfer data when no associated data transfer command is used, i.e. must not be used with SD or e•MMC cards.

0: Do not start data transfer without CPSM data transfer command.

1: Start data transfer without CPSM data transfer command.

54.10.10 SDMMC data counter register (SDMMC_DCNTR)

Address offset: 0x030

Reset value: 0x0000 0000

The SDMMC_DCNTR register loads the value from the data length register (see SDMMC_DLENR) when the DPSM moves from the Idle state to the Wait_R or Wait_S state. As data is transferred, the counter decrements the value until it reaches 0. The DPSM then

moves to the Idle state and when there has been no error, and no transmit data transfer hold, the data status end flag (DATAEND) is set.

31302928272625242322212019181716
Res.Res.Res.Res.Res.Res.Res.DATACOUNT[24:16]
rrrrrrrrr
1514131211109876543210
DATACOUNT[15:0]
rrrrrrrrrrrrrrrr

Bits 31:25 Reserved, must be kept at reset value.

Bits 24:0 DATACOUNT[24:0] : Data count value

When read, the number of remaining data bytes to be transferred is returned. Write has no effect.

Note: This register should be read only after the data transfer is complete, or hold. When reading after an error event the read data count value may be different from the real number of data bytes transferred.

54.10.11 SDMMC status register (SDMMC_STAR)

Address offset: 0x034

Reset value: 0x0000 0000

The SDMMC_STAR register is a read-only register. It contains two types of flag:

31302928272625242322212019181716
Res.Res.Res.IDMA BTCIDMA TECK STOPVSW ENDACK TIME OUTACK FAILSDIOITBUSY D0ENDBUSY D0RX FIFOETX FIFOERX FIFOFTX FIFOF
rrrrrrrrrrrrr
1514131211109876543210
RX FIFO HFTX FIFO HECPSM ACTDPSM ACTDA BORTDBCK ENDDHOLDDATA ENDCMD SENTCMDR ENDRX OVERRTX UNDER RD TIME OUTC TIME OUTDCRC FAILCCRC FAIL
rrrrrrrrrrrrrrrr

Bits 31:29 Reserved, must be kept at reset value.

Bit 28 IDMABTC : IDMA buffer transfer complete

The interrupt flag is cleared by writing corresponding interrupt clear bit in SDMMC_ICR.

Bit 27 IDMATE : IDMA transfer error

The interrupt flag is cleared by writing corresponding interrupt clear bit in SDMMC_ICR.

Bit 26 CKSTOP : SDMMC_CK stopped in Voltage switch procedure

The interrupt flag is cleared by writing corresponding interrupt clear bit in SDMMC_ICR.

  1. Bit 25 VSWEND : Voltage switch critical timing section completion
    The interrupt flag is cleared by writing corresponding interrupt clear bit in SDMMC_ICR.
  2. Bit 24 ACKTIMEOUT : Boot acknowledgment timeout
    The interrupt flag is cleared by writing corresponding interrupt clear bit in SDMMC_ICR.
  3. Bit 23 ACKFAIL : Boot acknowledgment received (boot acknowledgment check fail)
    The interrupt flag is cleared by writing corresponding interrupt clear bit in SDMMC_ICR.
  4. Bit 22 SDIOIT : SDIO interrupt received
    The interrupt flag is cleared by writing corresponding interrupt clear bit in SDMMC_ICR.
  5. Bit 21 BUSYD0END : end of SDMMC_D0 Busy following a CMD response detected
    This indicates only end of busy following a CMD response. This bit does not signal busy due to data transfer. Interrupt flag is cleared by writing corresponding interrupt clear bit in SDMMC_ICR.
    0: card SDMMC_D0 signal does NOT signal change from busy to not busy.
    1: card SDMMC_D0 signal changed from busy to NOT busy.
  6. Bit 20 BUSYD0 : Inverted value of SDMMC_D0 line (Busy), sampled at the end of a CMD response and a second time 2 SDMMC_CK cycles after the CMD response
    This bit is reset to not busy when the SDMMC_D0 line changes from busy to not busy. This bit does not signal busy due to data transfer. This is a hardware status flag only, it does not generate an interrupt.
    0: card signals not busy on SDMMC_D0.
    1: card signals busy on SDMMC_D0.
  7. Bit 19 RXFIFOE : Receive FIFO empty
    This is a hardware status flag only, does not generate an interrupt. This bit is cleared when one FIFO location becomes full.
  8. Bit 18 TXFIFOE : Transmit FIFO empty
    This bit is cleared when one FIFO location becomes full.
  9. Bit 17 RXFIFOE : Receive FIFO full
    This bit is cleared when one FIFO location becomes empty.
  10. Bit 16 TXFIFOE : Transmit FIFO full
    This is a hardware status flag only, does not generate an interrupt. This bit is cleared when one FIFO location becomes empty.
  11. Bit 15 RXFIFOHF : Receive FIFO half full
    There are at least half the number of words in the FIFO. This bit is cleared when the FIFO becomes half+1 empty.
  12. Bit 14 TXFIFOHE : Transmit FIFO half empty
    At least half the number of words can be written into the FIFO. This bit is cleared when the FIFO becomes half+1 full.
  13. Bit 13 CPSMACT : Command path state machine active, i.e. not in Idle state
    This is a hardware status flag only, does not generate an interrupt.
  14. Bit 12 DPSMACT : Data path state machine active, i.e. not in Idle state
    This is a hardware status flag only, does not generate an interrupt.
  15. Bit 11 DABORT : Data transfer aborted by CMD12
    Interrupt flag is cleared by writing corresponding interrupt clear bit in SDMMC_ICR.

Bit 10 DBCKEND : Data block sent/received

DBCKEND is set when:

- CRC check passed and DPSM moves to the R_W state

or

- IDMAEN = 0 and transmit data transfer hold and DATACOUNT >0 and DPSM moves to Wait_S.

Interrupt flag is cleared by writing corresponding interrupt clear bit in SDMMC_ICR.

Bit 9 DHOLD : Data transfer Hold

Interrupt flag is cleared by writing corresponding interrupt clear bit in SDMMC_ICR.

Bit 8 DATAEND : Data transfer ended correctly

DATAEND is set if data counter DATACOUNT is zero and no errors occur, and no transmit data transfer hold.

Interrupt flag is cleared by writing corresponding interrupt clear bit in SDMMC_ICR.

Bit 7 CMDSENT : Command sent (no response required)

Interrupt flag is cleared by writing corresponding interrupt clear bit in SDMMC_ICR.

Bit 6 CMDREND : Command response received (CRC check passed, or no CRC)

Interrupt flag is cleared by writing corresponding interrupt clear bit in SDMMC_ICR.

Bit 5 RXOVERR : Received FIFO overrun error

Interrupt flag is cleared by writing corresponding interrupt clear bit in SDMMC_ICR.

Bit 4 TXUNDERR : Transmit FIFO underrun error

Interrupt flag is cleared by writing corresponding interrupt clear bit in SDMMC_ICR.

Bit 3 DTIMEOUT : Data timeout

Interrupt flag is cleared by writing corresponding interrupt clear bit in SDMMC_ICR.

Bit 2 CTIMEOUT : Command response timeout

Interrupt flag is cleared by writing corresponding interrupt clear bit in SDMMC_ICR.

The Command Timeout period has a fixed value of 64 SDMMC_CK clock periods.

Bit 1 DCRCFAIL : Data block sent/received (CRC check failed)

Interrupt flag is cleared by writing corresponding interrupt clear bit in SDMMC_ICR.

Bit 0 CCRCFAIL : Command response received (CRC check failed)

Interrupt flag is cleared by writing corresponding interrupt clear bit in SDMMC_ICR.

Note: FIFO interrupt flags must be masked in SDMMC_MASKR when using IDMA mode.

54.10.12 SDMMC interrupt clear register (SDMMC_ICR)

Address offset: 0x038

Reset value: 0x0000 0000

The SDMMC_ICR register is a write-only register. Writing a bit with 1 clears the corresponding bit in the SDMMC_STAR status register.

31302928272625242322212019181716
Res.Res.Res.IDMA
BTCC
IDMA
TEC
CK
STOPC
VSW
ENDC
ACK
TIME
OUTC
ACK
FAILC
SDIO
ITC
BUSY
D0
ENDC
Res.Res.Res.Res.Res.
1514131211109876543210
Res.Res.Res.Res.D
ABORT
C
DBCK
ENDC
DHOLD
C
DATA
ENDC
CMD
SENTC
CMDR
ENDC
RX
OVERR
C
TX
UNDER
RC
D
TIME
OUTC
C
TIME
OUTC
DCRC
FAILC
CCRC
FAILC
rwrwrwrwrwrwrwrwrwrwrwrw

Bits 31:29 Reserved, must be kept at reset value.

Bit 28 IDMABTCC : IDMA buffer transfer complete clear bit

Set by software to clear the IDMABTC flag.

0: IDMABTC not cleared

1: IDMABTC cleared

Bit 27 IDMATEC : IDMA transfer error clear bit

Set by software to clear the IDIMATE flag.

0: IDIMATE not cleared

1: IDIMATE cleared

Bit 26 CKSTOPC : CKSTOP flag clear bit

Set by software to clear the CKSTOP flag.

0: CKSTOP not cleared

1: CKSTOP cleared

Bit 25 VSWENDC : VSWEND flag clear bit

Set by software to clear the VSWEND flag.

0: VSWEND not cleared

1: VSWEND cleared

Bit 24 ACKTIMEOUTC : ACKTIMEOUT flag clear bit

Set by software to clear the ACKTIMEOUT flag.

0: ACKTIMEOUT not cleared

1: ACKTIMEOUT cleared

Bit 23 ACKFAILC : ACKFAIL flag clear bit

Set by software to clear the ACKFAIL flag.

0: ACKFAIL not cleared

1: ACKFAIL cleared

Bit 22 SDIOITC : SDIOIT flag clear bit

Set by software to clear the SDIOIT flag.

0: SDIOIT not cleared

1: SDIOIT cleared

Bit 21 BUSYD0ENDC : BUSYD0END flag clear bit
Set by software to clear the BUSYD0END flag.
0: BUSYD0END not cleared
1: BUSYD0END cleared

Bits 20:12 Reserved, must be kept at reset value.

Bit 11 DABORTC : DABORT flag clear bit
Set by software to clear the DABORT flag.
0: DABORT not cleared
1: DABORT cleared

Bit 10 DBCKENDC : DBCKEND flag clear bit
Set by software to clear the DBCKEND flag.
0: DBCKEND not cleared
1: DBCKEND cleared

Bit 9 DHOLDC : DHOLD flag clear bit
Set by software to clear the DHOLD flag.
0: DHOLD not cleared
1: DHOLD cleared

Bit 8 DATAENDC : DATAEND flag clear bit
Set by software to clear the DATAEND flag.
0: DATAEND not cleared
1: DATAEND cleared

Bit 7 CMDSENTC : CMDSENT flag clear bit
Set by software to clear the CMDSENT flag.
0: CMDSENT not cleared
1: CMDSENT cleared

Bit 6 CMDRENDC : CMDREND flag clear bit
Set by software to clear the CMDREND flag.
0: CMDREND not cleared
1: CMDREND cleared

Bit 5 RXOVERRC : RXOVERR flag clear bit
Set by software to clear the RXOVERR flag.
0: RXOVERR not cleared
1: RXOVERR cleared

Bit 4 TXUNDERRC : TXUNDERR flag clear bit
Set by software to clear TXUNDERR flag.
0: TXUNDERR not cleared
1: TXUNDERR cleared

Bit 3 DTIMEOUTC : DTIMEOUT flag clear bit
Set by software to clear the DTIMEOUT flag.
0: DTIMEOUT not cleared
1: DTIMEOUT cleared

Bit 2 CTIMEOUTC : CTIMEOUT flag clear bit

Set by software to clear the CTIMEOUT flag.

0: CTIMEOUT not cleared

1: CTIMEOUT cleared

Bit 1 DCRCFAILC : DCRCFAIL flag clear bit

Set by software to clear the DCRCFAIL flag.

0: DCRCFAIL not cleared

1: DCRCFAIL cleared

Bit 0 CCRCFAILC : CCRCFAIL flag clear bit

Set by software to clear the CCRCFAIL flag.

0: CCRCFAIL not cleared

1: CCRCFAIL cleared

54.10.13 SDMMC mask register (SDMMC_MASKR)

Address offset: 0x03C

Reset value: 0x0000 0000

The interrupt mask register determines which status flags generate an interrupt request by setting the corresponding bit to 1.

31302928272625242322212019181716
Res.Res.Res.IDMA
BTCIE
Res.CK
STOP
IE
VSW
ENDIE
ACK
TIME
OUTIE
ACK
FAILIE
SDIO
ITIE
BUSY
D0
ENDIE
Res.Res.TX
FIFO
EIE
RX
FIFO
FIE
Res.
rwrwrwrwrwrwrwrwrw

1514131211109876543210
RX
FIFO
HFIE
TX
FIFO
HEIE
Res.Res.DA
BORT
IE
DBCK
ENDIE
DHOLD
IE
DATA
ENDIE
CMD
SENT
IE
CMDR
ENDIE
RX
OVER
RIE
TX
UNDER
RIE
D
TIME
OUTIE
C
TIME
OUTIE
DCRC
FAILIE
CCRC
FAILIE
rwrwrwrwrwrwrwrwrwrwrwrwrwrw

Bits 31:29 Reserved, must be kept at reset value.

Bit 28 IDMABTCIE : IDMA buffer transfer complete interrupt enable

Set and cleared by software to enable/disable the interrupt generated when the IDMA has transferred all data belonging to a memory buffer.

0: IDMA buffer transfer complete interrupt disabled

1: IDMA buffer transfer complete interrupt enabled

Bit 27 Reserved, must be kept at reset value.

Bit 26 CKSTOPPIE : Voltage Switch clock stopped interrupt enable

Set and cleared by software to enable/disable interrupt caused by Voltage Switch clock stopped.

0: Voltage Switch clock stopped interrupt disabled

1: Voltage Switch clock stopped interrupt enabled

Bit 25 VSWENDIE : Voltage switch critical timing section completion interrupt enable

Set and cleared by software to enable/disable the interrupt generated when voltage switch critical timing section completion.

0: Voltage switch critical timing section completion interrupt disabled

1: Voltage switch critical timing section completion interrupt enabled

  1. Bit 24 ACKTIMEOUTIE : Acknowledgment timeout interrupt enable
    Set and cleared by software to enable/disable interrupt caused by acknowledgment timeout.
    0: Acknowledgment timeout interrupt disabled
    1: Acknowledgment timeout interrupt enabled
  2. Bit 23 ACKFAILIE : Acknowledgment Fail interrupt enable
    Set and cleared by software to enable/disable interrupt caused by acknowledgment Fail.
    0: Acknowledgment Fail interrupt disabled
    1: Acknowledgment Fail interrupt enabled
  3. Bit 22 SDIOITIE : SDIO mode interrupt received interrupt enable
    Set and cleared by software to enable/disable the interrupt generated when receiving the SDIO mode interrupt.
    0: SDIO Mode interrupt received interrupt disabled
    1: SDIO Mode interrupt received interrupt enabled
  4. Bit 21 BUSYD0ENDIE : BUSYD0END interrupt enable
    Set and cleared by software to enable/disable the interrupt generated when SDMMC_D0 signal changes from busy to NOT busy following a CMD response.
    0: BUSYD0END interrupt disabled
    1: BUSYD0END interrupt enabled
  5. Bits 20:19 Reserved, must be kept at reset value.
  6. Bit 18 TXFIFOEIE : Tx FIFO empty interrupt enable
    Set and cleared by software to enable/disable interrupt caused by Tx FIFO empty.
    0: Tx FIFO empty interrupt disabled
    1: Tx FIFO empty interrupt enabled
  7. Bit 17 RXFIFOFIE : Rx FIFO full interrupt enable
    Set and cleared by software to enable/disable interrupt caused by Rx FIFO full.
    0: Rx FIFO full interrupt disabled
    1: Rx FIFO full interrupt enabled
  8. Bit 16 Reserved, must be kept at reset value.
  9. Bit 15 RXFIFOHIE : Rx FIFO half full interrupt enable
    Set and cleared by software to enable/disable interrupt caused by Rx FIFO half full.
    0: Rx FIFO half full interrupt disabled
    1: Rx FIFO half full interrupt enabled
  10. Bit 14 TXFIFOHEIE : Tx FIFO half empty interrupt enable
    Set and cleared by software to enable/disable interrupt caused by Tx FIFO half empty.
    0: Tx FIFO half empty interrupt disabled
    1: Tx FIFO half empty interrupt enabled
  11. Bits 13:12 Reserved, must be kept at reset value.
  12. Bit 11 DABORTIE : Data transfer aborted interrupt enable
    Set and cleared by software to enable/disable interrupt caused by a data transfer being aborted.
    0: Data transfer abort interrupt disabled
    1: Data transfer abort interrupt enabled
  13. Bit 10 DBCKENDIE : Data block end interrupt enable
    Set and cleared by software to enable/disable interrupt caused by data block end.
    0: Data block end interrupt disabled
    1: Data block end interrupt enabled

Bit 9 DHOLDIE : Data hold interrupt enable

Set and cleared by software to enable/disable the interrupt generated when sending new data is hold in the DPSM Wait_S state.

0: Data hold interrupt disabled

1: Data hold interrupt enabled

Bit 8 DATAENDIE : Data end interrupt enable

Set and cleared by software to enable/disable interrupt caused by data end.

0: Data end interrupt disabled

1: Data end interrupt enabled

Bit 7 CMDSENTIE : Command sent interrupt enable

Set and cleared by software to enable/disable interrupt caused by sending command.

0: Command sent interrupt disabled

1: Command sent interrupt enabled

Bit 6 CMDRENDIE : Command response received interrupt enable

Set and cleared by software to enable/disable interrupt caused by receiving command response.

0: Command response received interrupt disabled

1: command Response received interrupt enabled

Bit 5 RXOVERRIE : Rx FIFO overrun error interrupt enable

Set and cleared by software to enable/disable interrupt caused by Rx FIFO overrun error.

0: Rx FIFO overrun error interrupt disabled

1: Rx FIFO overrun error interrupt enabled

Bit 4 TXUNDERRIE : Tx FIFO underrun error interrupt enable

Set and cleared by software to enable/disable interrupt caused by Tx FIFO underrun error.

0: Tx FIFO underrun error interrupt disabled

1: Tx FIFO underrun error interrupt enabled

Bit 3 DTIMEOUTIE : Data timeout interrupt enable

Set and cleared by software to enable/disable interrupt caused by data timeout.

0: Data timeout interrupt disabled

1: Data timeout interrupt enabled

Bit 2 CTIMEOUTIE : Command timeout interrupt enable

Set and cleared by software to enable/disable interrupt caused by command timeout.

0: Command timeout interrupt disabled

1: Command timeout interrupt enabled

Bit 1 DCRCFAILIE : Data CRC fail interrupt enable

Set and cleared by software to enable/disable interrupt caused by data CRC failure.

0: Data CRC fail interrupt disabled

1: Data CRC fail interrupt enabled

Bit 0 CCRCFAILIE : Command CRC fail interrupt enable

Set and cleared by software to enable/disable interrupt caused by command CRC failure.

0: Command CRC fail interrupt disabled

1: Command CRC fail interrupt enabled

54.10.14 SDMMC acknowledgment timer register (SDMMC_ACKTIMER)

Address offset: 0x040

Reset value: 0x0000 0000

The SDMMC_ACKTIMER register contains the acknowledgment timeout period, in SDMMC_CK bus clock periods.

A counter loads the value from the SDMMC_ACKTIMER register, and starts decrementing when the data path state machine (DPSM) enters the Wait_Ack state. If the timer reaches 0 while the DPSM is in this states, the acknowledgment timeout status flag is set.

31302928272625242322212019181716
Res.Res.Res.Res.Res.Res.Res.ACKTIME[24:16]
rwrwrwrwrwrwrwrwrw
1514131211109876543210
ACKTIME[15:0]
rwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrw

Bits 31:25 Reserved, must be kept at reset value.

Bits 24:0 ACKTIME[24:0] : Boot acknowledgment timeout period

This bit can only be written by firmware when CPSM is disabled (CPSMEN = 0).
Boot acknowledgment timeout period expressed in card bus clock periods.

Note: The data transfer must be written to the acknowledgment timer register before being written to the data control register.

54.10.15 SDMMC data FIFO registers x (SDMMC_FIFORx)

Address offset: 0x080 + 0x004 * x, (x = 0 to 15)

Reset value: 0x0000 0000

The receive and transmit FIFOs can be only read or written as word (32-bit) wide registers. The FIFOs contain 16 entries on sequential addresses. This allows the CPU to use its load and store multiple operands to read from/write to the FIFO. The FIFO register interface takes care of correct data alignment inside the FIFO, the FIFO register address used by the CPU does matter.

When accessing SDMMC_FIFOR with half word or byte access an AHB bus fault is generated.

31302928272625242322212019181716
FIFODATA[31:16]
rwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrw
1514131211109876543210
FIFODATA[15:0]
rwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrw

Bits 31:0 FIFODATA[31:0] : Receive and transmit FIFO data

This register can only be read or written by firmware when the DPSM is active (DPSMACT = 1).

The FIFO data occupies 16 entries of 32-bit words.

54.10.16 SDMMC DMA control register (SDMMC_IDMACTLR)

Address offset: 0x050

Reset value: 0x0000 0000

The receive and transmit FIFOs can be read or written as 32-bit wide registers. The FIFOs contain 32 entries on 32 sequential addresses. This allows the CPU to use its load and store multiple operands to read from/write to the FIFO.

31302928272625242322212019181716
Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.
1514131211109876543210
Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.IDMABACTIDMABMODEIDMAEN
rwrwrw

Bits 31:3 Reserved, must be kept at reset value.

Bit 2 IDMABACT : Double buffer mode active buffer indication

This bit can only be written by firmware when DPSM is inactive (DPSMACT = 0). When IDMA is enabled this bit is toggled by hardware.

0: When IDMA is enabled, uses buffer0 and firmware write access to IDMABASE0 is prohibited.

1: When IDMA is enabled, uses buffer1 and firmware write access to IDMABASE1 is prohibited.

Bit 1 IDMABMODE : Buffer mode selection

This bit can only be written by firmware when DPSM is inactive (DPSMACT = 0).

0: Single buffer mode.

1: Double buffer mode.

Bit 0 IDMAEN : IDMA enable

This bit can only be written by firmware when DPSM is inactive (DPSMACT = 0).

0: IDMA disabled

1: IDMA enabled

54.10.17 SDMMC IDMA buffer size register (SDMMC_IDMABSIZER)

Address offset: 0x054

Reset value: 0x0000 0000

The SDMMC_IDMABSIZER register contains the buffers size when in double buffer configuration.

31302928272625242322212019181716
Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.
1514131211109876543210
Res.Res.Res.IDMABNDT[7:0]Res.Res.Res.Res.Res.
rwrwrwrwrwrwrwrw

Bits 31:13 Reserved, must be kept at reset value.

Bits 12:5 IDMABNDT[7:0] : Number of bytes per buffer

This 8-bit value must be multiplied by 8 to get the size of the buffer in 32-bit words and by 32 to get the size of the buffer in bytes.

Example: IDMABNDT = 0x01: buffer size = 8 words = 32 bytes.

Example: IDMABNDT = 0x80: buffer size = 1024 words = 4 Kbyte

These bits can only be written by firmware when DPSM is inactive (DPSMACT = 0).

Bits 4:0 Reserved, must be kept at reset value.

54.10.18 SDMMC IDMA buffer 0 base address register (SDMMC_IDMABASE0R)

Address offset: 0x058

Reset value: 0x0000 0000

The SDMMC_IDMABASE0R register contains the memory buffer base address in single buffer configuration and the buffer 0 base address in double buffer configuration.

31302928272625242322212019181716
IDMABASE0[31:16]
rwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrw
1514131211109876543210
IDMABASE0[15:0]
rwrwrwrwrwrwrwrwrwrwrwrwrwrwrr

Bits 31:0 IDMABASE0[31:0] : Buffer 0 memory base address bits [31:2], must be word aligned (bit [1:0] are always 0 and read only)

This register can be written by firmware when DPSM is inactive (DPSMACT = 0), and can dynamically be written by firmware when DPSM active (DPSMACT = 1) and memory buffer 0 is inactive (IDMABACT = '1').

54.10.19 SDMMC IDMA buffer 1 base address register (SDMMC_IDMABASE1R)

Address offset: 0x05C

Reset value: 0x0000 0000

The SDMMC_IDMABASE1R register contains the double buffer configuration second buffer memory base address.

31302928272625242322212019181716
IDMABASE1[31:16]
rwrwrwrwrwrwrwrwrwrwrwrwrwrwrwrw
1514131211109876543210
IDMABASE1[15:0]
rwrwrwrwrwrwrwrwrwrwrwrwrwrwrr

Bits 31:0 IDMABASE1[31:0] : Buffer 1 memory base address, must be word aligned (bit [1:0] are always 0 and read only)

This register can be written by firmware when DPSM is inactive (DPSMACT = 0), and can dynamically be written by firmware when DPSM active (DPSMACT = 1) and memory buffer 1 is inactive (IDMABACT = '0').

54.10.20 SDMMC register map

The following table summarizes the SDMMC registers.

Table 411. SDMMC register map

OffsetRegister name313029282726252423222120191817161514131211109876543210
0x000SDMMC_POWERRes.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.DIRPOLVSWITCHENVSWITCHPWRCTRL[1:0]
Reset value00000
0x004SDMMC_CLKCRRes.Res.Res.Res.Res.Res.Res.Res.Res.SELCLKRX[1:0]BUSSPEEDDDRHWFC_ENNEGEDGEWIDBUS[1:0]Res.PWRSAVRes.Res.CLKDIV[9:0]
Reset value0000000000000000000
0x008SDMMC_ARGRCMDARG[31:0]
Reset value00000000000000000000000000000000
0x00CSDMMC_CMDRRes.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.CMDSUSPENDBOOTENBOOTMODEDTHOLDCPSMENWAITPENDWAITINTWAITRESP[1:0]CMDSTOPCMDTRANSCMDINDEX[5:0]
Reset value00000000000000000
0x010SDMMC_RESPCMDRRes.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.RESPCMD[5:0]
Reset value000000
0x014SDMMC_RESP1RCARDSTATUS1[31:0]
Reset value00000000000000000000000000000000
0x018SDMMC_RESP2RCARDSTATUS2[31:0]
Reset value00000000000000000000000000000000
0x01CSDMMC_RESP3RCARDSTATUS3[31:0]
Reset value00000000000000000000000000000000
0x020SDMMC_RESP4RCARDSTATUS4[31:0]
Reset value00000000000000000000000000000000
0x024SDMMC_DTIMERDATATIME[31:0]
Reset value00000000000000000000000000000000
0x028SDMMC_DLENRRes.Res.Res.Res.Res.Res.Res.DATALENGTH[24:0]
Reset value000000000000000000000000
Table 411. SDMMC register map (continued)
OffsetRegister name313029282726252423222120191817161514131211109876543210
0x02CSDMMC_DCTRLRRes.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.FIFORSTBOOTACKENSDIOENRWMODRWSTOPRWSTARTDBLOCK SIZE[3:0]DTMODE[1:0]DTDIRDTEN
Reset value00000000000000
0x030SDMMC_DCNTRRes.Res.Res.Res.Res.Res.Res.DATACOUNT[24:0]
Reset value0000000000000000000000000
0x034SDMMC_STARRes.Res.Res.IDMABTCIDMATECKSTOPVSWENDACKTIMEOUTACKFAILSDIOITBUSYD0ENDBUSYD0RXFIFOETXFIFOERXFIFOFTXFIFOFRXFIFOHFTXFIFOHECPSMACTDPSMACTDABORTDBCKENDDHOLDDATAENDCMDSENTCMDRENDRXOVERRTXUNDERRDTIMEOUTCTIMEOUTDCRCFAILCCRCFAIL
Reset value00000000000000000000000000000
0x038SDMMC_ICRRes.Res.Res.IDMABTCIDMATECKSTOPVSWENDACKTIMEOUTACKFAILSDIOITBUSYD0ENDRes.Res.Res.Res.Res.Res.Res.Res.Res.DABORTCDBCKENDCDHOLDCDATAENDCCMDSENTCCMDRENDCRXOVERRCTXUNDERRCDTIMEOUTCCTIMEOUTCDCRCFAILCCCRCFAILC
Reset value00000000000000000000
0x03CSDMMC_MASKRRes.Res.Res.IDMABTCIEIDMATEIECKSTOPIEVSWENDIEACKTIMEOUTIEACKFAILIESDIOITIEBUSYD0ENDIERes.Res.TXFIFOEIERXFIFOFIERes.RXFIFOHFIETXFIFOHEIERes.Res.DABORTIEDBCKENDIEDHOLDIEDATAENDIECMDSENTIECMDRENDIERXOVERRIETXUNDERRIEDTIMEOUTIECTIMEOUTIEDCRCFAILIECCRCFAILIE
Reset value00000000000000000000000
0x040SDMMC_ACKTIMERRes.Res.Res.Res.Res.Res.Res.ACKTIME[24:0]
Reset value0000000000000000000000000
0x044 - 0x04CReservedRes.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.
0x050SDMMC_IDMACTLRRes.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.IDMABACTIDMABMODEIDMAEN
Reset value000
0x054SDMMC_IDMABSIZERRes.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.IDMABNDT[7:0]Res.Res.Res.Res.Res.
Reset value00000000
0x058SDMMC_IDMABASE0RIDMABASE0[31:0]
Reset value00000000000000000000000000000000
0x05CSDMMC_IDMABASE1RIDMABASE1[31:0]
Reset value00000000000000000000000000000000
0x060 - 0x07CReservedRes.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.
0x080 + 0x04 * x, (x=0..15)SDMMC_FIFORFIFODATA[31:0]
Reset value00000000000000000000000000000000

Refer to Section 2.2 on page 93 for the register boundary addresses.