A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from http://arm-software.github.io/CMSIS_5/Driver/html/group__mci__interface__gr.html below:

MCI Interface

Driver API for Memory Card Interface using SD/MMC interface (Driver_MCI.h) More...

Driver API for Memory Card Interface using SD/MMC interface (Driver_MCI.h)

The Memory Card Interface (MCI) implements the hardware abstraction layer for Secure Digital (SD) and Multi Media Card (MMC) memory that is typically used as file storage. For embedded systems, SD/MMC devices are available as memory cards in several forms (SD, miniSD, microSD, MMC, MMCmicro) or as non-removable device es that are directly soldered to the PCB (eMMC).

References:

Block Diagram

The MCI driver allows you to exchange data of the SD/MMC memory via SD/MMC interface.

The following modes are supported by SD/MMC memory cards:

SD memory connected via SPI interface

SD memory connected via 1-bit SD Bus Mode

SD memory connected via 4-bit SD Bus Mode

MCI API

The following header files define the Application Programming Interface (API) for the MCI interface:

The driver implementation is a typical part of the Device Family Pack (DFP) that supports the peripherals of the microcontroller family.

Note
For parameters, the value marked with (default) is the setting after the driver initialization.

Driver Functions

The driver functions are published in the access struct as explained in Common Driver Functions

Example Code

The following example code shows the usage of the MCI interface.

void MCI_SignalEvent_Callback (uint32_t event);

int32_t status;

status = drv->

Initialize

(&MCI_SignalEvent_Callback);

}

}

int32_t status;

}

}

int32_t status;

if (enable == true) {

}

else {

}

}

}

int32_t status;

if

(drv_capabilities.

vdd

== 1U) {

}

}

}

int32_t status;

if (status == 1) {

}

else {

if (status == 0) {

}

else {

}

}

}

int32_t status;

if (status == 1) {

}

else {

if (status == 0) {

}

else {

}

}

}

volatile uint32_t MCI_Events;

void MCI_SignalEvent_Callback (uint32_t event) {

MCI_Events |= event;

}

int32_t status;

uint32_t cmd;

MCI_Events = 0U;

cmd = 0U;

}

else {

}

}

volatile uint32_t MCI_Events;

void MCI_SignalEvent_Callback (uint32_t event) {

MCI_Events |= event;

}

int32_t status;

uint32_t cmd, arg;

uint32_t resp;

if (sz < 512U) {

}

MCI_Events = 0U;

cmd = 17U;

arg = 0U;

if ((resp & 0x03U) == 0U) {

}

}

}

}

}

}

}

}

}

}

}

void MCI_SignalEvent_Callback (uint32_t event) {

}

}

if ((event & ARM_MCI_EVENT_COMMAND_COMPLETE) != 0U) {

}

}

}

}

}

}

}

}

}

}

Access structure of the MCI Driver.

The functions of the MCI are accessed by function pointers exposed by this structure. Refer to Common Driver Functions for overview information.

Each instance of an MCI provides such an access structure. The instance is identified by a postfix number in the symbol name of the access structure, for example:

A configuration setting in the middleware allows connecting the middleware to a specific driver instance Driver_MCIn. The default is 0, which connects a middleware to the first instance of a driver.

int32_t(* CardPower)(uint32_t voltage)

Pointer to ARM_MCI_CardPower : Set card power supply voltage.

int32_t(* SendCommand)(uint32_t cmd, uint32_t arg, uint32_t flags, uint32_t *response)

Pointer to ARM_MCI_SendCommand : Send Command to card and get the response.

int32_t(* SetupTransfer)(uint8_t *data, uint32_t block_count, uint32_t block_size, uint32_t mode)

Pointer to ARM_MCI_SetupTransfer : Setup data transfer operation.

int32_t(* Control)(uint32_t control, uint32_t arg)

Pointer to ARM_MCI_Control : Control MCI Interface.

struct ARM_MCI_CAPABILITIES

MCI Driver Capabilities.

A MCI driver can be implemented with different capabilities. The data fields of this struct encode the capabilities implemented by this driver.

Returned by:

