MCUXpresso SDK API Reference Manual  Rev. 0
NXP Semiconductors
 All Data Structures Functions Variables Typedefs Enumerations Enumerator Groups Pages
USDHC: Ultra Secured Digital Host Controller Driver

Overview

The MCUXpresso SDK provides a peripheral driver for the Ultra Secured Digital Host Controller (USDHC) module of MCUXpresso SDK/i.MX devices.

Typical use case

USDHC Operation

Refer to the driver examples codes located at <SDK_ROOT>/boards/<BOARD>/driver_examples/usdhc.

Cache maintain capability

The uSDHC host controller is intergrated with ADMA to have better transfer performance, so to maintain data integrity during DMA operations on the platform that has cache, USDHC driver provide a cache maintain functionality by define: FSL_SDK_ENABLE_DRIVER_CACHE_CONTROL = 1 It is suggest that the address of buffer used for read/write is align with cache line size.

Scatter gather transfer capability

The USDHC driver implement scatter gather transfer functionality, so application can submit uncontinuous data buffer in one transfer request by the scatter gather api, to have this feature, USDHC driver has below api USDHC_TransferScatterGatherADMANonBlocking This function suppport scatter gather transfer and cover the functionality of USDHC_TransferNonBlocking also, but if application would like to use the function, please enable function macro firstly, since the scatter gather functionality is disabled by default. #define FSL_USDHC_ENABLE_SCATTER_GATHER_TRANSFER 1

Please note that once the macro is defined, the USDHC_TransferNonBlocking will be removed automatically.

Data Structures

struct  usdhc_adma2_descriptor_t
 Defines the ADMA2 descriptor structure. More...
 
struct  usdhc_capability_t
 USDHC capability information. More...
 
struct  usdhc_boot_config_t
 Data structure to configure the MMC boot feature. More...
 
struct  usdhc_config_t
 Data structure to initialize the USDHC. More...
 
struct  usdhc_command_t
 Card command descriptor. More...
 
struct  usdhc_adma_config_t
 ADMA configuration. More...
 
struct  usdhc_scatter_gather_data_list_t
 Card scatter gather data list. More...
 
struct  usdhc_scatter_gather_data_t
 Card scatter gather data descriptor. More...
 
struct  usdhc_scatter_gather_transfer_t
 usdhc scatter gather transfer. More...
 
struct  usdhc_data_t
 Card data descriptor. More...
 
struct  usdhc_transfer_t
 Transfer state. More...
 
struct  usdhc_transfer_callback_t
 USDHC callback functions. More...
 
struct  usdhc_handle_t
 USDHC handle. More...
 
struct  usdhc_host_t
 USDHC host descriptor. More...
 

Macros

#define USDHC_MAX_BLOCK_COUNT   (USDHC_BLK_ATT_BLKCNT_MASK >> USDHC_BLK_ATT_BLKCNT_SHIFT)
 Maximum block count can be set one time.
 
#define FSL_USDHC_ENABLE_SCATTER_GATHER_TRANSFER   0U
 USDHC scatter gather feature control macro.
 
#define USDHC_ADMA1_ADDRESS_ALIGN   (4096U)
 The alignment size for ADDRESS filed in ADMA1's descriptor. More...
 
#define USDHC_ADMA1_LENGTH_ALIGN   (4096U)
 The alignment size for LENGTH field in ADMA1's descriptor. More...
 
#define USDHC_ADMA2_ADDRESS_ALIGN   (4U)
 The alignment size for ADDRESS field in ADMA2's descriptor. More...
 
#define USDHC_ADMA2_LENGTH_ALIGN   (4U)
 The alignment size for LENGTH filed in ADMA2's descriptor. More...
 
#define USDHC_ADMA1_DESCRIPTOR_ADDRESS_SHIFT   (12U)
 The bit shift for ADDRESS filed in ADMA1's descriptor. More...
 
#define USDHC_ADMA1_DESCRIPTOR_ADDRESS_MASK   (0xFFFFFU)
 The bit mask for ADDRESS field in ADMA1's descriptor. More...
 
#define USDHC_ADMA1_DESCRIPTOR_LENGTH_SHIFT   (12U)
 The bit shift for LENGTH filed in ADMA1's descriptor. More...
 
#define USDHC_ADMA1_DESCRIPTOR_LENGTH_MASK   (0xFFFFU)
 The mask for LENGTH field in ADMA1's descriptor. More...
 
#define USDHC_ADMA1_DESCRIPTOR_MAX_LENGTH_PER_ENTRY   (USDHC_ADMA1_DESCRIPTOR_LENGTH_MASK + 1U - 4096U)
 The maximum value of LENGTH filed in ADMA1's descriptor. More...
 
#define USDHC_ADMA2_DESCRIPTOR_LENGTH_SHIFT   (16U)
 The bit shift for LENGTH field in ADMA2's descriptor. More...
 
#define USDHC_ADMA2_DESCRIPTOR_LENGTH_MASK   (0xFFFFU)
 The bit mask for LENGTH field in ADMA2's descriptor. More...
 
#define USDHC_ADMA2_DESCRIPTOR_MAX_LENGTH_PER_ENTRY   (USDHC_ADMA2_DESCRIPTOR_LENGTH_MASK - 3U)
 The maximum value of LENGTH field in ADMA2's descriptor. More...
 

Typedefs

typedef uint32_t usdhc_adma1_descriptor_t
 Defines the ADMA1 descriptor structure. More...
 
typedef status_t(* usdhc_transfer_function_t )(USDHC_Type *base, usdhc_transfer_t *content)
 USDHC transfer function. More...
 

Enumerations

enum  {
  kStatus_USDHC_BusyTransferring = MAKE_STATUS(kStatusGroup_USDHC, 0U),
  kStatus_USDHC_PrepareAdmaDescriptorFailed = MAKE_STATUS(kStatusGroup_USDHC, 1U),
  kStatus_USDHC_SendCommandFailed = MAKE_STATUS(kStatusGroup_USDHC, 2U),
  kStatus_USDHC_TransferDataFailed = MAKE_STATUS(kStatusGroup_USDHC, 3U),
  kStatus_USDHC_DMADataAddrNotAlign = MAKE_STATUS(kStatusGroup_USDHC, 4U),
  kStatus_USDHC_ReTuningRequest = MAKE_STATUS(kStatusGroup_USDHC, 5U),
  kStatus_USDHC_TuningError = MAKE_STATUS(kStatusGroup_USDHC, 6U),
  kStatus_USDHC_NotSupport = MAKE_STATUS(kStatusGroup_USDHC, 7U),
  kStatus_USDHC_TransferDataComplete = MAKE_STATUS(kStatusGroup_USDHC, 8U),
  kStatus_USDHC_SendCommandSuccess = MAKE_STATUS(kStatusGroup_USDHC, 9U),
  kStatus_USDHC_TransferDMAComplete = MAKE_STATUS(kStatusGroup_USDHC, 10U)
}
 Enum _usdhc_status. More...
 
enum  {
  kUSDHC_SupportAdmaFlag = USDHC_HOST_CTRL_CAP_ADMAS_MASK,
  kUSDHC_SupportHighSpeedFlag = USDHC_HOST_CTRL_CAP_HSS_MASK,
  kUSDHC_SupportDmaFlag = USDHC_HOST_CTRL_CAP_DMAS_MASK,
  kUSDHC_SupportSuspendResumeFlag = USDHC_HOST_CTRL_CAP_SRS_MASK,
  kUSDHC_SupportV330Flag = USDHC_HOST_CTRL_CAP_VS33_MASK,
  kUSDHC_SupportV300Flag = USDHC_HOST_CTRL_CAP_VS30_MASK,
  kUSDHC_SupportV180Flag = USDHC_HOST_CTRL_CAP_VS18_MASK,
  kUSDHC_Support4BitFlag = (USDHC_HOST_CTRL_CAP_MBL_SHIFT << 0U),
  kUSDHC_Support8BitFlag = (USDHC_HOST_CTRL_CAP_MBL_SHIFT << 1U),
  kUSDHC_SupportDDR50Flag = USDHC_HOST_CTRL_CAP_DDR50_SUPPORT_MASK,
  kUSDHC_SupportSDR104Flag = USDHC_HOST_CTRL_CAP_SDR104_SUPPORT_MASK,
  kUSDHC_SupportSDR50Flag = USDHC_HOST_CTRL_CAP_SDR50_SUPPORT_MASK
}
 Enum _usdhc_capability_flag. More...
 
enum  {
  kUSDHC_WakeupEventOnCardInt = USDHC_PROT_CTRL_WECINT_MASK,
  kUSDHC_WakeupEventOnCardInsert = USDHC_PROT_CTRL_WECINS_MASK,
  kUSDHC_WakeupEventOnCardRemove = USDHC_PROT_CTRL_WECRM_MASK,
  kUSDHC_WakeupEventsAll
}
 Enum _usdhc_wakeup_event. More...
 
enum  {
  kUSDHC_ResetAll = USDHC_SYS_CTRL_RSTA_MASK,
  kUSDHC_ResetCommand = USDHC_SYS_CTRL_RSTC_MASK,
  kUSDHC_ResetData = USDHC_SYS_CTRL_RSTD_MASK,
  kUSDHC_ResetTuning = USDHC_SYS_CTRL_RSTT_MASK,
  kUSDHC_ResetsAll = (kUSDHC_ResetAll | kUSDHC_ResetCommand | kUSDHC_ResetData | kUSDHC_ResetTuning)
}
 Enum _usdhc_reset. More...
 
