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

48.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.

48.2 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.

Timing diagram for SDMMC 'no response' and 'no data' operations. It shows two command transmissions on the SDMMC_CMD line. The first command is followed by a period labeled 'Operation no response and no data' where no response or data is received. The second command is followed by a 'Response' block on the SDMMC_D line, labeled 'Operation response no data'. A legend indicates white boxes are 'From host to card' and blue boxes are 'From card to host'. MSV40124V1 is noted in the bottom right.

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

SDMMC_CMD: [CMD] ————— [CMD] [Response]
SDMMC_D: ————— [Response]
Operation no response and no data    Operation response no data
□ From host to card
■ From card to host
MSV40124V1

Timing diagram for SDMMC 'no response' and 'no data' operations. It shows two command transmissions on the SDMMC_CMD line. The first command is followed by a period labeled 'Operation no response and no data' where no response or data is received. The second command is followed by a 'Response' block on the SDMMC_D line, labeled 'Operation response no data'. A legend indicates white boxes are 'From host to card' and blue boxes are 'From card to host'. MSV40124V1 is noted in the bottom right.
Timing diagram for SDMMC (multiple) block read operation. A command is sent on SDMMC_CMD, followed by a response. Then, multiple data blocks (each with a CRC) are received on the SDMMC_D line, labeled 'Block read operation' and 'Multiple block read operation'. A 'Data stop operation' is shown at the end, consisting of a command and response on the SDMMC_CMD line. A legend indicates white boxes are 'From host to card' and blue boxes are 'From card to host'. MSV40155V1 is noted in the bottom right.

Figure 511. SDMMC (multiple) block read operation

SDMMC_CMD: [CMD] [Response] ————— [CMD] [Response]
SDMMC_D: — [Data block] [CRC] [Data block] [CRC] [Data block] [CRC]
Block read operation
Multiple block read operation
Data stop operation
□ From host to card
■ From card to host
MSV40155V1

Timing diagram for SDMMC (multiple) block read operation. A command is sent on SDMMC_CMD, followed by a response. Then, multiple data blocks (each with a CRC) are received on the SDMMC_D line, labeled 'Block read operation' and 'Multiple block read operation'. A 'Data stop operation' is shown at the end, consisting of a command and response on the SDMMC_CMD line. A legend indicates white boxes are 'From host to card' and blue boxes are 'From card to host'. MSV40155V1 is noted in the bottom right.

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

Timing diagram for SDMMC (multiple) block write operation. A command is sent on SDMMC_CMD, followed by a response. Then, multiple data blocks (each with a CRC) are sent on the SDMMC_D line, followed by a 'CRC status' and a 'Busy' signal. This sequence is labeled 'Block write operation' and 'Multiple block write operation'. A 'Data stop operation' is shown at the end, consisting of a command and response on the SDMMC_CMD line. A legend indicates white boxes are 'From host to card' and blue boxes are 'From card to host'. MSV40156V1 is noted in the bottom right.

Figure 512. SDMMC (multiple) block write operation

SDMMC_CMD: [CMD] [Response] ————— [CMD] [Response]
SDMMC_D: — [Data block] [CRC] [CRC status] [Busy] [Data block] [CRC] [CRC status] [Busy]
Block write operation
Multiple block write operation
Data stop operation
□ From host to card
■ From card to host
MSV40156V1

Timing diagram for SDMMC (multiple) block write operation. A command is sent on SDMMC_CMD, followed by a response. Then, multiple data blocks (each with a CRC) are sent on the SDMMC_D line, followed by a 'CRC status' and a 'Busy' signal. This sequence is labeled 'Block write operation' and 'Multiple block write operation'. A 'Data stop operation' is shown at the end, consisting of a command and response on the SDMMC_CMD line. A legend indicates white boxes are 'From host to card' and blue boxes are 'From card to host'. MSV40156V1 is noted in the bottom right.

Note: The Stop Transmission command is not required at the end of an e•MMC multiple block write with predefined block count.
The SDMMC does not send any data as long as the Busy signal is asserted (SDMMC_D0 pulled low).

Figure 513. SDMMC (sequential) stream read operation

Timing diagram for SDMMC (sequential) stream read operation. The diagram shows two signal lines: SDMMC_CMD and SDMMC_D. On the SDMMC_CMD line, a white box labeled 'CMD' is followed by a blue box labeled 'Response'. This sequence is repeated. On the SDMMC_D line, a long blue bar labeled 'Data stream' is shown. A horizontal double-headed arrow labeled 'Stream read operation' spans from the start of the first CMD to the start of the second CMD. Another horizontal double-headed arrow labeled 'Data stop operation' spans from the start of the second CMD to the end of the second Response. A legend at the bottom left shows a white box for 'From host to card' and a blue box for 'From card to host'. The diagram is labeled MSv40157V2 in the bottom right corner.
Timing diagram for SDMMC (sequential) stream read operation. The diagram shows two signal lines: SDMMC_CMD and SDMMC_D. On the SDMMC_CMD line, a white box labeled 'CMD' is followed by a blue box labeled 'Response'. This sequence is repeated. On the SDMMC_D line, a long blue bar labeled 'Data stream' is shown. A horizontal double-headed arrow labeled 'Stream read operation' spans from the start of the first CMD to the start of the second CMD. Another horizontal double-headed arrow labeled 'Data stop operation' spans from the start of the second CMD to the end of the second Response. A legend at the bottom left shows a white box for 'From host to card' and a blue box for 'From card to host'. The diagram is labeled MSv40157V2 in the bottom right corner.

Figure 514. SDMMC (sequential) stream write operation

Timing diagram for SDMMC (sequential) stream write operation. The diagram shows two signal lines: SDMMC_CMD and SDMMC_D. On the SDMMC_CMD line, a white box labeled 'CMD' is followed by a blue box labeled 'Response'. This sequence is repeated. On the SDMMC_D line, a long white bar labeled 'Data stream' is shown. A horizontal double-headed arrow labeled 'Stream write operation' spans from the start of the first CMD to the start of the second CMD. Another horizontal double-headed arrow labeled 'Data stop operation' spans from the start of the second CMD to the end of the second Response. After the second CMD, a blue box labeled 'Busy' appears on the SDMMC_D line. A legend at the bottom left shows a white box for 'From host to card' and a blue box for 'From card to host'. The diagram is labeled MSv40158V2 in the bottom right corner.
Timing diagram for SDMMC (sequential) stream write operation. The diagram shows two signal lines: SDMMC_CMD and SDMMC_D. On the SDMMC_CMD line, a white box labeled 'CMD' is followed by a blue box labeled 'Response'. This sequence is repeated. On the SDMMC_D line, a long white bar labeled 'Data stream' is shown. A horizontal double-headed arrow labeled 'Stream write operation' spans from the start of the first CMD to the start of the second CMD. Another horizontal double-headed arrow labeled 'Data stop operation' spans from the start of the second CMD to the end of the second Response. After the second CMD, a blue box labeled 'Busy' appears on the SDMMC_D line. A legend at the bottom left shows a white box for 'From host to card' and a blue box for 'From card to host'. The diagram is labeled MSv40158V2 in the bottom right corner.

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).