Data Fields uint32_t cd_state: 1 Card Detect State available. uint32_t cd_event: 1 Signal Card Detect change event. uint32_t wp_state: 1 Write Protect State available. uint32_t vdd: 1 Supports VDD Card Power Supply Control. uint32_t vdd_1v8: 1 Supports 1.8 VDD Card Power Supply. uint32_t vccq: 1 Supports VCCQ Card Power Supply Control (eMMC) uint32_t vccq_1v8: 1 Supports 1.8 VCCQ Card Power Supply (eMMC) uint32_t vccq_1v2: 1 Supports 1.2 VCCQ Card Power Supply (eMMC) uint32_t data_width_4: 1 Supports 4-bit data. uint32_t data_width_8: 1 Supports 8-bit data. uint32_t data_width_4_ddr: 1 Supports 4-bit data, DDR (Dual Data Rate) - MMC only. uint32_t data_width_8_ddr: 1 Supports 8-bit data, DDR (Dual Data Rate) - MMC only. uint32_t high_speed: 1 Supports SD/MMC High Speed Mode. uint32_t uhs_signaling: 1 Supports SD UHS-I (Ultra High Speed) 1.8V signaling. uint32_t uhs_tuning: 1 Supports SD UHS-I tuning. uint32_t uhs_sdr50: 1 Supports SD UHS-I SDR50 (Single Data Rate) up to 50MB/s. uint32_t uhs_sdr104: 1 Supports SD UHS-I SDR104 (Single Data Rate) up to 104MB/s. uint32_t uhs_ddr50: 1 Supports SD UHS-I DDR50 (Dual Data Rate) up to 50MB/s. uint32_t uhs_driver_type_a: 1 Supports SD UHS-I Driver Type A. uint32_t uhs_driver_type_c: 1 Supports SD UHS-I Driver Type C. uint32_t uhs_driver_type_d: 1 Supports SD UHS-I Driver Type D. uint32_t sdio_interrupt: 1 Supports SD I/O Interrupt. uint32_t read_wait: 1 Supports Read Wait (SD I/O) uint32_t suspend_resume: 1 Supports Suspend/Resume (SD I/O) uint32_t mmc_interrupt: 1 Supports MMC Interrupt. uint32_t mmc_boot: 1 Supports MMC Boot. uint32_t rst_n: 1 Supports RST_n Pin Control (eMMC) uint32_t ccs: 1 Supports Command Completion Signal (CCS) for CE-ATA. uint32_t ccs_timeout: 1 Supports Command Completion Signal (CCS) timeout for CE-ATA. uint32_t reserved: 3 Reserved (must be zero)

MCI Status.

Structure with information about the status of the MCI.

Returned by:

Data Fields uint32_t command_active: 1 Command active flag. uint32_t command_timeout: 1 Command timeout flag (cleared on start of next command) uint32_t command_error: 1 Command error flag (cleared on start of next command) uint32_t transfer_active: 1 Transfer active flag. uint32_t transfer_timeout: 1 Transfer timeout flag (cleared on start of next command) uint32_t transfer_error: 1 Transfer error flag (cleared on start of next command) uint32_t sdio_interrupt: 1 SD I/O Interrupt flag (cleared on start of monitoring) uint32_t ccs: 1 CCS flag (cleared on start of next command) uint32_t reserved: 24

Get driver version.

Returns
ARM_DRIVER_VERSION

The function ARM_MCI_GetVersion returns version information of the driver implementation in ARM_DRIVER_VERSION

Example:

void setup_mci (void) {

drv_info = &Driver_MCI0;

if

(version.

api

< 0x10A) {

return;

}

}

Get driver capabilities.

Returns
ARM_MCI_CAPABILITIES

The function ARM_MCI_GetCapabilities returns information about capabilities in this driver implementation. The data fields of the structure ARM_MCI_CAPABILITIES encode various capabilities, for example supported bus modes ...

Example:

void read_capabilities (void) {

drv_info = &Driver_MCI0;

}

Initialize the Memory Card Interface.

Parameters
Returns
Status Error Codes

The function ARM_MCI_Initialize initializes the MCI interface. It is called when the middleware component starts operation.

The function performs the following operations:

The parameter cb_event is a pointer to the ARM_MCI_SignalEvent callback function; use a NULL pointer when no callback signals are required.

Example:

int32_t ARM_MCI_Uninitialize ( void  )

De-initialize Memory Card Interface.

Returns
Status Error Codes

The function ARM_MCI_Uninitialize de-initializes the resources of I2C interface.

It is called when the middleware component stops operation and releases the software resources used by the interface.

Control Memory Card Interface Power.

Parameters
Returns
Status Error Codes

The function ARM_MCI_PowerControl operates the power modes of the MCI interface.

The parameter state can have the following values:

Refer to Function Call Sequence for more information.

int32_t ARM_MCI_CardPower ( uint32_t  voltage )

Set Memory Card Power supply voltage.

Parameters
[in] voltage Memory Card Power supply voltage
Returns
Status Error Codes

The function ARM_MCI_CardPower operates the memory card power supply voltage.

The parameter voltage sets the voltage. Not every voltage might be supported by the driver implementation. The structure ARM_MCI_CAPABILITIES encodes the supported voltage. Retrieve the information with the function ARM_MCI_GetCapabilities and verify the data fields.

The following values:

int32_t ARM_MCI_ReadCD ( void  )

Read Card Detect (CD) state.