enum  {
  kUSDHC_EnableDmaFlag = USDHC_MIX_CTRL_DMAEN_MASK,
  kUSDHC_CommandTypeSuspendFlag = USDHC_CMD_XFR_TYP_CMDTYP(1U),
  kUSDHC_CommandTypeResumeFlag = USDHC_CMD_XFR_TYP_CMDTYP(2U),
  kUSDHC_CommandTypeAbortFlag = USDHC_CMD_XFR_TYP_CMDTYP(3U),
  kUSDHC_EnableBlockCountFlag = USDHC_MIX_CTRL_BCEN_MASK,
  kUSDHC_EnableAutoCommand12Flag = USDHC_MIX_CTRL_AC12EN_MASK,
  kUSDHC_DataReadFlag = USDHC_MIX_CTRL_DTDSEL_MASK,
  kUSDHC_MultipleBlockFlag = USDHC_MIX_CTRL_MSBSEL_MASK,
  kUSDHC_EnableAutoCommand23Flag = USDHC_MIX_CTRL_AC23EN_MASK,
  kUSDHC_ResponseLength136Flag = USDHC_CMD_XFR_TYP_RSPTYP(1U),
  kUSDHC_ResponseLength48Flag = USDHC_CMD_XFR_TYP_RSPTYP(2U),
  kUSDHC_ResponseLength48BusyFlag = USDHC_CMD_XFR_TYP_RSPTYP(3U),
  kUSDHC_EnableCrcCheckFlag = USDHC_CMD_XFR_TYP_CCCEN_MASK,
  kUSDHC_EnableIndexCheckFlag = USDHC_CMD_XFR_TYP_CICEN_MASK,
  kUSDHC_DataPresentFlag = USDHC_CMD_XFR_TYP_DPSEL_MASK
}
 Enum _usdhc_transfer_flag. More...
 
enum  {
  kUSDHC_CommandInhibitFlag = USDHC_PRES_STATE_CIHB_MASK,
  kUSDHC_DataInhibitFlag = USDHC_PRES_STATE_CDIHB_MASK,
  kUSDHC_DataLineActiveFlag = USDHC_PRES_STATE_DLA_MASK,
  kUSDHC_SdClockStableFlag = USDHC_PRES_STATE_SDSTB_MASK,
  kUSDHC_WriteTransferActiveFlag = USDHC_PRES_STATE_WTA_MASK,
  kUSDHC_ReadTransferActiveFlag = USDHC_PRES_STATE_RTA_MASK,
  kUSDHC_BufferWriteEnableFlag = USDHC_PRES_STATE_BWEN_MASK,
  kUSDHC_BufferReadEnableFlag = USDHC_PRES_STATE_BREN_MASK,
  kUSDHC_ReTuningRequestFlag = USDHC_PRES_STATE_RTR_MASK,
  kUSDHC_DelaySettingFinishedFlag = USDHC_PRES_STATE_TSCD_MASK,
  kUSDHC_CardInsertedFlag = USDHC_PRES_STATE_CINST_MASK,
  kUSDHC_CommandLineLevelFlag = USDHC_PRES_STATE_CLSL_MASK,
  kUSDHC_Data0LineLevelFlag = 1U << USDHC_PRES_STATE_DLSL_SHIFT,
  kUSDHC_Data1LineLevelFlag = 1U << (USDHC_PRES_STATE_DLSL_SHIFT + 1U),
  kUSDHC_Data2LineLevelFlag = 1U << (USDHC_PRES_STATE_DLSL_SHIFT + 2U),
  kUSDHC_Data3LineLevelFlag = 1U << (USDHC_PRES_STATE_DLSL_SHIFT + 3U),
  kUSDHC_Data4LineLevelFlag = 1U << (USDHC_PRES_STATE_DLSL_SHIFT + 4U),
  kUSDHC_Data5LineLevelFlag = 1U << (USDHC_PRES_STATE_DLSL_SHIFT + 5U),
  kUSDHC_Data6LineLevelFlag = 1U << (USDHC_PRES_STATE_DLSL_SHIFT + 6U),
  kUSDHC_Data7LineLevelFlag = (int)(1U << (USDHC_PRES_STATE_DLSL_SHIFT + 7U))
}
 Enum _usdhc_present_status_flag. More...
 
enum  {
  kUSDHC_CommandCompleteFlag = USDHC_INT_STATUS_CC_MASK,
  kUSDHC_DataCompleteFlag = USDHC_INT_STATUS_TC_MASK,
  kUSDHC_BlockGapEventFlag = USDHC_INT_STATUS_BGE_MASK,
  kUSDHC_DmaCompleteFlag = USDHC_INT_STATUS_DINT_MASK,
  kUSDHC_BufferWriteReadyFlag = USDHC_INT_STATUS_BWR_MASK,
  kUSDHC_BufferReadReadyFlag = USDHC_INT_STATUS_BRR_MASK,
  kUSDHC_CardInsertionFlag = USDHC_INT_STATUS_CINS_MASK,
  kUSDHC_CardRemovalFlag = USDHC_INT_STATUS_CRM_MASK,
  kUSDHC_CardInterruptFlag = USDHC_INT_STATUS_CINT_MASK,
  kUSDHC_ReTuningEventFlag = USDHC_INT_STATUS_RTE_MASK,
  kUSDHC_TuningPassFlag = USDHC_INT_STATUS_TP_MASK,
  kUSDHC_TuningErrorFlag = USDHC_INT_STATUS_TNE_MASK,
  kUSDHC_CommandTimeoutFlag = USDHC_INT_STATUS_CTOE_MASK,
  kUSDHC_CommandCrcErrorFlag = USDHC_INT_STATUS_CCE_MASK,
  kUSDHC_CommandEndBitErrorFlag = USDHC_INT_STATUS_CEBE_MASK,
  kUSDHC_CommandIndexErrorFlag = USDHC_INT_STATUS_CIE_MASK,
  kUSDHC_DataTimeoutFlag = USDHC_INT_STATUS_DTOE_MASK,
  kUSDHC_DataCrcErrorFlag = USDHC_INT_STATUS_DCE_MASK,
  kUSDHC_DataEndBitErrorFlag = USDHC_INT_STATUS_DEBE_MASK,
  kUSDHC_AutoCommand12ErrorFlag = USDHC_INT_STATUS_AC12E_MASK,
  kUSDHC_DmaErrorFlag = USDHC_INT_STATUS_DMAE_MASK,
  kUSDHC_CommandErrorFlag,
  kUSDHC_DataErrorFlag,
  kUSDHC_ErrorFlag = (kUSDHC_CommandErrorFlag | kUSDHC_DataErrorFlag | kUSDHC_DmaErrorFlag),
  kUSDHC_DataFlag,
  kUSDHC_DataDMAFlag = (kUSDHC_DataCompleteFlag | kUSDHC_DataErrorFlag | kUSDHC_DmaErrorFlag),
  kUSDHC_CommandFlag = (kUSDHC_CommandErrorFlag | kUSDHC_CommandCompleteFlag),
  kUSDHC_CardDetectFlag = (kUSDHC_CardInsertionFlag | kUSDHC_CardRemovalFlag),
  kUSDHC_SDR104TuningFlag = (kUSDHC_TuningErrorFlag | kUSDHC_TuningPassFlag | kUSDHC_ReTuningEventFlag),
  kUSDHC_AllInterruptFlags
}
 Enum _usdhc_interrupt_status_flag. More...
 
enum  {
  kUSDHC_AutoCommand12NotExecutedFlag = USDHC_AUTOCMD12_ERR_STATUS_AC12NE_MASK,
  kUSDHC_AutoCommand12TimeoutFlag = USDHC_AUTOCMD12_ERR_STATUS_AC12TOE_MASK,
  kUSDHC_AutoCommand12EndBitErrorFlag = USDHC_AUTOCMD12_ERR_STATUS_AC12EBE_MASK,
  kUSDHC_AutoCommand12CrcErrorFlag = USDHC_AUTOCMD12_ERR_STATUS_AC12CE_MASK,
  kUSDHC_AutoCommand12IndexErrorFlag = USDHC_AUTOCMD12_ERR_STATUS_AC12IE_MASK,
  kUSDHC_AutoCommand12NotIssuedFlag = USDHC_AUTOCMD12_ERR_STATUS_CNIBAC12E_MASK
}
 Enum _usdhc_auto_command12_error_status_flag. More...
 
enum  {
  kUSDHC_ExecuteTuning = USDHC_AUTOCMD12_ERR_STATUS_EXECUTE_TUNING_MASK,
  kUSDHC_TuningSampleClockSel
}
 Enum _usdhc_standard_tuning. More...
 
enum  {
  kUSDHC_AdmaLenghMismatchFlag = USDHC_ADMA_ERR_STATUS_ADMALME_MASK,
  kUSDHC_AdmaDescriptorErrorFlag = USDHC_ADMA_ERR_STATUS_ADMADCE_MASK
}
 Enum _usdhc_adma_error_status_flag. More...
 
enum  {
  kUSDHC_AdmaErrorStateStopDma = 0x00U,
  kUSDHC_AdmaErrorStateFetchDescriptor = 0x01U,
  kUSDHC_AdmaErrorStateChangeAddress = 0x02U,
  kUSDHC_AdmaErrorStateTransferData = 0x03U,
  kUSDHC_AdmaErrorStateInvalidLength = 0x04U,
  kUSDHC_AdmaErrorStateInvalidDescriptor = 0x08U,
  kUSDHC_AdmaErrorState
}
 Enum _usdhc_adma_error_state. More...
 
enum  {
  kUSDHC_ForceEventAutoCommand12NotExecuted,
  kUSDHC_ForceEventAutoCommand12Timeout = USDHC_FORCE_EVENT_FEVTAC12TOE_MASK,
  kUSDHC_ForceEventAutoCommand12CrcError = USDHC_FORCE_EVENT_FEVTAC12CE_MASK,
  kUSDHC_ForceEventEndBitError = USDHC_FORCE_EVENT_FEVTAC12EBE_MASK,
  kUSDHC_ForceEventAutoCommand12IndexError = USDHC_FORCE_EVENT_FEVTAC12IE_MASK,
  kUSDHC_ForceEventAutoCommand12NotIssued = USDHC_FORCE_EVENT_FEVTCNIBAC12E_MASK,
  kUSDHC_ForceEventCommandTimeout = USDHC_FORCE_EVENT_FEVTCTOE_MASK,
  kUSDHC_ForceEventCommandCrcError = USDHC_FORCE_EVENT_FEVTCCE_MASK,
  kUSDHC_ForceEventCommandEndBitError = USDHC_FORCE_EVENT_FEVTCEBE_MASK,
  kUSDHC_ForceEventCommandIndexError = USDHC_FORCE_EVENT_FEVTCIE_MASK,
  kUSDHC_ForceEventDataTimeout = USDHC_FORCE_EVENT_FEVTDTOE_MASK,
  kUSDHC_ForceEventDataCrcError = USDHC_FORCE_EVENT_FEVTDCE_MASK,
  kUSDHC_ForceEventDataEndBitError = USDHC_FORCE_EVENT_FEVTDEBE_MASK,
  kUSDHC_ForceEventAutoCommand12Error = USDHC_FORCE_EVENT_FEVTAC12E_MASK,
  kUSDHC_ForceEventCardInt = (int)USDHC_FORCE_EVENT_FEVTCINT_MASK,
  kUSDHC_ForceEventDmaError = USDHC_FORCE_EVENT_FEVTDMAE_MASK,
  kUSDHC_ForceEventTuningError = USDHC_FORCE_EVENT_FEVTTNE_MASK,
  kUSDHC_ForceEventsAll
}
 Enum _usdhc_force_event. More...
 