48.3 SDMMC operation modes

Table 383. SDMMC operation modes SD and 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 4-bit bus width.
  4. 4. Maximum frequency depending on maximum allowed I/O speed.

Table 384. 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] (5)
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 8-bit bus width.
  4. 4. Maximum frequency depending on maximum allowed I/O speed.
  5. 5. Supported signal voltage level depends on I/O port characteristics, refer to device datasheet.

48.4 SDMMC functional description

The SDMMC consists of three parts:

48.4.1 SDMMC block diagram

Figure 515 shows the SDMMC block diagram.

Figure 515. SDMMC block diagram

SDMMC block diagram showing internal components and external connections.

The block diagram illustrates the internal architecture of the SDMMC. On the left, the '32-bit AHB slave bus' connects to the 'Registers' and 'FIFO' within the 'AHB INTERFACE'. The 'sdmmc_hclk' and 'sdmmc_it' signals are also connected here. Below the AHB interface, the '32-bit AHB master bus' connects to the 'IDMA' block. The 'sdmmc_ker_ck' signal is input to the 'SDMMC ADAPTER' block. The 'SDMMC ADAPTER' contains a 'Control unit', 'Data transmit path', 'Command path', 'Data receive path', and 'Response path'. These paths connect to the 'Registers', 'FIFO', and 'IDMA'. A 'CLK MUX' block is also present in the adapter. On the right, the 'SDMMC_D0DIR', 'SDMMC_D123DIR', 'SDMMC_CDIR', and 'SDMMC_CK' pins are connected to the adapter. The 'sdmmc_io_in_ck' signal is input to the 'CLK MUX'. The 'SDMMC_CKIN' signal is input to the 'CLK MUX'. The 'SDMMC_D[7:0]' pins are connected to the 'Data receive path'. The 'SDMMC_CMD' pin is connected to the 'Command path'. The diagram is labeled 'MSv41696V4' in the bottom right corner.

SDMMC block diagram showing internal components and external connections.

48.4.2 SDMMC pins and internal signals

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

Table 385. 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 386. SDMMC pins

Pin namePin 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.
SDMMC_D[7:0]Digital input/outputSD/SDIO/e•MMC card bidirectional data lines.
SDMMC_D0DIRDigital outputSD/SDIO/e•MMC card I/O direction indication for the SDMMC_D0 data line.
SDMMC_D123DIRDigital outputSD/SDIO/e•MMC card I/O direction indication for the data lines SDMMC_D[3:1].

48.4.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 516. SDMMC Command and data phase relation

Timing diagram showing the phase relation between SDMMC_CMD, SDMMC_Dn, SDMMC_CK, and sdmmc_ker_ck signals for various CLKDIV, DDR, and NEGEDGE settings. The diagram shows five cases: 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 signals are shown as waveforms over time, with vertical dashed lines indicating clock edges and data transitions.
Timing diagram showing the phase relation between SDMMC_CMD, SDMMC_Dn, SDMMC_CK, and sdmmc_ker_ck signals for various CLKDIV, DDR, and NEGEDGE settings. The diagram shows five cases: 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 signals are shown as waveforms over time, with vertical dashed lines indicating clock edges and data transitions.

Table 387. SDMMC Command and data phase selection

CLKDIVDDRNEGEDGESDMMC_CKCommand outData out
0xx= sdmmc_ker_ckGenerated on sdmmc_ker_ck falling edge
>000Generated on sdmmc_ker_ck rising edgeGenerated 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.

48.4.4 SDMMC adapter