Returns
1:card detected, 0:card not detected, or error

The function ARM_MCI_ReadCD reads the status of the Card Detect (CD) pin.

int32_t ARM_MCI_ReadWP ( void  )

Read Write Protect (WP) state.

Returns
1:write protected, 0:not write protected, or error

The function ARM_MCI_ReadWP reads the status of the Write Protect (WP) pin.

int32_t ARM_MCI_SendCommand ( uint32_t  cmd, uint32_t  arg, uint32_t  flags, uint32_t *  response  )

Send Command to card and get the response.

Parameters
[in] cmd Memory Card command [in] arg Command argument [in] flags Command flags [out] response Pointer to buffer for response
Returns
Status Error Codes

The function ARM_MCI_SendCommand

The parameter cmd is the command sent to the card.
The parameter arg contains arguments for the command cmd.
The parameter flags controls the behavior of the operation and takes predefined values listed in the table below.
The parameter response is a pointer to receive data.

The parameter flags can have the following values:

Calling the function ARM_MCI_SendCommand only starts the operation. The function is non-blocking and returns as soon as the driver has started the operation. It is not allowed to call this function again until the operation is in progress.

After the command is sent the response is retrieved if specified with ARM_MCI_RESPONSE_xxx flags. When the command completes successfully (requested response is received without errors) the ARM_MCI_EVENT_COMMAND_COMPLETE event is generated. In case that response is requested but not received the ARM_MCI_EVENT_COMMAND_TIMEOUT event is generated instead. In case of invalid response (or CRC error) the ARM_MCI_EVENT_COMMAND_ERROR event is generated instead. Progress of command operation can be monitored by calling the ARM_MCI_GetStatus and checking the command_active flag.

After the command operation the data transfer operation is started if specified with ARM_MCI_TRANSFER_DATA flag. The data transfer needs to be configured before that by calling the ARM_MCI_SetupTransfer. When the data transfer completes successfully the ARM_MCI_EVENT_TRANSFER_COMPLETE event is generated. In case that data transfer is not completed in-time (specified by ARM_MCI_DATA_TIMEOUT) the ARM_MCI_EVENT_TRANSFER_TIMEOUT event is generated instead. In case of CRC errors the ARM_MCI_EVENT_TRANSFER_ERROR event is generated instead. Progress of data transfer operation can be monitored by calling the ARM_MCI_GetStatus and checking the transfer_active flag.

See also:

int32_t ARM_MCI_SetupTransfer ( uint8_t *  data, uint32_t  block_count, uint32_t  block_size, uint32_t  mode  )

Setup read or write transfer operation.

Parameters
[in,out] data Pointer to data block(s) to be written or read [in] block_count Number of blocks [in] block_size Size of a block in bytes [in] mode Transfer mode
Returns
Status Error Codes

The function ARM_MCI_SetupTransfer prepares the data transfer operation that is initiated by calling the function ARM_MCI_SendCommand with the parameter flags = ARM_MCI_TRANSFER_DATA.

The parameter data is a pointer to the data to transfer.
The parameter block_count is the number of blocks to transfer.
The parameter block_size is the size of a block.
The parameter mode sets the transfer mode and can have the values liste in the table below:

int32_t ARM_MCI_AbortTransfer ( void  ) int32_t ARM_MCI_Control ( uint32_t  control, uint32_t  arg  )

Control MCI Interface.

Parameters
[in] control Operation [in] arg Argument of operation (optional)
Returns
Status Error Codes

Th function ARM_MCI_Control controls the MCI interface and executes various operations.

The parameter control specifies the operation. Values for control cannot be ORed, but must be called separately in the code.
The parameter arg provides, depending on the operation, additional information or sets values.

Note
For parameters, the values marked with (default) are the setting after the driver initialization.

The table lists values for the parameter control.