enum  usdhc_transfer_direction_t {
  kUSDHC_TransferDirectionReceive = 1U,
  kUSDHC_TransferDirectionSend = 0U
}
 Data transfer direction. More...
 
enum  usdhc_data_bus_width_t {
  kUSDHC_DataBusWidth1Bit = 0U,
  kUSDHC_DataBusWidth4Bit = 1U,
  kUSDHC_DataBusWidth8Bit = 2U
}
 Data transfer width. More...
 
enum  usdhc_endian_mode_t {
  kUSDHC_EndianModeBig = 0U,
  kUSDHC_EndianModeHalfWordBig = 1U,
  kUSDHC_EndianModeLittle = 2U
}
 Endian mode. More...
 
enum  usdhc_dma_mode_t {
  kUSDHC_DmaModeSimple = 0U,
  kUSDHC_DmaModeAdma1 = 1U,
  kUSDHC_DmaModeAdma2 = 2U,
  kUSDHC_ExternalDMA = 3U
}
 DMA mode. More...
 
enum  {
  kUSDHC_StopAtBlockGapFlag = USDHC_PROT_CTRL_SABGREQ_MASK,
  kUSDHC_ReadWaitControlFlag = USDHC_PROT_CTRL_RWCTL_MASK,
  kUSDHC_InterruptAtBlockGapFlag = USDHC_PROT_CTRL_IABG_MASK,
  kUSDHC_ReadDoneNo8CLK = USDHC_PROT_CTRL_RD_DONE_NO_8CLK_MASK,
  kUSDHC_ExactBlockNumberReadFlag = USDHC_PROT_CTRL_NON_EXACT_BLK_RD_MASK
}
 Enum _usdhc_sdio_control_flag. More...
 
enum  usdhc_boot_mode_t {
  kUSDHC_BootModeNormal = 0U,
  kUSDHC_BootModeAlternative = 1U
}
 MMC card boot mode. More...
 
enum  usdhc_card_command_type_t {
  kCARD_CommandTypeNormal = 0U,
  kCARD_CommandTypeSuspend = 1U,
  kCARD_CommandTypeResume = 2U,
  kCARD_CommandTypeAbort = 3U,
  kCARD_CommandTypeEmpty = 4U
}
 The command type. More...
 
enum  usdhc_card_response_type_t {
  kCARD_ResponseTypeNone = 0U,
  kCARD_ResponseTypeR1 = 1U,
  kCARD_ResponseTypeR1b = 2U,
  kCARD_ResponseTypeR2 = 3U,
  kCARD_ResponseTypeR3 = 4U,
  kCARD_ResponseTypeR4 = 5U,
  kCARD_ResponseTypeR5 = 6U,
  kCARD_ResponseTypeR5b = 7U,
  kCARD_ResponseTypeR6 = 8U,
  kCARD_ResponseTypeR7 = 9U
}
 The command response type. More...
 
enum  {
  kUSDHC_Adma1DescriptorValidFlag = (1U << 0U),
  kUSDHC_Adma1DescriptorEndFlag = (1U << 1U),
  kUSDHC_Adma1DescriptorInterrupFlag = (1U << 2U),
  kUSDHC_Adma1DescriptorActivity1Flag = (1U << 4U),
  kUSDHC_Adma1DescriptorActivity2Flag = (1U << 5U),
  kUSDHC_Adma1DescriptorTypeNop = (kUSDHC_Adma1DescriptorValidFlag),
  kUSDHC_Adma1DescriptorTypeTransfer = (kUSDHC_Adma1DescriptorActivity2Flag | kUSDHC_Adma1DescriptorValidFlag),
  kUSDHC_Adma1DescriptorTypeLink,
  kUSDHC_Adma1DescriptorTypeSetLength = (kUSDHC_Adma1DescriptorActivity1Flag | kUSDHC_Adma1DescriptorValidFlag)
}
 Enum _usdhc_adma1_descriptor_flag. More...
 
enum  {
  kUSDHC_Adma2DescriptorValidFlag = (1U << 0U),
  kUSDHC_Adma2DescriptorEndFlag = (1U << 1U),
  kUSDHC_Adma2DescriptorInterruptFlag = (1U << 2U),
  kUSDHC_Adma2DescriptorActivity1Flag = (1U << 4U),
  kUSDHC_Adma2DescriptorActivity2Flag = (1U << 5U),
  kUSDHC_Adma2DescriptorTypeNop = (kUSDHC_Adma2DescriptorValidFlag),
  kUSDHC_Adma2DescriptorTypeReserved = (kUSDHC_Adma2DescriptorActivity1Flag | kUSDHC_Adma2DescriptorValidFlag),
  kUSDHC_Adma2DescriptorTypeTransfer = (kUSDHC_Adma2DescriptorActivity2Flag | kUSDHC_Adma2DescriptorValidFlag),
  kUSDHC_Adma2DescriptorTypeLink
}
 Enum _usdhc_adma2_descriptor_flag. More...
 
enum  {
  kUSDHC_AdmaDescriptorSingleFlag = 0U,
  kUSDHC_AdmaDescriptorMultipleFlag
}
 Enum _usdhc_adma_flag. More...
 
enum  usdhc_burst_len_t {
  kUSDHC_EnBurstLenForINCR = 0x01U,
  kUSDHC_EnBurstLenForINCR4816 = 0x02U,
  kUSDHC_EnBurstLenForINCR4816WRAP = 0x04U
}
 DMA transfer burst len config. More...
 
enum  {
  kUSDHC_TransferDataNormal = 0U,
  kUSDHC_TransferDataTuning = 1U,
  kUSDHC_TransferDataBoot = 2U,
  kUSDHC_TransferDataBootcontinous = 3U
}
 Enum _usdhc_transfer_data_type. More...
 

Driver version

#define FSL_USDHC_DRIVER_VERSION   (MAKE_VERSION(2U, 7U, 0U))
 Driver version 2.7.0. More...
 

Initialization and deinitialization

void USDHC_Init (USDHC_Type *base, const usdhc_config_t *config)
 USDHC module initialization function. More...
 
void USDHC_Deinit (USDHC_Type *base)
 Deinitializes the USDHC. More...
 
bool USDHC_Reset (USDHC_Type *base, uint32_t mask, uint32_t timeout)
 Resets the USDHC. More...
 

DMA Control

status_t USDHC_SetAdmaTableConfig (USDHC_Type *base, usdhc_adma_config_t *dmaConfig, usdhc_data_t *dataConfig, uint32_t flags)
 Sets the DMA descriptor table configuration. More...
 
status_t USDHC_SetInternalDmaConfig (USDHC_Type *base, usdhc_adma_config_t *dmaConfig, const uint32_t *dataAddr, bool enAutoCmd23)
 Internal DMA configuration. More...
 
status_t USDHC_SetADMA2Descriptor (uint32_t *admaTable, uint32_t admaTableWords, const uint32_t *dataBufferAddr, uint32_t dataBytes, uint32_t flags)
 Sets the ADMA2 descriptor table configuration. More...
 
status_t USDHC_SetADMA1Descriptor (uint32_t *admaTable, uint32_t admaTableWords, const uint32_t *dataBufferAddr, uint32_t dataBytes, uint32_t flags)
 Sets the ADMA1 descriptor table configuration. More...
 
static void USDHC_EnableInternalDMA (USDHC_Type *base, bool enable)
 Enables internal DMA. More...
 

Interrupts

static void USDHC_EnableInterruptStatus (USDHC_Type *base, uint32_t mask)
 Enables the interrupt status. More...
 
static void USDHC_DisableInterruptStatus (USDHC_Type *base, uint32_t mask)
 Disables the interrupt status. More...
 
static void USDHC_EnableInterruptSignal (USDHC_Type *base, uint32_t mask)
 Enables the interrupt signal corresponding to the interrupt status flag. More...
 
static void USDHC_DisableInterruptSignal (USDHC_Type *base, uint32_t mask)
 Disables the interrupt signal corresponding to the interrupt status flag. More...
 

Status

static uint32_t USDHC_GetEnabledInterruptStatusFlags (USDHC_Type *base)
 Gets the enabled interrupt status. More...
 
static uint32_t USDHC_GetInterruptStatusFlags (USDHC_Type *base)
 Gets the current interrupt status. More...
 
static void USDHC_ClearInterruptStatusFlags (USDHC_Type *base, uint32_t mask)
 Clears a specified interrupt status. More...
 
static uint32_t USDHC_GetAutoCommand12ErrorStatusFlags (USDHC_Type *base)
 Gets the status of auto command 12 error. More...
 
static uint32_t USDHC_GetAdmaErrorStatusFlags (USDHC_Type *base)
 Gets the status of the ADMA error. More...
 
static uint32_t USDHC_GetPresentStatusFlags (USDHC_Type *base)
 Gets a present status. More...
 

Bus Operations

void USDHC_GetCapability (USDHC_Type *base, usdhc_capability_t *capability)
 Gets the capability information. More...
 
static void USDHC_ForceClockOn (USDHC_Type *base, bool enable)
 Forces the card clock on. More...
 
uint32_t USDHC_SetSdClock (USDHC_Type *base, uint32_t srcClock_Hz, uint32_t busClock_Hz)
 Sets the SD bus clock frequency. More...
 
bool USDHC_SetCardActive (USDHC_Type *base, uint32_t timeout)
 Sends 80 clocks to the card to set it to the active state. More...
 