The SDMMC adapter (see Figure 515: 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 517 , contains the power management functions, the SDMMC_CK clock management with divider, and the I/O direction management.

Figure 517. Control unit

Figure 517. Control unit block diagram. The diagram shows a 'Control unit' containing three subunits: 'Registers', 'Clock management', and 'Power management'. 'Registers' are connected to the 'Control unit' and 'Clock management'. 'sdmmc_ker_ck' is an input to 'Clock management'. 'Clock management' outputs 'SDMMC_CK' and is connected to 'To command/response and data paths'. 'Power management' is connected to 'Control unit', 'Clock management', and 'To command/response and data paths'. 'IO management' is connected to 'Control unit', 'Power management', and 'To command/response and data paths'. 'IO management' outputs 'SDMMC_D0DIR', 'SDMMC_D123DIR', 'SDMMC_CDIR', and 'SDMMC_CK'. The diagram is labeled MSV39278V2.
Figure 517. Control unit block diagram. The diagram shows a 'Control unit' containing three subunits: 'Registers', 'Clock management', and 'Power management'. 'Registers' are connected to the 'Control unit' and 'Clock management'. 'sdmmc_ker_ck' is an input to 'Clock management'. 'Clock management' outputs 'SDMMC_CK' and is connected to 'To command/response and data paths'. 'Power management' is connected to 'Control unit', 'Clock management', and 'To command/response and data paths'. 'IO management' is connected to 'Control unit', 'Power management', and 'To command/response and data paths'. 'IO management' outputs 'SDMMC_D0DIR', 'SDMMC_D123DIR', 'SDMMC_CDIR', and 'SDMMC_CK'. The diagram is labeled MSV39278V2.

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 flow control, for example.

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 518. Command/response path

Figure 518. Command/response path diagram showing the internal components and signal flow of the SDMMC interface.

The diagram illustrates the internal architecture of the Command/Response path within the SDMMC interface. A central grey box labeled 'Command / Response path' contains several functional blocks: 'Status flag', 'Command timer', and 'Control logic' at the top; 'Response shift register' and 'CRC' in the middle; and 'Command shift register' and 'CRC' at the bottom. External connections include 'Registers', 'Response registers', and 'Command registers' on the left, which interface with the internal blocks. On the right, external pins are labeled 'SDMMC_CMD' (connected to the top CRC block via an 'in' line), 'sdmmc_rx_ck' (connected to the top CRC block), and 'SDMMC_CK' (connected to the bottom CRC block). An arrow at the top points 'To control unit'.

Figure 518. Command/response path diagram showing the internal components and signal flow of the SDMMC interface.

Command/response path state machine (CPSM):

When ever the CPSM is active (not in the Idle state), the CPSMACT bit is set.

Figure 519. Command path state machine (CPSM)

Figure 519. 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 519. 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, for example, 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.

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 388 .

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

Table 388. 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 389 , Table 390 and Table 391 .

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 five 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 389. 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 390. 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 391. 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 516 .

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 can send a number of specific commands to handle various operating modes when CPSMEN is set, see Table 392 .

Table 392. 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 393 :

Table 393. 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 394 :

Table 394. 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 520 shows the data path block diagram.

Figure 520. Data path

Figure 520. Data path block diagram showing internal components and external connections for the SDMMC interface.

The diagram illustrates the internal data path of the SDMMC interface. A central 'Data path' block contains 'Status flag', 'Data timer', and 'Control logic' which are connected to a 'To control unit' output. Below this, the 'Registers' and 'FIFO' are connected to a 'Data path' block. The 'Data path' block contains 'Odd receive shift register', 'Even receive shift register', 'Odd CRC', and 'Even CRC' blocks. The 'Odd CRC' and 'Even CRC' blocks are connected to the 'SDMMC_D[7:0]' input line. The 'Odd receive shift register' and 'Even receive shift register' are connected to the 'FIFO' and the 'Data path' block. The 'Data path' block also contains 'Odd transmit shift register', 'Even transmit shift register', 'Odd CRC', and 'Even CRC' blocks. The 'Odd transmit shift register' and 'Even transmit shift register' are connected to the 'FIFO' and the 'Data path' block. The 'Odd CRC' and 'Even CRC' blocks are connected to a 'Mux' block, which outputs to the 'SDMMC_D[7:0]' output line. The 'sdmmc_rx_ck' and 'SDMMC_CK' lines are also shown.

Figure 520. Data path block diagram showing internal components and external connections for the SDMMC interface.

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 521 and Figure 522:

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

Figure 521. DDR mode data packet clocking

Figure 521: DDR mode data packet clocking diagram. It shows the SDMMC_CK clock as a square wave. Below it are four data lines: SDMMC_D3, SDMMC_D2, SDMMC_D1, and SDMMC_D0. Each data line starts with a '0 start' bit. Then, data bytes are transferred: Byte 1 (odd) and Byte 2 (even), Byte 3 (odd) and Byte 4 (even), up to Byte n-1 (odd) and Byte n (even). Each byte is shown as a sequence of bits (e.g., b7, b3 for D3). Following the data bytes is the CRC section, containing 'CRC odd' and 'CRC even' bits. The sequence ends with a '1 end' bit. A color-coded legend indicates: Data odd (pink), Data even (light blue), CRC odd (yellow), and CRC even (green). Brackets indicate 'Block length' for the data bytes and 'CRC' for the CRC section. Label: MSV40163V2.
Figure 521: DDR mode data packet clocking diagram. It shows the SDMMC_CK clock as a square wave. Below it are four data lines: SDMMC_D3, SDMMC_D2, SDMMC_D1, and SDMMC_D0. Each data line starts with a '0 start' bit. Then, data bytes are transferred: Byte 1 (odd) and Byte 2 (even), Byte 3 (odd) and Byte 4 (even), up to Byte n-1 (odd) and Byte n (even). Each byte is shown as a sequence of bits (e.g., b7, b3 for D3). Following the data bytes is the CRC section, containing 'CRC odd' and 'CRC even' bits. The sequence ends with a '1 end' bit. A color-coded legend indicates: Data odd (pink), Data even (light blue), CRC odd (yellow), and CRC even (green). Brackets indicate 'Block length' for the data bytes and 'CRC' for the CRC section. Label: MSV40163V2.

Figure 522. DDR mode CRC status / boot acknowledgment clocking

Figure 522: DDR mode CRC status / boot acknowledgment clocking diagram. It shows the SDMMC_CK clock line and the SDMMC_D0 data line. The clock is a square wave. The SDMMC_D0 line shows a '0 start' bit aligned with a rising edge, followed by a multi-cycle period labeled 'CRC status / boot ack', and ends with a '1 end' bit aligned with a rising edge. Label: MSV40164V1.
Figure 522: DDR mode CRC status / boot acknowledgment clocking diagram. It shows the SDMMC_CK clock line and the SDMMC_D0 data line. The clock is a square wave. The SDMMC_D0 line shows a '0 start' bit aligned with a rising edge, followed by a multi-cycle period labeled 'CRC status / boot ack', and ends with a '1 end' bit aligned with a rising edge. Label: 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 523. When ever the DPSM is active (not in the Idle state), the DPSMACT bit is set.

Figure 523. Data path state machine (DPSM)

Figure 523. Data path state machine (DPSM) state transition diagram. The diagram shows five states: Idle, Busy, Wait_S, Send, and Receive, plus a sub-state R_W. Transitions are triggered by various conditions including CPSM signals, data direction bits (DTDIR), data count (DATACOUNT), and FIFO status. Idle is the initial state. Transitions from Idle lead to Busy (if busy), Wait_S (if DTDIR=0 and not busy), Wait_Ack (if DTDIR=1, BOOTACKEN=1, and DTEN=1), or Wait_R (if DTDIR=1, BOOTACKEN=0, and DTEN=1). Transitions from Busy lead to Idle (if not busy and CRC OK) or Send (if end of packet or data count 0). Transitions from Wait_S lead to Idle (if end of data or data count 0) or Send (if TXFIFOE=0 and DTHOLD=0). Transitions from Send lead to Idle (if end of packet or data count 0) or Wait_S (if TXFIFOE=not 0 and DTHOLD=0). Transitions from Receive lead to Idle (if CPSM Abort and FIFO empty) or Wait_R (if data count not 0 and start bit detected). Transitions from Wait_R lead to Idle (if data count 0 or DTHOLD=1 and FIFO empty) or R_W (if end of packet and data count not 0 and RWSTART=1). Transitions from R_W lead to Idle (if CPSM Abort and FIFO empty) or Wait_R (if RWSTOP=1).
Figure 523. Data path state machine (DPSM) state transition diagram. The diagram shows five states: Idle, Busy, Wait_S, Send, and Receive, plus a sub-state R_W. Transitions are triggered by various conditions including CPSM signals, data direction bits (DTDIR), data count (DATACOUNT), and FIFO status. Idle is the initial state. Transitions from Idle lead to Busy (if busy), Wait_S (if DTDIR=0 and not busy), Wait_Ack (if DTDIR=1, BOOTACKEN=1, and DTEN=1), or Wait_R (if DTDIR=1, BOOTACKEN=0, and DTEN=1). Transitions from Busy lead to Idle (if not busy and CRC OK) or Send (if end of packet or data count 0). Transitions from Wait_S lead to Idle (if end of data or data count 0) or Send (if TXFIFOE=0 and DTHOLD=0). Transitions from Send lead to Idle (if end of packet or data count 0) or Wait_S (if TXFIFOE=not 0 and DTHOLD=0). Transitions from Receive lead to Idle (if CPSM Abort and FIFO empty) or Wait_R (if data count not 0 and start bit detected). Transitions from Wait_R lead to Idle (if data count 0 or DTHOLD=1 and FIFO empty) or R_W (if end of packet and data count not 0 and RWSTART=1). Transitions from R_W lead to Idle (if CPSM Abort and FIFO empty) or Wait_R (if RWSTOP=1).

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 395. 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 396 :

Table 396. 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 396. 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 397 :

Table 397. 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 398 .

Table 398. 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 399 .

Table 399. 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, read data from the FIFO until FIFO is empty (DATAEND = 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 400 .

Table 400. 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 524. CLKMUX unit

Figure 524. 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 524. 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.

48.4.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.

48.4.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 an 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, DCRFAIL, DTIMEOUT, DABORT, DHOLD, or DATAEND).

48.4.7 AHB and SDMMC_CK clock relation

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

Table 401. 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

48.5 Card functional description

48.5.1 SD I/O mode

The following features are SDMMC specific operations:

Table 402. 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 402 .

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 525. Asynchronous interrupt generation

Timing diagram for asynchronous interrupt generation. It shows the SDMMC_CK clock signal, SDMMC_CMD signal with a 'Data block Command', and data lines SDMMC_D0, SDMMC_D1, SDMMC_D2, and SDMMC_D3. The diagram illustrates the 'Synchronous INT' and 'Asynchronous INT' periods. The 'Synchronous INT' period starts 2 CK cycles after the end of the data block and lasts for 4 CK cycles. The 'Asynchronous INT' period starts at the end of the command and ends at the next clock edge after the end of the data block. The 'Interrupt period' is the duration from the start of the synchronous interrupt to the start of the asynchronous interrupt. The diagram is labeled MSV40191V3.
Timing diagram for asynchronous interrupt generation. It shows the SDMMC_CK clock signal, SDMMC_CMD signal with a 'Data block Command', and data lines SDMMC_D0, SDMMC_D1, SDMMC_D2, and SDMMC_D3. The diagram illustrates the 'Synchronous INT' and 'Asynchronous INT' periods. The 'Synchronous INT' period starts 2 CK cycles after the end of the data block and lasts for 4 CK cycles. The 'Asynchronous INT' period starts at the end of the command and ends at the next clock edge after the end of the data block. The 'Interrupt period' is the duration from the start of the synchronous interrupt to the start of the asynchronous interrupt. The diagram is labeled MSV40191V3.

The timing of the interrupt period is depending 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 526. Synchronous interrupt period data read

Timing diagram for synchronous interrupt period data read. It shows the SDMMC_CK clock signal, SDMMC_CMD signal with 'Command data R', and data lines SDMMC_D0, SDMMC_D1, SDMMC_D2, and SDMMC_D3. The diagram illustrates the 'IRQ' and 'Data1' periods. The 'IRQ' period starts at the end of the command and lasts for 2 CK cycles. The 'Data1' period starts 2 CK cycles after the end of the command and lasts for 2 CK cycles. The diagram is labeled MSV40195V2.
Timing diagram for synchronous interrupt period data read. It shows the SDMMC_CK clock signal, SDMMC_CMD signal with 'Command data R', and data lines SDMMC_D0, SDMMC_D1, SDMMC_D2, and SDMMC_D3. The diagram illustrates the 'IRQ' and 'Data1' periods. The 'IRQ' period starts at the end of the command and lasts for 2 CK cycles. The 'Data1' period starts 2 CK cycles after the end of the command and lasts for 2 CK cycles. The diagram is labeled MSV40195V2.

Figure 527. Synchronous interrupt period data write

Timing diagram for synchronous interrupt period data write. It shows the relationship between SDMMC_CK (clock), SDMMC_CMD (command), SDMMC_D0 (data line 0), SDMMC_D1 (data line 1), SDMMC_D2 (data line 2), SDMMC_D3 (data line 3), and the Interrupt period. The diagram illustrates the sequence of events: Command data W (S, Command data W, E), RSP (S, RSP, E), Data (S, Data, E), CRC status (S, CRC status, E), and Data (S, Data, E). The interrupt period is shown as a sequence of IRQ, Data1, IRQ, and Data1. The interrupt period ends 2 CK cycles after the end bit of a command that transfers data block(s).

The diagram illustrates the timing for a synchronous interrupt period data write. The top line shows the SDMMC_CK clock signal. Below it, the SDMMC_CMD signal shows a command with 'S' (start), 'Command data W' (write), and 'E' (end) phases, followed by an 'RSP' (response) with 'S' (start) and 'E' (end). The data lines SDMMC_D0, SDMMC_D1, SDMMC_D2, and SDMMC_D3 show data transfer phases: 'S' (start), 'Data' (data), and 'E' (end). The interrupt period is shown as a sequence of 'IRQ' (interrupt request), 'Data1' (data), 'IRQ', and 'Data1'. The interrupt period ends 2 CK cycles after the end bit of a command that transfers data block(s). The diagram is labeled MSv40196V2.

Timing diagram for synchronous interrupt period data write. It shows the relationship between SDMMC_CK (clock), SDMMC_CMD (command), SDMMC_D0 (data line 0), SDMMC_D1 (data line 1), SDMMC_D2 (data line 2), SDMMC_D3 (data line 3), and the Interrupt period. The diagram illustrates the sequence of events: Command data W (S, Command data W, E), RSP (S, RSP, E), Data (S, Data, E), CRC status (S, CRC status, E), and Data (S, Data, E). The interrupt period is shown as a sequence of IRQ, Data1, IRQ, and Data1. The interrupt period ends 2 CK cycles after the end bit of a command that transfers data block(s).

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 528. 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 for the interrupt signal relative to the clock edges.

Figure 528 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 (Start, Data, End). The SDMMC_D0, SDMMC_D1, SDMMC_D2, and SDMMC_D3 signals show Data (Start, Data, End). The Interrupt period shows an IRQ signal. The setup time (t op ) is measured from the rising edge of SDMMC_CLK to the rising edge of the IRQ signal. The hold time is measured from the rising edge of the IRQ signal to the rising edge of SDMMC_CLK. The diagram also indicates the time intervals for the interrupt period: 0 CK - 2 CK and 2 CK.

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 for the interrupt signal relative to the clock edges.

MSV40940V3

Figure 529. 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 for the interrupt signal relative to the clock edges.

Figure 529 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 (Start, Data, End) and an RSP (Start, RSP, End). The SDMMC_D0, SDMMC_D1, SDMMC_D2, and SDMMC_D3 signals show Data (Start, Data, End) and CRC status (Start, CRC status, End). The Interrupt period shows an IRQ signal. The setup time (t op ) is measured from the rising edge of SDMMC_CLK to the rising edge of the IRQ signal. The hold time is measured from the rising edge of the IRQ signal to the rising edge of SDMMC_CLK. The diagram also indicates the time intervals for the interrupt period: 0 CK - 2 CK and 2 CK - 4 CK.

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 for the interrupt signal relative to the clock edges.

MSV40192V2

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 403 .

Table 403. 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 makes possible 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 makes possible 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 two 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 to Table 402 .

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 530 ).

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