Parameter control Operation ARM_MCI_BUS_SPEED Set the Bus Speed. The parameter arg specifies the speed in bits/s; The function returns the bus speed configured in bits/s. ARM_MCI_BUS_SPEED_MODE Set the Bus Speed Mode. Predefined values for arg are listed in the table Bus Speed Mode. ARM_MCI_BUS_CMD_MODE Set the CMD Line Mode. Predefined values for arg are listed in the table Bus CMD Line Mode. ARM_MCI_BUS_DATA_WIDTH Set data bus width. Predefined values for arg are encoded in Bus Data Width. ARM_MCI_DRIVER_STRENGTH Set driver strength. Predefined values for arg are listed in the table Driver Type ARM_MCI_CONTROL_RESET Control optional RST_n Pin (eMMC). The parameter arg can have the values [0:inactive(default); 1:active] ARM_MCI_CONTROL_CLOCK_IDLE Control clock generation on CLK Pin when idle. The parameter arg can have the values [0:disabled; 1:enabled] ARM_MCI_UHS_TUNING_OPERATION Sampling clock Tuning operation (SD UHS-I). The parameter arg can have the values [0:reset; 1:execute] ARM_MCI_UHS_TUNING_RESULT Sampling clock Tuning result (SD UHS-I). Returns [0:done; 1:in progress; -1:error] ARM_MCI_DATA_TIMEOUT Set Data timeout; The parameter arg sets the timeout in bus cycles. ARM_MCI_CSS_TIMEOUT Set Command Completion Signal (CCS) timeout. The parameter arg sets timeout in bus cycles. ARM_MCI_MONITOR_SDIO_INTERRUPT Monitor SD I/O interrupt. The parameter arg can have the values [0:disabled(default); 1:enabled]. Monitoring is automatically disabled when an interrupt is recognized. ARM_MCI_CONTROL_READ_WAIT Control Read/Wait states for SD I/O. The parameter arg can have the values [0:disabled(default); 1:enabled]. ARM_MCI_SUSPEND_TRANSFER Suspend Data transfer (SD I/O). Returns the number of remaining bytes to transfer. ARM_MCI_RESUME_TRANSFER Resume Data transfer (SD I/O).

Bus Speed Mode

The function ARM_MCI_GetCapabilities lists the supported bus speed modes. Initially, all SD cards use a 3.3 volt electrical interface. Some SD cards can switch to 1.8 volt operation. For example, the use of ultra-high-speed (UHS) SD cards requires 1.8 volt operation and a 4-bit bus data width. The bit field ARM_MCI_CAPABILITIES.uhs_signaling encodes whether the driver supports 1.8 volt UHS signaling.

The control operation ARM_MCI_BUS_SPEED_MODE sets the bus speed mode using the parameter arg.

Parameter arg Bus Speed Mode ARM_MCI_BUS_DEFAULT_SPEED (default) Set the bus speed for SD/MMC cards: Default Speed mode up to [25;26]MHz ARM_MCI_BUS_HIGH_SPEED Set the bus speed for SD/MMC: High Speed mode up to [50;52]MHz ARM_MCI_BUS_UHS_SDR12 Set the bus speed for SD: SDR12 (Single Data Rate) up to 25MHz, 12.5MB/s: UHS-I (Ultra High Speed) 1.8V signalling ARM_MCI_BUS_UHS_SDR25 Set the bus speed for SD: SDR25 (Single Data Rate) up to 50MHz, 25 MB/s: UHS-I (Ultra High Speed) 1.8V signalling ARM_MCI_BUS_UHS_SDR50 Set the bus speed for SD: SDR50 (Single Data Rate) up to 100MHz, 50 MB/s: UHS-I (Ultra High Speed) 1.8V signalling ARM_MCI_BUS_UHS_SDR104 Set the bus speed for SD: SDR104 (Single Data Rate) up to 208MHz, 104 MB/s: UHS-I (Ultra High Speed) 1.8V signalling ARM_MCI_BUS_UHS_DDR50 Set the bus speed for SD: DDR50 (Dual Data Rate) up to 50MHz, 50 MB/s: UHS-I (Ultra High Speed) 1.8V signalling

Bus CMD Line Mode

The control operation ARM_MCI_BUS_CMD_MODE sets the bus command line mode using the parameter arg.

Bus Data Width

Specifies the bus data width (the number of data I/O pins on the SD/MMC interface).

For high speed memory cards, a 4-bit bus data width should be used (or 8-bit for eMMC). The bit fields ARM_MCI_CAPABILITIES.data_width_4 and ARM_MCI_CAPABILITIES.data_width_8 encode whether the driver supports a specific bus data with.

The control operation ARM_MCI_BUS_DATA_WIDTH sets the bus data width using the parameter arg.

Driver Type

Specifies the interface driver type.

The control operation ARM_MCI_DRIVER_STRENGTH sets the interface driver type using the parameter arg.

Examples:

do {

if (status == -1) { break; }

} while (status == 1);

Get MCI status.

Returns
MCI status ARM_MCI_STATUS

The function ARM_MCI_GetStatus returns the current MCI interface status.

void ARM_MCI_SignalEvent ( uint32_t  event )

Callback function that signals a MCI Card Event.

Parameters
Returns
none

The function ARM_MCI_SignalEvent is a callback function registered by the function ARM_MCI_Initialize.

The parameter event indicates one or more events that occurred during driver operation. Each event is encoded in a separate bit and therefore it is possible to signal multiple events within the same call.

Not every event is necessarily generated by the driver. This depends on the implemented capabilities stored in the data fields of the structure ARM_NAND_CAPABILITIES, which can be retrieved with the function ARM_NAND_GetCapabilities.

The following events can be generated:

See also:


RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4