static void USDHC_AssertHardwareReset (USDHC_Type *base, bool high)
 Triggers a hardware reset. More...
 
static void USDHC_SetDataBusWidth (USDHC_Type *base, usdhc_data_bus_width_t width)
 Sets the data transfer width. More...
 
static void USDHC_WriteData (USDHC_Type *base, uint32_t data)
 Fills the data port. More...
 
static uint32_t USDHC_ReadData (USDHC_Type *base)
 Retrieves the data from the data port. More...
 
void USDHC_SendCommand (USDHC_Type *base, usdhc_command_t *command)
 Sends command function. More...
 
static void USDHC_EnableWakeupEvent (USDHC_Type *base, uint32_t mask, bool enable)
 Enables or disables a wakeup event in low-power mode. More...
 
static void USDHC_CardDetectByData3 (USDHC_Type *base, bool enable)
 Detects card insert status. More...
 
static bool USDHC_DetectCardInsert (USDHC_Type *base)
 Detects card insert status. More...
 
static void USDHC_EnableSdioControl (USDHC_Type *base, uint32_t mask, bool enable)
 Enables or disables the SDIO card control. More...
 
static void USDHC_SetContinueRequest (USDHC_Type *base)
 Restarts a transaction which has stopped at the block GAP for the SDIO card. More...
 
static void USDHC_RequestStopAtBlockGap (USDHC_Type *base, bool enable)
 Request stop at block gap function. More...
 
void USDHC_SetMmcBootConfig (USDHC_Type *base, const usdhc_boot_config_t *config)
 Configures the MMC boot feature. More...
 
static void USDHC_EnableMmcBoot (USDHC_Type *base, bool enable)
 Enables or disables the mmc boot mode. More...
 
static void USDHC_SetForceEvent (USDHC_Type *base, uint32_t mask)
 Forces generating events according to the given mask. More...
 
static void UDSHC_SelectVoltage (USDHC_Type *base, bool en18v)
 Selects the USDHC output voltage. More...
 
static bool USDHC_RequestTuningForSDR50 (USDHC_Type *base)
 Checks the SDR50 mode request tuning bit. More...
 
static bool USDHC_RequestReTuning (USDHC_Type *base)
 Checks the request re-tuning bit. More...
 
static void USDHC_EnableAutoTuning (USDHC_Type *base, bool enable)
 The SDR104 mode auto tuning enable and disable. More...
 
void USDHC_EnableAutoTuningForCmdAndData (USDHC_Type *base)
 The auto tuning enbale for CMD/DATA line. More...
 
void USDHC_EnableManualTuning (USDHC_Type *base, bool enable)
 Manual tuning trigger or abort. More...
 
status_t USDHC_AdjustDelayForManualTuning (USDHC_Type *base, uint32_t delay)
 Adjusts delay for mannual tuning. More...
 
static void USDHC_SetStandardTuningCounter (USDHC_Type *base, uint8_t counter)
 set tuning counter tuning. More...
 
void USDHC_EnableStandardTuning (USDHC_Type *base, uint32_t tuningStartTap, uint32_t step, bool enable)
 The enable standard tuning function. More...
 
static uint32_t USDHC_GetExecuteStdTuningStatus (USDHC_Type *base)
 Gets execute STD tuning status. More...
 
static uint32_t USDHC_CheckStdTuningResult (USDHC_Type *base)
 Checks STD tuning result. More...
 
static uint32_t USDHC_CheckTuningError (USDHC_Type *base)
 Checks tuning error. More...
 
void USDHC_EnableDDRMode (USDHC_Type *base, bool enable, uint32_t nibblePos)
 The enable/disable DDR mode. More...
 
static void USDHC_EnableHS400Mode (USDHC_Type *base, bool enable)
 The enable/disable HS400 mode. More...
 
static void USDHC_ResetStrobeDLL (USDHC_Type *base)
 Resets the strobe DLL. More...
 
static void USDHC_EnableStrobeDLL (USDHC_Type *base, bool enable)
 Enables/disables the strobe DLL. More...
 
void USDHC_ConfigStrobeDLL (USDHC_Type *base, uint32_t delayTarget, uint32_t updateInterval)
 Configs the strobe DLL delay target and update interval. More...
 
static void USDHC_SetStrobeDllOverride (USDHC_Type *base, uint32_t delayTaps)
 Enables manual override for slave delay chain using STROBE_SLV_OVERRIDE_VAL. More...
 
static uint32_t USDHC_GetStrobeDLLStatus (USDHC_Type *base)
 Gets the strobe DLL status. More...
 
void USDHC_SetDataConfig (USDHC_Type *base, usdhc_transfer_direction_t dataDirection, uint32_t blockCount, uint32_t blockSize)
 USDHC data configuration. More...
 

Transactional functions

void USDHC_TransferCreateHandle (USDHC_Type *base, usdhc_handle_t *handle, const usdhc_transfer_callback_t *callback, void *userData)
 Creates the USDHC handle. More...
 
status_t USDHC_TransferNonBlocking (USDHC_Type *base, usdhc_handle_t *handle, usdhc_adma_config_t *dmaConfig, usdhc_transfer_t *transfer)
 Transfers the command/data using an interrupt and an asynchronous method. More...
 
status_t USDHC_TransferBlocking (USDHC_Type *base, usdhc_adma_config_t *dmaConfig, usdhc_transfer_t *transfer)
 Transfers the command/data using a blocking method. More...
 
void USDHC_TransferHandleIRQ (USDHC_Type *base, usdhc_handle_t *handle)
 IRQ handler for the USDHC. More...
 

Data Structure Documentation

struct usdhc_adma2_descriptor_t

Data Fields

uint32_t attribute
 The control and status field. More...
 
const uint32_t * address
 The address field. More...
 

Field Documentation

uint32_t usdhc_adma2_descriptor_t::attribute
const uint32_t* usdhc_adma2_descriptor_t::address
struct usdhc_capability_t

Defines a structure to save the capability information of USDHC.

Data Fields

uint32_t sdVersion
 Support SD card/sdio version. More...
 
uint32_t mmcVersion
 Support EMMC card version. More...
 
uint32_t maxBlockLength
 Maximum block length united as byte. More...
 
uint32_t maxBlockCount
 Maximum block count can be set one time. More...
 
uint32_t flags
 Capability flags to indicate the support information(_usdhc_capability_flag). More...
 

Field Documentation

uint32_t usdhc_capability_t::sdVersion
uint32_t usdhc_capability_t::mmcVersion
uint32_t usdhc_capability_t::maxBlockLength
uint32_t usdhc_capability_t::maxBlockCount
uint32_t usdhc_capability_t::flags
struct usdhc_boot_config_t

Data Fields

uint32_t ackTimeoutCount
 Timeout value for the boot ACK. More...
 
usdhc_boot_mode_t bootMode
 Boot mode selection. More...
 
uint32_t blockCount
 Stop at block gap value of automatic mode. More...
 
size_t blockSize
 Block size. More...
 
bool enableBootAck
 Enable or disable boot ACK. More...
 
bool enableAutoStopAtBlockGap
 Enable or disable auto stop at block gap function in boot period. More...
 

Field Documentation

uint32_t usdhc_boot_config_t::ackTimeoutCount

The available range is 0 ~ 15.

usdhc_boot_mode_t usdhc_boot_config_t::bootMode
uint32_t usdhc_boot_config_t::blockCount

Available range is 0 ~ 65535.

size_t usdhc_boot_config_t::blockSize
bool usdhc_boot_config_t::enableBootAck
bool usdhc_boot_config_t::enableAutoStopAtBlockGap
struct usdhc_config_t

Data Fields

uint32_t dataTimeout
 Data timeout value. More...
 
usdhc_endian_mode_t endianMode
 Endian mode. More...
 
uint8_t readWatermarkLevel
 Watermark level for DMA read operation. More...
 
uint8_t writeWatermarkLevel
 Watermark level for DMA write operation. More...
 

Field Documentation

uint32_t usdhc_config_t::dataTimeout
usdhc_endian_mode_t usdhc_config_t::endianMode
uint8_t usdhc_config_t::readWatermarkLevel

Available range is 1 ~ 128.

uint8_t usdhc_config_t::writeWatermarkLevel

Available range is 1 ~ 128.

struct usdhc_command_t

Defines card command-related attribute.

Data Fields

uint32_t index
 Command index. More...
 
uint32_t argument
 Command argument. More...
 
usdhc_card_command_type_t type
 Command type. More...
 
usdhc_card_response_type_t responseType
 Command response type. More...
 
uint32_t response [4U]
 Response for this command. More...
 
uint32_t responseErrorFlags
 Response error flag, which need to check the command reponse. More...
 
uint32_t flags
 Cmd flags. More...
 

Field Documentation

uint32_t usdhc_command_t::index
uint32_t usdhc_command_t::argument
usdhc_card_command_type_t usdhc_command_t::type
usdhc_card_response_type_t usdhc_command_t::responseType
uint32_t usdhc_command_t::response[4U]
uint32_t usdhc_command_t::responseErrorFlags
uint32_t usdhc_command_t::flags
struct usdhc_adma_config_t

Data Fields

usdhc_dma_mode_t dmaMode
 DMA mode. More...
 
uint32_t * admaTable
 ADMA table address, can't be null if transfer way is ADMA1/ADMA2. More...
 
uint32_t admaTableWords
 ADMA table length united as words, can't be 0 if transfer way is ADMA1/ADMA2. More...
 

Field Documentation

usdhc_dma_mode_t usdhc_adma_config_t::dmaMode
uint32_t* usdhc_adma_config_t::admaTable
uint32_t usdhc_adma_config_t::admaTableWords
struct usdhc_scatter_gather_data_list_t

Allow application register uncontinuous data buffer for data transfer.

struct usdhc_scatter_gather_data_t

Defines a structure to contain data-related attribute. The 'enableIgnoreError' is used when upper card driver wants to ignore the error event to read/write all the data and not to stop read/write immediately when an error event happens. For example, bus testing procedure for MMC card.

Data Fields

bool enableAutoCommand12
 Enable auto CMD12. More...
 
bool enableAutoCommand23
 Enable auto CMD23. More...
 
bool enableIgnoreError
 Enable to ignore error event to read/write all the data. More...
 