Timing diagram for Figure 530 showing SDMMC_CK and SDMMC_Dn signals. The SDMMC_CK signal is a square wave that stops for 2 CK cycles after the 'Read data' phase and resumes for 1 CK cycle before the next 'Read data' phase. The SDMMC_Dn signal shows 'Read data', an 'Interrupt period', a high state 'H', and then 'Read data' again. A label MSV40193V2 is in the bottom right.
Timing diagram for Figure 530 showing SDMMC_CK and SDMMC_Dn signals. The SDMMC_CK signal is a square wave that stops for 2 CK cycles after the 'Read data' phase and resumes for 1 CK cycle before the next 'Read data' phase. The SDMMC_Dn signal shows 'Read data', an 'Interrupt period', a high state 'H', and then 'Read data' again. A label MSV40193V2 is in the bottom right.

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 531 . (In DDR50 mode the SDMMC_CK must only be stopped after the falling edge, when the clock line is low.)

Figure 531. Clock stop with SDMMC_CK for DDR50, SDR50

Timing diagram for Figure 531 showing SDMMC_CK and SDMMC_Dn signals. The SDMMC_CK signal is a square wave that stops for a duration of 2 to 5 CK cycles after the 'Read data' phase (marked 'End'). The SDMMC_Dn signal shows 'Read data', 'End', a low state, 'Start', and then 'Read data' again. A horizontal arrow labeled 'Nac 8 CK min.' spans from the start of the first data phase to the start of the second. A label MSV40194V2 is in the bottom right.
Timing diagram for Figure 531 showing SDMMC_CK and SDMMC_Dn signals. The SDMMC_CK signal is a square wave that stops for a duration of 2 to 5 CK cycles after the 'Read data' phase (marked 'End'). The SDMMC_Dn signal shows 'Read data', 'End', a low state, 'Start', and then 'Read data' again. A horizontal arrow labeled 'Nac 8 CK min.' spans from the start of the first data phase to the start of the second. A label MSV40194V2 is in the bottom right.

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 enables 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 532 .