usdhc_transfer_direction_t dataDirection
 data direction
 
uint8_t dataType
 this is used to distinguish the normal/tuning/boot data. More...
 
size_t blockSize
 Block size. More...
 
usdhc_scatter_gather_data_list_t sgData
 scatter gather data
 

Field Documentation

bool usdhc_scatter_gather_data_t::enableAutoCommand12
bool usdhc_scatter_gather_data_t::enableAutoCommand23
bool usdhc_scatter_gather_data_t::enableIgnoreError
uint8_t usdhc_scatter_gather_data_t::dataType
size_t usdhc_scatter_gather_data_t::blockSize
struct usdhc_scatter_gather_transfer_t

Data Fields

usdhc_scatter_gather_data_tdata
 Data to transfer. More...
 
usdhc_command_tcommand
 Command to send. More...
 

Field Documentation

usdhc_scatter_gather_data_t* usdhc_scatter_gather_transfer_t::data
usdhc_command_t* usdhc_scatter_gather_transfer_t::command
struct usdhc_data_t

Defines a structure to contain data-related attribute. The 'enableIgnoreError' is used when upper card driver wants to ignore the error event to read/write all the data and not to stop read/write immediately when an error event happens. For example, bus testing procedure for MMC card.

Data Fields

bool enableAutoCommand12
 Enable auto CMD12. More...
 
bool enableAutoCommand23
 Enable auto CMD23. More...
 
bool enableIgnoreError
 Enable to ignore error event to read/write all the data. More...
 
uint8_t dataType
 this is used to distinguish the normal/tuning/boot data. More...
 
size_t blockSize
 Block size. More...
 
uint32_t blockCount
 Block count. More...
 
uint32_t * rxData
 Buffer to save data read. More...
 
const uint32_t * txData
 Data buffer to write. More...
 

Field Documentation

bool usdhc_data_t::enableAutoCommand12
bool usdhc_data_t::enableAutoCommand23
bool usdhc_data_t::enableIgnoreError
uint8_t usdhc_data_t::dataType
size_t usdhc_data_t::blockSize
uint32_t usdhc_data_t::blockCount
uint32_t* usdhc_data_t::rxData
const uint32_t* usdhc_data_t::txData
struct usdhc_transfer_t

Data Fields

usdhc_data_tdata
 Data to transfer. More...
 
usdhc_command_tcommand
 Command to send. More...
 

Field Documentation

usdhc_data_t* usdhc_transfer_t::data
usdhc_command_t* usdhc_transfer_t::command
struct usdhc_transfer_callback_t

Data Fields

void(* CardInserted )(USDHC_Type *base, void *userData)
 Card inserted occurs when DAT3/CD pin is for card detect.
 
void(* CardRemoved )(USDHC_Type *base, void *userData)
 Card removed occurs.
 
void(* SdioInterrupt )(USDHC_Type *base, void *userData)
 SDIO card interrupt occurs.
 
void(* BlockGap )(USDHC_Type *base, void *userData)
 stopped at block gap event
 
void(* TransferComplete )(USDHC_Type *base, usdhc_handle_t *handle, status_t status, void *userData)
 Transfer complete callback. More...
 
void(* ReTuning )(USDHC_Type *base, void *userData)
 Handle the re-tuning. More...
 

Field Documentation

void(* usdhc_transfer_callback_t::TransferComplete)(USDHC_Type *base, usdhc_handle_t *handle, status_t status, void *userData)
void(* usdhc_transfer_callback_t::ReTuning)(USDHC_Type *base, void *userData)
struct _usdhc_handle

USDHC handle typedef.

Defines the structure to save the USDHC state information and callback function.

Note
All the fields except interruptFlags and transferredWords must be allocated by the user.

Data Fields

usdhc_data_t *volatile data
 Transfer parameter. More...
 
usdhc_command_t *volatile command
 Transfer parameter. More...
 
volatile uint32_t transferredWords
 Transfer status. More...
 
usdhc_transfer_callback_t callback
 Callback function. More...
 
void * userData
 Parameter for transfer complete callback. More...
 

Field Documentation

usdhc_data_t* volatile usdhc_handle_t::data

Data to transfer.

usdhc_command_t* volatile usdhc_handle_t::command

Command to send.

volatile uint32_t usdhc_handle_t::transferredWords

Words transferred by DATAPORT way.

usdhc_transfer_callback_t usdhc_handle_t::callback
void* usdhc_handle_t::userData
struct usdhc_host_t

Data Fields

USDHC_Type * base
 USDHC peripheral base address. More...
 
uint32_t sourceClock_Hz
 USDHC source clock frequency united in Hz. More...
 
usdhc_config_t config
 USDHC configuration. More...
 
usdhc_capability_t capability
 USDHC capability information. More...
 
usdhc_transfer_function_t transfer
 USDHC transfer function. More...
 

Field Documentation

USDHC_Type* usdhc_host_t::base
uint32_t usdhc_host_t::sourceClock_Hz
usdhc_config_t usdhc_host_t::config
usdhc_capability_t usdhc_host_t::capability
usdhc_transfer_function_t usdhc_host_t::transfer

Macro Definition Documentation

#define FSL_USDHC_DRIVER_VERSION   (MAKE_VERSION(2U, 7U, 0U))
#define USDHC_ADMA1_ADDRESS_ALIGN   (4096U)
#define USDHC_ADMA1_LENGTH_ALIGN   (4096U)
#define USDHC_ADMA2_ADDRESS_ALIGN   (4U)
#define USDHC_ADMA2_LENGTH_ALIGN   (4U)
#define USDHC_ADMA1_DESCRIPTOR_ADDRESS_SHIFT   (12U)
ADMA1 descriptor table
Address/page field Reserved Attribute
31 12 11 6 05 04 03 02 01 00
address or data length 000000 Act2 Act1 0 Int End Valid
ADMA2 action
Act2 Act1 Comment 31-28 27-12
0 0 No op Don't care
0 1 Set data length 0000 Data Length
1 0 Transfer data Data address
1 1 Link descriptor Descriptor address
#define USDHC_ADMA1_DESCRIPTOR_ADDRESS_MASK   (0xFFFFFU)
#define USDHC_ADMA1_DESCRIPTOR_LENGTH_SHIFT   (12U)
#define USDHC_ADMA1_DESCRIPTOR_LENGTH_MASK   (0xFFFFU)
#define USDHC_ADMA1_DESCRIPTOR_MAX_LENGTH_PER_ENTRY   (USDHC_ADMA1_DESCRIPTOR_LENGTH_MASK + 1U - 4096U)

Since the max transfer size ADMA1 support is 65535 which is indivisible by 4096, so to make sure a large data load transfer (>64KB) continuously (require the data address be always align with 4096), software will set the maximum data length for ADMA1 to (64 - 4)KB.

#define USDHC_ADMA2_DESCRIPTOR_LENGTH_SHIFT   (16U)
ADMA2 descriptor table
Address field Length Reserved Attribute
63 32 31 16 15 06 05 04 03 02 01 00
32-bit address 16-bit length 0000000000 Act2 Act1 0 Int End Valid
ADMA2 action
Act2 Act1 Comment Operation
0 0 No op Don't care
0 1 Reserved Read this line and go to next one
1 0 Transfer data Transfer data with address and length set in this descriptor line
1 1 Link descriptor Link to another descriptor
#define USDHC_ADMA2_DESCRIPTOR_LENGTH_MASK   (0xFFFFU)
#define USDHC_ADMA2_DESCRIPTOR_MAX_LENGTH_PER_ENTRY   (USDHC_ADMA2_DESCRIPTOR_LENGTH_MASK - 3U)

Typedef Documentation

typedef uint32_t usdhc_adma1_descriptor_t
typedef status_t(* usdhc_transfer_function_t)(USDHC_Type *base, usdhc_transfer_t *content)

Enumeration Type Documentation

anonymous enum

USDHC status.

Enumerator
kStatus_USDHC_BusyTransferring 

Transfer is on-going.

kStatus_USDHC_PrepareAdmaDescriptorFailed 

Set DMA descriptor failed.

kStatus_USDHC_SendCommandFailed 

Send command failed.

kStatus_USDHC_TransferDataFailed 

Transfer data failed.

kStatus_USDHC_DMADataAddrNotAlign 

Data address not aligned.

kStatus_USDHC_ReTuningRequest 

Re-tuning request.

kStatus_USDHC_TuningError 

Tuning error.

kStatus_USDHC_NotSupport 

Not support.

kStatus_USDHC_TransferDataComplete 

Transfer data complete.

kStatus_USDHC_SendCommandSuccess 

Transfer command complete.

kStatus_USDHC_TransferDMAComplete 

Transfer DMA complete.

anonymous enum

Host controller capabilities flag mask.

Enumerator
kUSDHC_SupportAdmaFlag 

Support ADMA.

kUSDHC_SupportHighSpeedFlag 

Support high-speed.

kUSDHC_SupportDmaFlag 

Support DMA.

kUSDHC_SupportSuspendResumeFlag 

Support suspend/resume.

kUSDHC_SupportV330Flag 

Support voltage 3.3V.

kUSDHC_SupportV300Flag 

Support voltage 3.0V.

kUSDHC_SupportV180Flag 

Support voltage 1.8V.

kUSDHC_Support4BitFlag 

Flag in HTCAPBLT_MBL's position, supporting 4-bit mode.

kUSDHC_Support8BitFlag 

Flag in HTCAPBLT_MBL's position, supporting 8-bit mode.

kUSDHC_SupportDDR50Flag 

SD version 3.0 new feature, supporting DDR50 mode.

kUSDHC_SupportSDR104Flag 

Support SDR104 mode.

kUSDHC_SupportSDR50Flag 

Support SDR50 mode.

anonymous enum

Wakeup event mask.

Enumerator
kUSDHC_WakeupEventOnCardInt 

Wakeup on card interrupt.

kUSDHC_WakeupEventOnCardInsert 

Wakeup on card insertion.

kUSDHC_WakeupEventOnCardRemove 

Wakeup on card removal.

kUSDHC_WakeupEventsAll 

All wakeup events.

anonymous enum

Reset type mask.

Enumerator
kUSDHC_ResetAll 

Reset all except card detection.

kUSDHC_ResetCommand 

Reset command line.

kUSDHC_ResetData 

Reset data line.

kUSDHC_ResetTuning 

Reset tuning circuit.

kUSDHC_ResetsAll 

All reset types.

anonymous enum

Transfer flag mask.

Enumerator
kUSDHC_EnableDmaFlag 

Enable DMA.

kUSDHC_CommandTypeSuspendFlag 

Suspend command.

kUSDHC_CommandTypeResumeFlag 

Resume command.

kUSDHC_CommandTypeAbortFlag 

Abort command.

kUSDHC_EnableBlockCountFlag 

Enable block count.

kUSDHC_EnableAutoCommand12Flag 

Enable auto CMD12.

kUSDHC_DataReadFlag 

Enable data read.

kUSDHC_MultipleBlockFlag 

Multiple block data read/write.

kUSDHC_EnableAutoCommand23Flag 

Enable auto CMD23.

kUSDHC_ResponseLength136Flag 

136-bit response length.

kUSDHC_ResponseLength48Flag 

48-bit response length.

kUSDHC_ResponseLength48BusyFlag 

48-bit response length with busy status.

kUSDHC_EnableCrcCheckFlag 

Enable CRC check.

kUSDHC_EnableIndexCheckFlag 

Enable index check.

kUSDHC_DataPresentFlag 

Data present flag.

anonymous enum

Present status flag mask.

Enumerator
kUSDHC_CommandInhibitFlag 

Command inhibit.

kUSDHC_DataInhibitFlag 

Data inhibit.

kUSDHC_DataLineActiveFlag 

Data line active.

kUSDHC_SdClockStableFlag 

SD bus clock stable.

kUSDHC_WriteTransferActiveFlag 

Write transfer active.

kUSDHC_ReadTransferActiveFlag 

Read transfer active.

kUSDHC_BufferWriteEnableFlag 

Buffer write enable.

kUSDHC_BufferReadEnableFlag 

Buffer read enable.

kUSDHC_ReTuningRequestFlag 

Re-tuning request flag, only used for SDR104 mode.

kUSDHC_DelaySettingFinishedFlag 

Delay setting finished flag.

kUSDHC_CardInsertedFlag 

Card inserted.

kUSDHC_CommandLineLevelFlag 

Command line signal level.

kUSDHC_Data0LineLevelFlag 

Data0 line signal level.

kUSDHC_Data1LineLevelFlag 

Data1 line signal level.

kUSDHC_Data2LineLevelFlag 

Data2 line signal level.

kUSDHC_Data3LineLevelFlag 

Data3 line signal level.

kUSDHC_Data4LineLevelFlag 

Data4 line signal level.

kUSDHC_Data5LineLevelFlag 

Data5 line signal level.

kUSDHC_Data6LineLevelFlag 

Data6 line signal level.

kUSDHC_Data7LineLevelFlag 

Data7 line signal level.

anonymous enum

Interrupt status flag mask.

Enumerator
kUSDHC_CommandCompleteFlag 

Command complete.

kUSDHC_DataCompleteFlag 

Data complete.

kUSDHC_BlockGapEventFlag 

Block gap event.

kUSDHC_DmaCompleteFlag 

DMA interrupt.

kUSDHC_BufferWriteReadyFlag 

Buffer write ready.

kUSDHC_BufferReadReadyFlag 

Buffer read ready.

kUSDHC_CardInsertionFlag 

Card inserted.

kUSDHC_CardRemovalFlag 

Card removed.

kUSDHC_CardInterruptFlag 

Card interrupt.

kUSDHC_ReTuningEventFlag 

Re-Tuning event, only for SD3.0 SDR104 mode.

kUSDHC_TuningPassFlag 

SDR104 mode tuning pass flag.

kUSDHC_TuningErrorFlag 

SDR104 tuning error flag.

kUSDHC_CommandTimeoutFlag 

Command timeout error.

kUSDHC_CommandCrcErrorFlag 

Command CRC error.

kUSDHC_CommandEndBitErrorFlag 

Command end bit error.

kUSDHC_CommandIndexErrorFlag 

Command index error.

kUSDHC_DataTimeoutFlag 

Data timeout error.

kUSDHC_DataCrcErrorFlag 

Data CRC error.

kUSDHC_DataEndBitErrorFlag 

Data end bit error.

kUSDHC_AutoCommand12ErrorFlag 

Auto CMD12 error.

kUSDHC_DmaErrorFlag 

DMA error.

kUSDHC_CommandErrorFlag 

Command error.

kUSDHC_DataErrorFlag 

Data error.

kUSDHC_ErrorFlag 

All error.

kUSDHC_DataFlag 

Data interrupts.

kUSDHC_DataDMAFlag 

Data interrupts.

kUSDHC_CommandFlag 

Command interrupts.

kUSDHC_CardDetectFlag 

Card detection interrupts.

kUSDHC_SDR104TuningFlag 

SDR104 tuning flag.

kUSDHC_AllInterruptFlags 

All flags mask.

anonymous enum

Auto CMD12 error status flag mask.

Enumerator
kUSDHC_AutoCommand12NotExecutedFlag 

Not executed error.

kUSDHC_AutoCommand12TimeoutFlag 

Timeout error.

kUSDHC_AutoCommand12EndBitErrorFlag 

End bit error.

kUSDHC_AutoCommand12CrcErrorFlag 

CRC error.

kUSDHC_AutoCommand12IndexErrorFlag 

Index error.

kUSDHC_AutoCommand12NotIssuedFlag 

Not issued error.

anonymous enum

Standard tuning flag.

Enumerator
kUSDHC_ExecuteTuning 

Used to start tuning procedure.

kUSDHC_TuningSampleClockSel 

When std_tuning_en bit is set, this bit is used to select sampleing clock.

anonymous enum

ADMA error status flag mask.

Enumerator
kUSDHC_AdmaLenghMismatchFlag 

Length mismatch error.

kUSDHC_AdmaDescriptorErrorFlag 

Descriptor error.

anonymous enum

ADMA error state.

This state is the detail state when ADMA error has occurred.

Enumerator
kUSDHC_AdmaErrorStateStopDma 

Stop DMA, previous location set in the ADMA system address is errored address.

kUSDHC_AdmaErrorStateFetchDescriptor 

Fetch descriptor, current location set in the ADMA system address is errored address.

kUSDHC_AdmaErrorStateChangeAddress 

Change address, no DMA error has occurred.

kUSDHC_AdmaErrorStateTransferData 

Transfer data, previous location set in the ADMA system address is errored address.

kUSDHC_AdmaErrorStateInvalidLength 

Invalid length in ADMA descriptor.

kUSDHC_AdmaErrorStateInvalidDescriptor 

Invalid descriptor fetched by ADMA.

kUSDHC_AdmaErrorState 

ADMA error state.

anonymous enum

Force event bit position.

Enumerator
kUSDHC_ForceEventAutoCommand12NotExecuted 

Auto CMD12 not executed error.

kUSDHC_ForceEventAutoCommand12Timeout 

Auto CMD12 timeout error.

kUSDHC_ForceEventAutoCommand12CrcError 

Auto CMD12 CRC error.

kUSDHC_ForceEventEndBitError 

Auto CMD12 end bit error.

kUSDHC_ForceEventAutoCommand12IndexError 

Auto CMD12 index error.

kUSDHC_ForceEventAutoCommand12NotIssued 

Auto CMD12 not issued error.

kUSDHC_ForceEventCommandTimeout 

Command timeout error.

kUSDHC_ForceEventCommandCrcError 

Command CRC error.

kUSDHC_ForceEventCommandEndBitError 

Command end bit error.

kUSDHC_ForceEventCommandIndexError 

Command index error.

kUSDHC_ForceEventDataTimeout 

Data timeout error.

kUSDHC_ForceEventDataCrcError 

Data CRC error.

kUSDHC_ForceEventDataEndBitError 

Data end bit error.

kUSDHC_ForceEventAutoCommand12Error 

Auto CMD12 error.

kUSDHC_ForceEventCardInt 

Card interrupt.

kUSDHC_ForceEventDmaError 

Dma error.

kUSDHC_ForceEventTuningError 

Tuning error.

kUSDHC_ForceEventsAll 

All force event flags mask.

Enumerator
kUSDHC_TransferDirectionReceive 

USDHC transfer direction receive.

kUSDHC_TransferDirectionSend 

USDHC transfer direction send.

Enumerator
kUSDHC_DataBusWidth1Bit 

1-bit mode

kUSDHC_DataBusWidth4Bit 

4-bit mode

kUSDHC_DataBusWidth8Bit 

8-bit mode

Enumerator
kUSDHC_EndianModeBig 

Big endian mode.

kUSDHC_EndianModeHalfWordBig 

Half word big endian mode.

kUSDHC_EndianModeLittle 

Little endian mode.

Enumerator
kUSDHC_DmaModeSimple 

External DMA.

kUSDHC_DmaModeAdma1 

ADMA1 is selected.

kUSDHC_DmaModeAdma2 

ADMA2 is selected.

kUSDHC_ExternalDMA 

External DMA mode selected.

anonymous enum

SDIO control flag mask.

Enumerator
kUSDHC_StopAtBlockGapFlag 

Stop at block gap.

kUSDHC_ReadWaitControlFlag 

Read wait control.

kUSDHC_InterruptAtBlockGapFlag 

Interrupt at block gap.

kUSDHC_ReadDoneNo8CLK 

Read done without 8 clk for block gap.

kUSDHC_ExactBlockNumberReadFlag 

Exact block number read.

Enumerator
kUSDHC_BootModeNormal 

Normal boot.

kUSDHC_BootModeAlternative 

Alternative boot.

Enumerator
kCARD_CommandTypeNormal 

Normal command.

kCARD_CommandTypeSuspend 

Suspend command.

kCARD_CommandTypeResume 

Resume command.

kCARD_CommandTypeAbort 

Abort command.

kCARD_CommandTypeEmpty 

Empty command.

Defines the command response type from card to host controller.

Enumerator
kCARD_ResponseTypeNone 

Response type: none.

kCARD_ResponseTypeR1 

Response type: R1.

kCARD_ResponseTypeR1b 

Response type: R1b.

kCARD_ResponseTypeR2 

Response type: R2.