Figure 532. 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 sequence starts with 'Read data' on SDMMC_D1 and SDMMC_D3/D0. SDMMC_D2 is high. SDMMC_CK is running. A '2 CK' (clock cycle) interval is marked. SDMMC_D2 goes low, initiating 'Read Wait'. SDMMC_D1 goes high-impedance. SDMMC_D3/D0 goes high-impedance, labeled 'Int period'. SDMMC_CMD is asserted. After another '2 CK' interval, SDMMC_D2 goes high, ending 'Read Wait'. SDMMC_D1 and SDMMC_D3/D0 resume 'Read data'. SDMMC_CK continues. A small note 'MSV40941V2' is in the bottom right.
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 sequence starts with 'Read data' on SDMMC_D1 and SDMMC_D3/D0. SDMMC_D2 is high. SDMMC_CK is running. A '2 CK' (clock cycle) interval is marked. SDMMC_D2 goes low, initiating 'Read Wait'. SDMMC_D1 goes high-impedance. SDMMC_D3/D0 goes high-impedance, labeled 'Int period'. SDMMC_CMD is asserted. After another '2 CK' interval, SDMMC_D2 goes high, ending 'Read Wait'. SDMMC_D1 and SDMMC_D3/D0 resume 'Read data'. SDMMC_CK continues. A small note 'MSV40941V2' is in the bottom right.

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 533 ).

Figure 533. 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 continuous square wave. The data signals show a 'Read data' block followed by a 'Read Wait' state. The Read Wait state is initiated by a '1 End' bit on SDMMC_D2 and a '1 End' bit on SDMMC_D3/SDMMC_D1/SDMMC_D0. The Read Wait state ends when a '0 Start' bit is received on SDMMC_D2 and a '0 Start' bit is received on SDMMC_D3/SDMMC_D1/SDMMC_D0. The Read Wait duration is specified as Nac 8 CK min. The time between the end of the first data block and the start of the second is 2 CK min. The time between the start of the second data block and the end of the Read Wait state is 5 CK max. The time between the end of the first data block and the start of the Read Wait state is t_0p. The time between the start of the Read Wait state and the end of the Read Wait state is t_0p. The diagram is labeled MSv40948V2.
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 continuous square wave. The data signals show a 'Read data' block followed by a 'Read Wait' state. The Read Wait state is initiated by a '1 End' bit on SDMMC_D2 and a '1 End' bit on SDMMC_D3/SDMMC_D1/SDMMC_D0. The Read Wait state ends when a '0 Start' bit is received on SDMMC_D2 and a '0 Start' bit is received on SDMMC_D3/SDMMC_D1/SDMMC_D0. The Read Wait duration is specified as Nac 8 CK min. The time between the end of the first data block and the start of the second is 2 CK min. The time between the start of the second data block and the end of the Read Wait state is 5 CK max. The time between the end of the first data block and the start of the Read Wait state is t_0p. The time between the start of the Read Wait state and the end of the Read Wait state is t_0p. The diagram is labeled MSv40948V2.

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.

48.5.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 404. 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 404. 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.
    • 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).
    • 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.
    • 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.
    • 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.
    • 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.
    • When writing data to the card. On the CPSM Abort signal, hardware stops the IDMA and subsequently the FIFO is flushed.
    • 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.
    • – When DATALNGTH > 5 bytes, Command CMD12 is waited in the CPSM to be aligned with the data transfer end bit.
    • – 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 534. 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' block followed by an 'E' (end bit). The data signal shows 'Stream data last byte' followed by an 'E' (end bit). A horizontal double-headed arrow labeled Nst indicates the time interval between the end of the last data byte and the end of the CMD12 command. The diagram is labeled MSV40942V1 in the bottom right corner.
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' block followed by an 'E' (end bit). The data signal shows 'Stream data last byte' followed by an 'E' (end bit). A horizontal double-headed arrow labeled Nst indicates the time interval between the end of the last data byte and the end of the CMD12 command. The diagram is labeled MSV40942V1 in the bottom right corner.

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 and read from the FIFO (DATAEND flag).
    • – 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.
    • – 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).
    • – The DPSM does not send more data than indicated by DATALENGTH.
  3. 3. Send CMD12 by the CPSM.
    • – 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 and read from the FIFO (DATAEND flag).
    • – 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.
    • – 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.

48.5.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 can 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 can be switched off only after the Sleep state has been reached. The Vcc supply must be reinstalled before CMD5 (AWAKE) is sent.

Figure 535. CMD5 Sleep Awake procedure