kCARD_ResponseTypeR3 

Response type: R3.

kCARD_ResponseTypeR4 

Response type: R4.

kCARD_ResponseTypeR5 

Response type: R5.

kCARD_ResponseTypeR5b 

Response type: R5b.

kCARD_ResponseTypeR6 

Response type: R6.

kCARD_ResponseTypeR7 

Response type: R7.

anonymous enum

The mask for the control/status field in ADMA1 descriptor.

Enumerator
kUSDHC_Adma1DescriptorValidFlag 

Valid flag.

kUSDHC_Adma1DescriptorEndFlag 

End flag.

kUSDHC_Adma1DescriptorInterrupFlag 

Interrupt flag.

kUSDHC_Adma1DescriptorActivity1Flag 

Activity 1 flag.

kUSDHC_Adma1DescriptorActivity2Flag 

Activity 2 flag.

kUSDHC_Adma1DescriptorTypeNop 

No operation.

kUSDHC_Adma1DescriptorTypeTransfer 

Transfer data.

kUSDHC_Adma1DescriptorTypeLink 

Link descriptor.

kUSDHC_Adma1DescriptorTypeSetLength 

Set data length.

anonymous enum

ADMA1 descriptor control and status mask.

Enumerator
kUSDHC_Adma2DescriptorValidFlag 

Valid flag.

kUSDHC_Adma2DescriptorEndFlag 

End flag.

kUSDHC_Adma2DescriptorInterruptFlag 

Interrupt flag.

kUSDHC_Adma2DescriptorActivity1Flag 

Activity 1 mask.

kUSDHC_Adma2DescriptorActivity2Flag 

Activity 2 mask.

kUSDHC_Adma2DescriptorTypeNop 

No operation.

kUSDHC_Adma2DescriptorTypeReserved 

Reserved.

kUSDHC_Adma2DescriptorTypeTransfer 

Transfer type.

kUSDHC_Adma2DescriptorTypeLink 

Link type.

anonymous enum

ADMA descriptor configuration flag.

Enumerator
kUSDHC_AdmaDescriptorSingleFlag 

Try to finish the transfer in a single ADMA descriptor.

If transfer size is bigger than one ADMA descriptor's ability, new another descriptor for data transfer.

kUSDHC_AdmaDescriptorMultipleFlag 

Create multiple ADMA descriptors within the ADMA table, this is used for mmc boot mode specifically, which need to modify the ADMA descriptor on the fly, so the flag should be used combining with stop at block gap feature.

Enumerator
kUSDHC_EnBurstLenForINCR 

Enable burst len for INCR.

kUSDHC_EnBurstLenForINCR4816 

Enable burst len for INCR4/INCR8/INCR16.

kUSDHC_EnBurstLenForINCR4816WRAP 

Enable burst len for INCR4/8/16 WRAP.

anonymous enum

Tansfer data type definition.

Enumerator
kUSDHC_TransferDataNormal 

Transfer normal read/write data.

kUSDHC_TransferDataTuning 

Transfer tuning data.

kUSDHC_TransferDataBoot 

Transfer boot data.

kUSDHC_TransferDataBootcontinous 

Transfer boot data continuously.

Function Documentation

void USDHC_Init ( USDHC_Type *  base,
const usdhc_config_t config 
)

Configures the USDHC according to the user configuration.

Example:

config.cardDetectDat3 = false;
config.dmaMode = kUSDHC_DmaModeAdma2;
config.readWatermarkLevel = 128U;
config.writeWatermarkLevel = 128U;
USDHC_Init(USDHC, &config);
Parameters
baseUSDHC peripheral base address.
configUSDHC configuration information.
Return values
kStatus_SuccessOperate successfully.
void USDHC_Deinit ( USDHC_Type *  base)
Parameters
baseUSDHC peripheral base address.
bool USDHC_Reset ( USDHC_Type *  base,
uint32_t  mask,
uint32_t  timeout 
)
Parameters
baseUSDHC peripheral base address.
maskThe reset type mask(_usdhc_reset).
timeoutTimeout for reset.
Return values
trueReset successfully.
falseReset failed.
status_t USDHC_SetAdmaTableConfig ( USDHC_Type *  base,
usdhc_adma_config_t dmaConfig,
usdhc_data_t dataConfig,
uint32_t  flags 
)

A high level DMA descriptor configuration function.

Parameters
baseUSDHC peripheral base address.
dmaConfigADMA configuration
dataConfigData descriptor
flagsADAM descriptor flag, used to indicate to create multiple or single descriptor, please refer to enum _usdhc_adma_flag.
Return values
kStatus_OutOfRangeADMA descriptor table length isn't enough to describe data.
kStatus_SuccessOperate successfully.
status_t USDHC_SetInternalDmaConfig ( USDHC_Type *  base,
usdhc_adma_config_t dmaConfig,
const uint32_t *  dataAddr,
bool  enAutoCmd23 
)

This function is used to config the USDHC DMA related registers.

Parameters
baseUSDHC peripheral base address.
dmaConfigADMA configuration.
dataAddrTransfer data address, a simple DMA parameter, if ADMA is used, leave it to NULL.
enAutoCmd23Flag to indicate Auto CMD23 is enable or not, a simple DMA parameter, if ADMA is used, leave it to false.
Return values
kStatus_OutOfRangeADMA descriptor table length isn't enough to describe data.
kStatus_SuccessOperate successfully.
status_t USDHC_SetADMA2Descriptor ( uint32_t *  admaTable,
uint32_t  admaTableWords,
const uint32_t *  dataBufferAddr,
uint32_t  dataBytes,
uint32_t  flags 
)
Parameters
admaTableADMA table address.
admaTableWordsADMA table length.
dataBufferAddrData buffer address.
dataBytesData Data length.
flagsADAM descriptor flag, used to indicate to create multiple or single descriptor, please refer to enum _usdhc_adma_flag.
Return values
kStatus_OutOfRangeADMA descriptor table length isn't enough to describe data.
kStatus_SuccessOperate successfully.
status_t USDHC_SetADMA1Descriptor ( uint32_t *  admaTable,
uint32_t  admaTableWords,
const uint32_t *  dataBufferAddr,
uint32_t  dataBytes,
uint32_t  flags 
)
Parameters
admaTableADMA table address.
admaTableWordsADMA table length.
dataBufferAddrData buffer address.
dataBytesData length.
flagsADAM descriptor flag, used to indicate to create multiple or single descriptor, please refer to enum _usdhc_adma_flag.
Return values
kStatus_OutOfRangeADMA descriptor table length isn't enough to describe data.
kStatus_SuccessOperate successfully.
static void USDHC_EnableInternalDMA ( USDHC_Type *  base,
bool  enable 
)
inlinestatic
Parameters
baseUSDHC peripheral base address.
enableenable or disable flag
static void USDHC_EnableInterruptStatus ( USDHC_Type *  base,
uint32_t  mask 
)
inlinestatic
Parameters
baseUSDHC peripheral base address.
maskInterrupt status flags mask(_usdhc_interrupt_status_flag).
static void USDHC_DisableInterruptStatus ( USDHC_Type *  base,
uint32_t  mask 
)
inlinestatic
Parameters
baseUSDHC peripheral base address.
maskThe interrupt status flags mask(_usdhc_interrupt_status_flag).
static void USDHC_EnableInterruptSignal ( USDHC_Type *  base,
uint32_t  mask 
)
inlinestatic
Parameters
baseUSDHC peripheral base address.
maskThe interrupt status flags mask(_usdhc_interrupt_status_flag).
static void USDHC_DisableInterruptSignal ( USDHC_Type *  base,
uint32_t  mask 
)
inlinestatic
Parameters
baseUSDHC peripheral base address.
maskThe interrupt status flags mask(_usdhc_interrupt_status_flag).
static uint32_t USDHC_GetEnabledInterruptStatusFlags ( USDHC_Type *  base)
inlinestatic
Parameters
baseUSDHC peripheral base address.
Returns
Current interrupt status flags mask(_usdhc_interrupt_status_flag).
static uint32_t USDHC_GetInterruptStatusFlags ( USDHC_Type *  base)
inlinestatic
Parameters
baseUSDHC peripheral base address.
Returns
Current interrupt status flags mask(_usdhc_interrupt_status_flag).
static void USDHC_ClearInterruptStatusFlags ( USDHC_Type *  base,
uint32_t  mask 
)
inlinestatic

write 1 clears

Parameters
baseUSDHC peripheral base address.
maskThe interrupt status flags mask(_usdhc_interrupt_status_flag).
static uint32_t USDHC_GetAutoCommand12ErrorStatusFlags ( USDHC_Type *  base)
inlinestatic
Parameters
baseUSDHC peripheral base address.
Returns
Auto command 12 error status flags mask(_usdhc_auto_command12_error_status_flag).
static uint32_t USDHC_GetAdmaErrorStatusFlags ( USDHC_Type *  base)
inlinestatic
Parameters
baseUSDHC peripheral base address.
Returns
ADMA error status flags mask(_usdhc_adma_error_status_flag).
static uint32_t USDHC_GetPresentStatusFlags ( USDHC_Type *  base)
inlinestatic

This function gets the present USDHC's status except for an interrupt status and an error status.

Parameters
baseUSDHC peripheral base address.
Returns
Present USDHC's status flags mask(_usdhc_present_status_flag).
void USDHC_GetCapability ( USDHC_Type *  base,
usdhc_capability_t capability 
)
Parameters
baseUSDHC peripheral base address.
capabilityStructure to save capability information.
static void USDHC_ForceClockOn ( USDHC_Type *  base,
bool  enable 
)
inlinestatic
Parameters
baseUSDHC peripheral base address.
enableenable/disable flag
uint32_t USDHC_SetSdClock ( USDHC_Type *  base,
uint32_t  srcClock_Hz,
uint32_t  busClock_Hz 
)
Parameters
baseUSDHC peripheral base address.
srcClock_HzUSDHC source clock frequency united in Hz.
busClock_HzSD bus clock frequency united in Hz.
Returns
The nearest frequency of busClock_Hz configured for SD bus.
bool USDHC_SetCardActive ( USDHC_Type *  base,
uint32_t  timeout 
)

This function must be called each time the card is inserted to ensure that the card can receive the command correctly.