Timing diagram for CMD5 Sleep Awake procedure. The diagram shows four signal lines over time: Vcc, SDMMC_CMD, SDMMC_D0, and BUSYD0END. Vcc is shown with a pulse labeled 'Off'. SDMMC_CMD shows 'CMD5 sleep' and 'RESP' followed by 'CMD5 awake' and 'RESP'. SDMMC_D0 shows 'BUSY' periods. BUSYD0END shows transitions between 'Standby state' and 'Sleep state' via 'Transition phase'.

The diagram illustrates the timing for the CMD5 Sleep Awake procedure. The Vcc supply voltage is shown with a pulse labeled 'Off'. The SDMMC_CMD line shows the sequence: 'CMD5 sleep' command, 'RESP' (response), 'CMD5 awake' command, and 'RESP'. The SDMMC_D0 line shows 'BUSY' periods following each response. The BUSYD0END signal shows transitions between 'Standby state' and 'Sleep state' via 'Transition phase'.

Timing diagram for CMD5 Sleep Awake procedure. The diagram shows four signal lines over time: Vcc, SDMMC_CMD, SDMMC_D0, and BUSYD0END. Vcc is shown with a pulse labeled 'Off'. SDMMC_CMD shows 'CMD5 sleep' and 'RESP' followed by 'CMD5 awake' and 'RESP'. SDMMC_D0 shows 'BUSY' periods. BUSYD0END shows transitions between 'Standby state' and 'Sleep state' via 'Transition phase'.

48.5.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.
    • – 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):
    • – 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.
    • – 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.

48.5.5 Boot operation

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

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 0xFFFFFFFFA. 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 536. 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 finally SDMMC_CMD goes high to signal boot completion. Timing constraints include 74 cycles for the initial data, 50 ms max / 1 s max for the first block, and 56 cycles min. for boot completion.

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 finally SDMMC_CMD goes high to signal boot completion. Timing constraints include 74 cycles for the initial data, 50 ms max / 1 s max for the first block, and 56 cycles min. for boot completion.

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 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.
    • – 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 send CMD0 with the argument 0xFFFFFFFFA 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 0xFFFFFFFFA 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 537. 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), CMD0 reset, CMD1, and RESP. Timing constraints include 50 ms max. for data transfer and 1 s max. for the boot process. The boot is completed after 56 cycles min.

The diagram shows three signal lines: SDMMC_CK (clock), SDMMC_CMD (command), and SDMMC_Dn (data). The sequence of events is as follows:

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), CMD0 reset, CMD1, and RESP. Timing constraints include 50 ms max. for data transfer and 1 s max. for the boot process. The boot is completed after 56 cycles min.

To perform the alternative boot procedure the following steps needed:

  1. Move the SDMMC to power-off state, and reset the card.
  2. Move the SDMMC to power-on state. This guarantees the 74 SCDMMC_CK cycles to be clocked before any command.
  3. if a boot acknowledgment is requested enable the BOOTACKEN and set the ACKTIME and enable the ACKTIMEOUT flag.
  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. Select the alternative boot operation mode in BOOTMODE, load the CMD0 with the 0xFFFFFFFFA 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.
  6. When the command has been sent the CMDSENT flag is generated, at which time the BOOTEN bit must be cleared.
  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.
  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.
  1. 9. When last data has been received, read data from the FIFO until FIFO is empty after which end of data DATAEND flag is generated.
    • – SDMMC has completely received all data and the DPSM is disabled.
  2. 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.
  3. 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.

48.5.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 538. Command response R1b busy signaling

Timing diagram for Command response R1b busy signaling. The diagram shows four signal lines over time: SDMMC_CMD, SDMMC_D0, BUSYD0, and BUSYD0END. SDMMC_CMD shows two command periods: CMD followed by R1b response, then CMD followed by RESP. SDMMC_D0 shows a BUSY signal active during the R1b response. BUSYD0 shows a high level during the BUSY signal. BUSYD0END shows a pulse when the BUSY signal ends. The maximum busy time (T_busy max.) is indicated between the start of the BUSY signal and its release.

The diagram illustrates the timing of signals during an R1b response. The top line, SDMMC_CMD, shows a sequence of CMD, R1b, CMD, and RESP. The second line, SDMMC_D0, shows a BUSY signal active during the R1b response. The third line, BUSYD0, shows a high level during the BUSY signal. The bottom line, BUSYD0END, shows a pulse when the BUSY signal ends. A horizontal double-headed arrow labeled 'T_busy max.' indicates the maximum busy time from the start of the BUSY signal to its release.

Timing diagram for Command response R1b busy signaling. The diagram shows four signal lines over time: SDMMC_CMD, SDMMC_D0, BUSYD0, and BUSYD0END. SDMMC_CMD shows two command periods: CMD followed by R1b response, then CMD followed by RESP. SDMMC_D0 shows a BUSY signal active during the R1b response. BUSYD0 shows a high level during the BUSY signal. BUSYD0END shows a pulse when the BUSY signal ends. The maximum busy time (T_busy max.) is indicated between the start of the BUSY signal and its release.

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 than the programmed time.

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

48.5.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 transferred. 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 transferred.

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

Figure 539. SDMMC state control

Figure 539. 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 values and Reset signals.
stateDiagram-v2
    direction LR
    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 PowerCycle --> PowerOff: PWRCTRL = 00 PowerOff --> PowerOnWait: PWRCTRL = 11 PowerOnWait --> PowerOnEnabled: SDMMC_CK > 74 cycles PowerOnEnabled --> PowerCycle: PWRCTRL = 11 (loop back) PowerOnWait --> ResetState: Reset PowerOff --> ResetState: Reset PowerCycle --> ResetState: Reset ResetState --> PowerCycle: PWRCTRL = 10

The diagram shows five states for the SDMMC controller. 1. Power-cycle : SDMMC is disabled and signals drive 0. 2. Power-off : SDMMC is disabled and signals drive 1. 3. Power-on (Wait 74 cycles) : SDMMC is disabled while waiting for clock cycles. 4. Power-on (SDMMC enabled) : SDMMC is fully functional. 5. Reset : SDMMC is disabled and signals are in HiZ. Transitions are triggered by setting the PWRCTRL register (00, 10, 11), a hardware Reset, or completion of 74 clock cycles.

Figure 539. 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 values 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 540. Card cycle power / power up diagram

Figure 540. Card cycle power / power up diagram. This timing diagram illustrates the power and signal transitions for an SDMMC card. The top section shows Card Vcc and Vcc min levels. Card Vcc starts at a high level, drops to a low level during the 'Reset' phase, and then ramps up to a 'Power stable' level. Vcc min is a dashed line representing the minimum voltage threshold. Below the voltage levels, the signals SDMMC_CK, SDMMC_CMD, and SDMMC_Dn are shown. SDMMC_CK is initially 'Driven '0'', then becomes 'Driven '1'' and generates a series of clocks. SDMMC_CMD and SDMMC_Dn are initially 'HiZ', then become 'Driven '0'', and finally 'CMD' is shown. The bottom section shows the SDMMC state: 'Reset', 'Power-cycle', 'Power-off', and 'Power-on'. Timing parameters include 1 ms min for the 'Power-cycle' and 'Power-off' phases, 0.1 ms min for the 'Power ramp up' phase, and 74 SDMMC_CK clocks for the 'Power-on' phase. The diagram is labeled MSV39275V1.
Figure 540. Card cycle power / power up diagram. This timing diagram illustrates the power and signal transitions for an SDMMC card. The top section shows Card Vcc and Vcc min levels. Card Vcc starts at a high level, drops to a low level during the 'Reset' phase, and then ramps up to a 'Power stable' level. Vcc min is a dashed line representing the minimum voltage threshold. Below the voltage levels, the signals SDMMC_CK, SDMMC_CMD, and SDMMC_Dn are shown. SDMMC_CK is initially 'Driven '0'', then becomes 'Driven '1'' and generates a series of clocks. SDMMC_CMD and SDMMC_Dn are initially 'HiZ', then become 'Driven '0'', and finally 'CMD' is shown. The bottom section shows the SDMMC state: 'Reset', 'Power-cycle', 'Power-off', and 'Power-on'. Timing parameters include 1 ms min for the 'Power-cycle' and 'Power-off' phases, 0.1 ms min for the 'Power ramp up' phase, and 74 SDMMC_CK clocks for the 'Power-on' phase. The diagram is labeled MSV39275V1.

48.6 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.

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

UHS-I mode (SDR12, SDR25, SDR50, and DDR50) requires the support for 1.8 V 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 541. CMD11 signal voltage switch sequence

Timing diagram for CMD11 signal voltage switch sequence. It 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 receives R1 response, then goes low. SDMMC_D[3:0] starts at 3.3V, goes low, and then goes high to 1.8V within 1 ms of the CK transition. Timing constraints include 5 ms min. for CK low, 0 min. for CMD/D transition after CK low, and 1 ms max. for D[3:0] transition after CK transition.

The diagram illustrates the signal voltage switch sequence for CMD11. It shows three signal lines: SDMMC_CK, SDMMC_CMD, and SDMMC_D[3:0].
- SDMMC_CK: Starts at 3.3V, provides an SD clock at 3.3V, then goes low for a minimum of 5 ms, and then provides an SD clock at 1.8V.
- SDMMC_CMD: Starts at 3.3V, sends CMD11 and receives an R1 response, then goes low.
- SDMMC_D[3:0]: Starts at 3.3V, goes low, and then goes high to 1.8V within a maximum of 1 ms after the SDMMC_CK transition.
Timing constraints: The SDMMC_CK low duration is 5 ms min. The transition from 3.3V to 1.8V for SDMMC_CMD and SDMMC_D[3:0] occurs 0 min. after the SDMMC_CK transition. The SDMMC_D[3:0] transition to 1.8V occurs 1 ms max. after the SDMMC_CK transition.

Timing diagram for CMD11 signal voltage switch sequence. It 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 receives R1 response, then goes low. SDMMC_D[3:0] starts at 3.3V, goes low, and then goes high to 1.8V within 1 ms of the CK transition. Timing constraints include 5 ms min. for CK low, 0 min. for CMD/D transition after CK low, and 1 ms max. for D[3:0] transition after CK transition.

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].
  9. 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.
  1. 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 542. Voltage switch transceiver typical application

Figure 542. 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 pins: 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 pins: EN, SEL, CLK.h, CLK-f, CMD.dir, CMD.h, DAT0.dir, DAT0.h, DAT123.dir, DAT1.h, DAT2.h, and DAT3.h. The SD Card has pins: CLKB, CMDB, DAT0B, DAT1B, DAT2B, and DAT3B. The transceiver uses buffers and level converters to interface the host signals with the card signals. Control signals EN and SEL are connected to GPIOs. Direction control signals (CDIR, D0DIR, D123DIR) are connected to the transceiver's direction control pins (CMD.dir, DAT0.dir, DAT123.dir) through inverters. The transceiver is labeled 'MSV40951V2'.
Figure 542. 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 pins: 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 pins: EN, SEL, CLK.h, CLK-f, CMD.dir, CMD.h, DAT0.dir, DAT0.h, DAT123.dir, DAT1.h, DAT2.h, and DAT3.h. The SD Card has pins: CLKB, CMDB, DAT0B, DAT1B, DAT2B, and DAT3B. The transceiver uses buffers and level converters to interface the host signals with the card signals. Control signals EN and SEL are connected to GPIOs. Direction control signals (CDIR, D0DIR, D123DIR) are connected to the transceiver's direction control pins (CMD.dir, DAT0.dir, DAT123.dir) through inverters. The transceiver is labeled 'MSV40951V2'.

To interface with an external driver (a voltage switch transceiver), next to the standard signals the SDMMC uses the following 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.

48.8 SDMMC interrupts

Table 405. 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/AYes
SDMMCReceive FIFO half fullRXFIFOHFRXFIFOHFIEN/AYes
SDMMCTransmit FIFO fullTXFIFOEN/AN/AYes
SDMMCReceive FIFO fullRXFIFOERXFIFOEIEN/AYes
SDMMCTransmit FIFO emptyTXFIFOETXFIFOEIEN/AYes
SDMMCReceive FIFO emptyRXFIFOEN/AN/AYes
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 completeIDMABTCIDMABTCIEIDMABTCCYes

48.9 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 half-word (16-bit) accesses trigger an AHB bus error.

48.9.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 I/Os driven as output when direction signal is low.

1: Voltage transceiver I/Os 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.

48.9.2 SDMMC clock control register (SDMMC_CLKCR)

Address offset: 0x004

Reset value: 0x0000 0000

This 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, see SDMMC status register definition in Section 48.9.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) and DDR = 0:

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

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

When clock division >1 (CLKDIV > 0) and 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: ..

0x080: SDMMC_CK frequency = sdmmc_ker_ck / 256

0xXXX: ..

0x3FF: SDMMC_CK frequency = sdmmc_ker_ck / 2046

Note: While the SD/SDIO card or e•MMC is in identification mode, the SDMMC_CK frequency must be less than 400 kHz.

The clock frequency can be changed to the maximum card bus frequency when relative card addresses are assigned to all cards.

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.

48.9.3 SDMMC argument register (SDMMC_ARGR)

Address offset: 0x008

Reset value: 0x0000 0000

This 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.

48.9.4 SDMMC command register (SDMMC_CMDR)

Address offset: 0x00C

Reset value: 0x0000 0000

This 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.

48.9.5 SDMMC command response register (SDMMC_RESPCMDR)

Address offset: 0x010

Reset value: 0x0000 0000

This 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 bitfield. Contains the command index of the last command response received.

48.9.6 SDMMC response x register (SDMMC_RESPxR)

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