Parameters
baseUSDHC peripheral base address.
timeoutTimeout to initialize card.
Return values
trueSet card active successfully.
falseSet card active failed.
static void USDHC_AssertHardwareReset ( USDHC_Type *  base,
bool  high 
)
inlinestatic
Parameters
baseUSDHC peripheral base address.
high1 or 0 level
static void USDHC_SetDataBusWidth ( USDHC_Type *  base,
usdhc_data_bus_width_t  width 
)
inlinestatic
Parameters
baseUSDHC peripheral base address.
widthData transfer width.
static void USDHC_WriteData ( USDHC_Type *  base,
uint32_t  data 
)
inlinestatic

This function is used to implement the data transfer by Data Port instead of DMA.

Parameters
baseUSDHC peripheral base address.
dataThe data about to be sent.
static uint32_t USDHC_ReadData ( USDHC_Type *  base)
inlinestatic

This function is used to implement the data transfer by Data Port instead of DMA.

Parameters
baseUSDHC peripheral base address.
Returns
The data has been read.
void USDHC_SendCommand ( USDHC_Type *  base,
usdhc_command_t command 
)
Parameters
baseUSDHC peripheral base address.
commandconfiguration
static void USDHC_EnableWakeupEvent ( USDHC_Type *  base,
uint32_t  mask,
bool  enable 
)
inlinestatic
Parameters
baseUSDHC peripheral base address.
maskWakeup events mask(_usdhc_wakeup_event).
enableTrue to enable, false to disable.
static void USDHC_CardDetectByData3 ( USDHC_Type *  base,
bool  enable 
)
inlinestatic
Parameters
baseUSDHC peripheral base address.
enableenable/disable flag
static bool USDHC_DetectCardInsert ( USDHC_Type *  base)
inlinestatic
Parameters
baseUSDHC peripheral base address.
static void USDHC_EnableSdioControl ( USDHC_Type *  base,
uint32_t  mask,
bool  enable 
)
inlinestatic
Parameters
baseUSDHC peripheral base address.
maskSDIO card control flags mask(_usdhc_sdio_control_flag).
enableTrue to enable, false to disable.
static void USDHC_SetContinueRequest ( USDHC_Type *  base)
inlinestatic
Parameters
baseUSDHC peripheral base address.
static void USDHC_RequestStopAtBlockGap ( USDHC_Type *  base,
bool  enable 
)
inlinestatic
Parameters
baseUSDHC peripheral base address.
enableTrue to stop at block gap, false to normal transfer.
void USDHC_SetMmcBootConfig ( USDHC_Type *  base,
const usdhc_boot_config_t config 
)

Example:

config.ackTimeoutCount = 4;
config.blockCount = 5;
config.enableBootAck = true;
config.enableBoot = true;
USDHC_SetMmcBootConfig(USDHC, &config);
Parameters
baseUSDHC peripheral base address.
configThe MMC boot configuration information.
static void USDHC_EnableMmcBoot ( USDHC_Type *  base,
bool  enable 
)
inlinestatic
Parameters
baseUSDHC peripheral base address.
enableTrue to enable, false to disable.
static void USDHC_SetForceEvent ( USDHC_Type *  base,
uint32_t  mask 
)
inlinestatic
Parameters
baseUSDHC peripheral base address.
maskThe force events bit posistion (_usdhc_force_event).
static void UDSHC_SelectVoltage ( USDHC_Type *  base,
bool  en18v 
)
inlinestatic
Parameters
baseUSDHC peripheral base address.
en18vTrue means 1.8V, false means 3.0V.
static bool USDHC_RequestTuningForSDR50 ( USDHC_Type *  base)
inlinestatic

When this bit set, application shall perform tuning for SDR50 mode.

Parameters
baseUSDHC peripheral base address.
static bool USDHC_RequestReTuning ( USDHC_Type *  base)
inlinestatic

When this bit is set, user should do manual tuning or standard tuning function.

Parameters
baseUSDHC peripheral base address.
static void USDHC_EnableAutoTuning ( USDHC_Type *  base,
bool  enable 
)
inlinestatic

This function should be called after tuning function execute pass, auto tuning will handle by hardware.

Parameters
baseUSDHC peripheral base address.
enableenable/disable flag
void USDHC_EnableAutoTuningForCmdAndData ( USDHC_Type *  base)
Parameters
baseUSDHC peripheral base address.
void USDHC_EnableManualTuning ( USDHC_Type *  base,
bool  enable 
)

User should handle the tuning cmd and find the boundary of the delay then calucate a average value which will be configured to the CLK_TUNE_CTRL_STATUS This function should be called before function USDHC_AdjustDelayForManualTuning.

Parameters
baseUSDHC peripheral base address.
enabletuning enable flag
status_t USDHC_AdjustDelayForManualTuning ( USDHC_Type *  base,
uint32_t  delay 
)
Parameters
baseUSDHC peripheral base address.
delaysetting configuration
Return values
kStatus_Failconfig the delay setting fail
kStatus_Successconfig the delay setting success
static void USDHC_SetStandardTuningCounter ( USDHC_Type *  base,
uint8_t  counter 
)
inlinestatic
Parameters
baseUSDHC peripheral base address.
countertuning counter
Return values
kStatus_Failconfig the delay setting fail
kStatus_Successconfig the delay setting success
void USDHC_EnableStandardTuning ( USDHC_Type *  base,
uint32_t  tuningStartTap,
uint32_t  step,
bool  enable 
)

The standard tuning window and tuning counter using the default config tuning cmd is sent by the software, user need to check whether the tuning result can be used for SDR50, SDR104, and HS200 mode tuning.

Parameters
baseUSDHC peripheral base address.
tuningStartTapstart tap
steptuning step
enableenable/disable flag
static uint32_t USDHC_GetExecuteStdTuningStatus ( USDHC_Type *  base)
inlinestatic
Parameters
baseUSDHC peripheral base address.
static uint32_t USDHC_CheckStdTuningResult ( USDHC_Type *  base)
inlinestatic
Parameters
baseUSDHC peripheral base address.
static uint32_t USDHC_CheckTuningError ( USDHC_Type *  base)
inlinestatic
Parameters
baseUSDHC peripheral base address.
void USDHC_EnableDDRMode ( USDHC_Type *  base,
bool  enable,
uint32_t  nibblePos 
)
Parameters
baseUSDHC peripheral base address.
enableenable/disable flag
nibblePosnibble position
static void USDHC_EnableHS400Mode ( USDHC_Type *  base,
bool  enable 
)
inlinestatic
Parameters
baseUSDHC peripheral base address.
enableenable/disable flag
static void USDHC_ResetStrobeDLL ( USDHC_Type *  base)
inlinestatic
Parameters
baseUSDHC peripheral base address.
static void USDHC_EnableStrobeDLL ( USDHC_Type *  base,
bool  enable 
)
inlinestatic
Parameters
baseUSDHC peripheral base address.
enableenable/disable flag
void USDHC_ConfigStrobeDLL ( USDHC_Type *  base,
uint32_t  delayTarget,
uint32_t  updateInterval 
)
Parameters
baseUSDHC peripheral base address.
delayTargetdelay target
updateIntervalupdate interval
static void USDHC_SetStrobeDllOverride ( USDHC_Type *  base,
uint32_t  delayTaps 
)
inlinestatic
Parameters
baseUSDHC peripheral base address.
delayTapsValid delay taps range from 1 - 128 taps. A value of 0 selects tap 1, and a value of 0x7F selects tap 128.
static uint32_t USDHC_GetStrobeDLLStatus ( USDHC_Type *  base)
inlinestatic
Parameters
baseUSDHC peripheral base address.
void USDHC_SetDataConfig ( USDHC_Type *  base,
usdhc_transfer_direction_t  dataDirection,
uint32_t  blockCount,
uint32_t  blockSize 
)
Parameters
baseUSDHC peripheral base address.
dataDirectionData direction, tx or rx.
blockCountData block count.
blockSizeData block size.
void USDHC_TransferCreateHandle ( USDHC_Type *  base,
usdhc_handle_t *  handle,
const usdhc_transfer_callback_t callback,
void *  userData 
)
Parameters
baseUSDHC peripheral base address.
handleUSDHC handle pointer.
callbackStructure pointer to contain all callback functions.
userDataCallback function parameter.
status_t USDHC_TransferNonBlocking ( USDHC_Type *  base,
usdhc_handle_t *  handle,
usdhc_adma_config_t dmaConfig,
usdhc_transfer_t transfer 
)

This function sends a command and data and returns immediately. It doesn't wait for the transfer to complete or to encounter an error. The application must not call this API in multiple threads at the same time. Because of that this API doesn't support the re-entry mechanism.

Note
Call API USDHC_TransferCreateHandle when calling this API.
Parameters
baseUSDHC peripheral base address.
handleUSDHC handle.
dmaConfigADMA configuration.
transferTransfer content.
Return values
kStatus_InvalidArgumentArgument is invalid.
kStatus_USDHC_BusyTransferringBusy transferring.
kStatus_USDHC_PrepareAdmaDescriptorFailedPrepare ADMA descriptor failed.
kStatus_SuccessOperate successfully.
status_t USDHC_TransferBlocking ( USDHC_Type *  base,
usdhc_adma_config_t dmaConfig,
usdhc_transfer_t transfer 
)

This function waits until the command response/data is received or the USDHC encounters an error by polling the status flag.
The application must not call this API in multiple threads at the same time. Because this API doesn't support the re-entry mechanism.

Note
There is no need to call API USDHC_TransferCreateHandle when calling this API.
Parameters
baseUSDHC peripheral base address.
dmaConfigadma configuration
transferTransfer content.
Return values
kStatus_InvalidArgumentArgument is invalid.
kStatus_USDHC_PrepareAdmaDescriptorFailedPrepare ADMA descriptor failed.
kStatus_USDHC_SendCommandFailedSend command failed.
kStatus_USDHC_TransferDataFailedTransfer data failed.
kStatus_SuccessOperate successfully.
void USDHC_TransferHandleIRQ ( USDHC_Type *  base,
usdhc_handle_t *  handle 
)

This function deals with the IRQs on the given host controller.

Parameters
baseUSDHC peripheral base address.
handleUSDHC handle.