Reset value: 0x0000 0000

These registers contain the status of a card, which is part of the received response.

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

Bits 31:0 CARDSTATUS[31:0] : Card status according table below
See Table 406 .

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

Table 406. 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.

48.9.7 SDMMC data timer register (SDMMC_DTIMER)

Address offset: 0x024

Reset value: 0x0000 0000

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

A counter loads the value from this 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.

48.9.8 SDMMC data length register (SDMMC_DLENR)

Address offset: 0x028

Reset value: 0x0000 0000

This 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.

48.9.9 SDMMC data control register (SDMMC_DCTRL)

Address offset: 0x02C

Reset value: 0x0000 0000

This register controls 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 (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.

48.9.10 SDMMC data counter register (SDMMC_DCNTR)

Address offset: 0x030

Reset value: 0x0000 0000

This 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 must 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.

48.9.11 SDMMC status register (SDMMC_STAR)

Address offset: 0x034

Reset value: 0x0000 0000

This 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 TXFIFOHF : 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 (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 (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.

48.9.12 SDMMC interrupt clear register (SDMMC_ICR)

Address offset: 0x038

Reset value: 0x0000 0000

This 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 : DCRFAIL flag clear bit

Set by software to clear the DCRFAIL flag.

0: DCRFAIL not cleared

1: DCRFAIL cleared

Bit 0 CCRCFAILC : CCRCFAIL flag clear bit

Set by software to clear the CCRCFAIL flag.

0: CCRCFAIL not cleared

1: CCRCFAIL cleared

48.9.13 SDMMC mask register (SDMMC_MASKR)

Address offset: 0x03C

Reset value: 0x0000 0000

This 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

48.9.14 SDMMC acknowledgment timer register (SDMMC_ACKTIMER)

Address offset: 0x040

Reset value: 0x0000 0000

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

A counter loads the value from this 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 state, 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.

48.9.15 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 enables 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.IDMAB
ACT
IDMAB
MODE
IDMA
EN
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

48.9.16 SDMMC IDMA buffer size register (SDMMC_IDMABSIZER)

Address offset: 0x054

Reset value: 0x0000 0000

This 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.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 Kbytes

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

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

48.9.17 SDMMC IDMA buffer 0 base address register (SDMMC_IDMABASE0R)

Address offset: 0x058

Reset value: 0x0000 0000

This 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').

48.9.18 SDMMC IDMA buffer 1 base address register (SDMMC_IDMABASE1R)

Address offset: 0x05C

Reset value: 0x0000 0000

This 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').

48.9.19 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 enables 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.

48.9.20 SDMMC register map

Table 407. 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.Res.DIRPOLVSWITCHENVSWITCHPWRCTRL[1:0]
Reset value0000
0x004SDMMC_CLKCRRes.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.SELCLKRX[1:0]BUSSPEEDDDRHWFC_ENNEGEDGEWIDBUS[1:0]Res.Res.PWRSVRes.Res.CLKDIV[9:0]
Reset value00000000000000000000
0x008SDMMC_ARGRCMDARG[31:0]
Reset value00000000000000000000000000000000
0x00CSDMMC_CMDRRes.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.Res.CMDSUSPENDBOOTENBOOTMODEDTHOLDCPSMENWAITPENDWAITINTWAITRES[1:0]Res.Res.CMDSTOPCMDTRANSCMDINDEX[5:0]
Reset value
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.Res.Res.RESPCMD[5:0]
Reset value0000
0x014SDMMC_RESP1RCARDSTATUS[31:0]
Reset value00000000000000000000000000000000
Table 407. SDMMC register map (continued)
OffsetRegister name313029282726252423222120191817161514131211109876543210
0x018SDMMC_
RESP2R
CARDSTATUS[31:0]
Reset value00000000000000000000000000000000
0x01CSDMMC_
RESP3R
CARDSTATUS[31:0]
Reset value00000000000000000000000000000000
0x020SDMMC_
RESP4R
CARDSTATUS[31:0]
Reset value00000000000000000000000000000000
0x024SDMMC_
DTIMER
DATATIME[31:0]
Reset value00000000000000000000000000000000
0x028SDMMC_
DLENR
Res.Res.Res.Res.Res.Res.Res.DATALENGTH[24:0]
Reset value0000000000000000000000000
0x02CSDMMC_
DCTRLR
Res.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_
DCNTR
Res.Res.Res.Res.Res.Res.Res.DATACOUNT[24:0]
Reset value0000000000000000000000000
0x034SDMMC_
STAR
Res.Res.Res.IDMABTCIDMATECKSTOPVSWENDACKTIMEOUTACKFAILSDIOITBUSYD0ENDBUSYD0RXFIFOETXFIFOERXFIFOFTXFIFOFRXFIFOHFTXFIFOHFCPSMACTDPSMACTDABORTDBCKENDDHOLDDATAENDCMDSENTCMDRENDRXOVERRTXUNDERRDTIMEOUTCTIMEOUTDCRCFAILCCRCFAIL
Reset value00000000000000000000000000000
0x038SDMMC_
ICR
Res.Res.Res.IDMABTCCIDMATECCKSTOPCVSWENDCACKTIMEOUT CACKFAILCSDIOITCBUSYD0ENDCRes.Res.Res.Res.Res.Res.Res.Res.Res.DABORTCDBCKENDCDHOLDCDATAENDCCMDSENTCCMDRENDCRXOVERRCTXUNDERRCDTIMEOUT CCTIMEOUTCDCRCFAILCCCRCFAILC
Reset value00000000000000000000
0x03CSDMMC_
MASKR
Res.Res.Res.IDMABTCIERes.CKSTOPIEVSWENDIEACKTIMEOUTIEACKFAILIESDIOITIEBUSYD0ENDIERes.Res.TXFIFOEIERXFIFOFIERes.RXFIFOHFIETXFIFOHFIERes.Res.DABORTIEDBCKENDIEDHOLDIEDATAENDIECMDSENTIECMDRENDIERXOVERRIETXUNDERRIEDTIMEOUTIECTIMEOUTIEDCRCFAILIECCRCFAILIE
Reset value00000000000000000000000
0x040SDMMC_
ACKTIMER
Res.Res.Res.Res.Res.Res.Res.ACKTIME[24:0]
Reset value0000000000000000000000000
0x044
- 0x04C
ReservedRes.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.

Table 407. SDMMC register map (continued)

OffsetRegister name313029282726252423222120191817161514131211109876543210
0x050SDMMC_IDMACTRLRRes.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.IDMABACTIDMABMODE
Reset value000
0x054SDMMC_IDMABSIZERRes.Res.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 value0000000000000000000000000000000
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_FIFORxFIFODATA[31:0]
Reset value0000000000000000000000000000000

Refer to Section 2.3: Memory organization for the register boundary addresses.