The SDIO card driver provide card initialization/IO direct and extend command interface.
SDIO CARD Operation
error log support
Not supported yet.
User configuable
Board dependency
Mutual exclusive access support for RTOS
SDIO driver has added mutual exclusive access support for init/deinit/write/read/erase function. Please note that the card init function will create the mutex lock dynamically by default, so to avoid the mutex create redundantly, application must follow bellow sequence for card re-initialization
Typical use case
Refer to the driver examples codes located at <SDK_ROOT>/boards/<BOARD>/sdmmc_examples/
|
status_t | SDIO_Init (sdio_card_t *card) |
| SDIO card init function. More...
|
|
void | SDIO_Deinit (sdio_card_t *card) |
| SDIO card deinit, include card and host deinit. More...
|
|
status_t | SDIO_CardInit (sdio_card_t *card) |
| Initializes the card. More...
|
|
void | SDIO_CardDeinit (sdio_card_t *card) |
| Deinitializes the card. More...
|
|
status_t | SDIO_HostInit (sdio_card_t *card) |
| initialize the host. More...
|
|
void | SDIO_HostDeinit (sdio_card_t *card) |
| Deinitializes the host. More...
|
|
void | SDIO_HostDoReset (sdio_card_t *card) |
| reset the host. More...
|
|
void | SDIO_SetCardPower (sdio_card_t *card, bool enable) |
| set card power. More...
|
|
status_t | SDIO_CardInActive (sdio_card_t *card) |
| set SDIO card to inactive state More...
|
|
status_t | SDIO_GetCardCapability (sdio_card_t *card, sdio_func_num_t func) |
| get SDIO card capability More...
|
|
status_t | SDIO_SetBlockSize (sdio_card_t *card, sdio_func_num_t func, uint32_t blockSize) |
| set SDIO card block size More...
|
|
status_t | SDIO_CardReset (sdio_card_t *card) |
| set SDIO card reset More...
|
|
status_t | SDIO_SetDataBusWidth (sdio_card_t *card, sdio_bus_width_t busWidth) |
| set SDIO card data bus width More...
|
|
status_t | SDIO_SwitchToHighSpeed (sdio_card_t *card) |
| switch the card to high speed More...
|
|
status_t | SDIO_ReadCIS (sdio_card_t *card, sdio_func_num_t func, const uint32_t *tupleList, uint32_t tupleNum) |
| read SDIO card CIS for each function More...
|
|
status_t | SDIO_PollingCardInsert (sdio_card_t *card, uint32_t status) |
| sdio wait card detect function. More...
|
|
bool | SDIO_IsCardPresent (sdio_card_t *card) |
| sdio card present check function. More...
|
|
|
status_t | SDIO_IO_Write_Direct (sdio_card_t *card, sdio_func_num_t func, uint32_t regAddr, uint8_t *data, bool raw) |
| IO direct write transfer function. More...
|
|
status_t | SDIO_IO_Read_Direct (sdio_card_t *card, sdio_func_num_t func, uint32_t regAddr, uint8_t *data) |
| IO direct read transfer function. More...
|
|
status_t | SDIO_IO_RW_Direct (sdio_card_t *card, sdio_io_direction_t direction, sdio_func_num_t func, uint32_t regAddr, uint8_t dataIn, uint8_t *dataOut) |
| IO direct read/write transfer function. More...
|
|
status_t | SDIO_IO_Write_Extended (sdio_card_t *card, sdio_func_num_t func, uint32_t regAddr, uint8_t *buffer, uint32_t count, uint32_t flags) |
| IO extended write transfer function. More...
|
|
status_t | SDIO_IO_Read_Extended (sdio_card_t *card, sdio_func_num_t func, uint32_t regAddr, uint8_t *buffer, uint32_t count, uint32_t flags) |
| IO extended read transfer function. More...
|
|
status_t | SDIO_EnableIOInterrupt (sdio_card_t *card, sdio_func_num_t func, bool enable) |
| enable IO interrupt More...
|
|
status_t | SDIO_EnableIO (sdio_card_t *card, sdio_func_num_t func, bool enable) |
| enable IO and wait IO ready More...
|
|
status_t | SDIO_SelectIO (sdio_card_t *card, sdio_func_num_t func) |
| select IO More...
|
|
status_t | SDIO_AbortIO (sdio_card_t *card, sdio_func_num_t func) |
| Abort IO transfer. More...
|
|
status_t | SDIO_SetDriverStrength (sdio_card_t *card, sd_driver_strength_t driverStrength) |
| Set driver strength. More...
|
|
status_t | SDIO_EnableAsyncInterrupt (sdio_card_t *card, bool enable) |
| Enable/Disable Async interrupt. More...
|
|
status_t | SDIO_GetPendingInterrupt (sdio_card_t *card, uint8_t *pendingInt) |
| Get pending interrupt. More...
|
|
status_t | SDIO_IO_Transfer (sdio_card_t *card, sdio_command_t cmd, uint32_t argument, uint32_t blockSize, uint8_t *txData, uint8_t *rxData, uint16_t dataSize, uint32_t *response) |
| sdio card io transfer function. More...
|
|
void | SDIO_SetIOIRQHandler (sdio_card_t *card, sdio_func_num_t func, sdio_io_irq_handler_t handler) |
| sdio set io IRQ handler. More...
|
|
status_t | SDIO_HandlePendingIOInterrupt (sdio_card_t *card) |
| sdio card io pending interrupt handle function. More...
|
|
Define the card structure including the necessary fields to identify and describe the card.
bool _sdio_card::noInternalAlign |
If disable, sdmmc will not make sure the data buffer address is word align, otherwise all the transfer are align to low level driver
#define FSL_SDIO_DRIVER_VERSION (MAKE_VERSION(2U, 4U, 1U)) /*2.4.1*/ |
Enumerator |
---|
kSDIO_IORead |
io read
|
kSDIO_IOWrite |
io write
|
Thread safe function, please note that the function will create the mutex lock dynamically by default, so to avoid the mutex create redundantly, application must follow bellow sequence for card re-initialization
- Parameters
-
- Return values
-
kStatus_SDMMC_GoIdleFailed | |
kStatus_SDMMC_HandShakeOperationConditionFailed | |
kStatus_SDMMC_SDIO_InvalidCard | |
kStatus_SDMMC_SDIO_InvalidVoltage | |
kStatus_SDMMC_SendRelativeAddressFailed | |
kStatus_SDMMC_SelectCardFailed | |
kStatus_SDMMC_SDIO_SwitchHighSpeedFail | |
kStatus_SDMMC_SDIO_ReadCISFail | |
kStatus_SDMMC_TransferFailed | |
kStatus_Success | |
Please note it is a thread safe function.
- Parameters
-
This function initializes the card only, make sure the host is ready when call this function, otherwise it will return kStatus_SDMMC_HostNotReady.
Thread safe function, please note that the function will create the mutex lock dynamically by default, so to avoid the mutex create redundantly, application must follow bellow sequence for card re-initialization
- Parameters
-
- Return values
-
kStatus_SDMMC_HostNotReady | host is not ready. |
kStatus_SDMMC_GoIdleFailed | Go idle failed. |
kStatus_SDMMC_NotSupportYet | Card not support. |
kStatus_SDMMC_SendOperationConditionFailed | Send operation condition failed. |
kStatus_SDMMC_AllSendCidFailed | Send CID failed. |
kStatus_SDMMC_SendRelativeAddressFailed | Send relative address failed. |
kStatus_SDMMC_SendCsdFailed | Send CSD failed. |
kStatus_SDMMC_SelectCardFailed | Send SELECT_CARD command failed. |
kStatus_SDMMC_SendScrFailed | Send SCR failed. |
kStatus_SDMMC_SetBusWidthFailed | Set bus width failed. |
kStatus_SDMMC_SwitchHighSpeedFailed | Switch high speed failed. |
kStatus_SDMMC_SetCardBlockSizeFailed | Set card block size failed. |
kStatus_Success | Operate successfully. |
This function deinitializes the specific card.
Please note it is a thread safe function.
- Parameters
-
This function deinitializes the specific host.
- Parameters
-
This function deinitializes the host.
- Parameters
-
This function reset the specific host.
- Parameters
-
void SDIO_SetCardPower |
( |
sdio_card_t * |
card, |
|
|
bool |
enable |
|
) |
| |
The power off operation depend on host or the user define power on function.
- Parameters
-
card | card descriptor. |
enable | true is power on, false is power off. |
- Parameters
-
- Return values
-
kStatus_SDMMC_TransferFailed | |
kStatus_Success | |
- Parameters
-
card | Card descriptor. |
func | IO number |
- Return values
-
kStatus_SDMMC_TransferFailed | |
kStatus_Success | |
- Parameters
-
card | Card descriptor. |
func | io number |
blockSize | block size |
- Return values
-
kStatus_SDMMC_SetCardBlockSizeFailed | |
kStatus_SDMMC_SDIO_InvalidArgument | |
kStatus_Success | |
- Parameters
-
- Return values
-
kStatus_SDMMC_TransferFailed | |
kStatus_Success | |
- Parameters
-
card | Card descriptor. |
busWidth | bus width |
- Return values
-
kStatus_SDMMC_TransferFailed | |
kStatus_Success | |
- Parameters
-
- Return values
-
kStatus_SDMMC_TransferFailed | |
kStatus_SDMMC_SDIO_SwitchHighSpeedFail | |
kStatus_Success | |
- Parameters
-
card | Card descriptor. |
func | io number |
tupleList | code list |
tupleNum | code number |
- Return values
-
kStatus_SDMMC_SDIO_ReadCISFail | |
kStatus_SDMMC_TransferFailed | |
kStatus_Success | |
Detect card through GPIO, CD, DATA3.
- Parameters
-
card | card descriptor. |
status | detect status, kSD_Inserted or kSD_Removed. |
Please note it is a thread safe function.
- Parameters
-
card | Card descriptor. |
func | IO numner |
regAddr | register address |
data | the data pinter to write |
raw | flag, indicate read after write or write only |
- Return values
-
kStatus_SDMMC_TransferFailed | |
kStatus_Success | |
Please note it is a thread safe function.
- Parameters
-
card | Card descriptor. |
func | IO number |
regAddr | register address |
data | pointer to read |
- Return values
-
kStatus_SDMMC_TransferFailed | |
kStatus_Success | |
Please note it is a thread safe function.
- Parameters
-
card | Card descriptor. |
direction | io access direction, please reference sdio_io_direction_t. |
func | IO number |
regAddr | register address |
dataIn | data to write |
dataOut | data pointer for readback data, support both for read and write, when application want readback the data after write command, dataOut should not be NULL. |
- Return values
-
kStatus_SDMMC_TransferFailed | |
kStatus_Success | |
Please note it is a thread safe function.
- Parameters
-
card | Card descriptor. |
func | IO number |
regAddr | register address |
buffer | data buffer to write |
count | data count |
flags | write flags |
- Return values
-
kStatus_SDMMC_TransferFailed | |
kStatus_SDMMC_SDIO_InvalidArgument | |
kStatus_Success | |
Please note it is a thread safe function.
- Parameters
-
card | Card descriptor. |
func | IO number |
regAddr | register address |
buffer | data buffer to read |
count | data count |
flags | write flags |
- Return values
-
kStatus_SDMMC_TransferFailed | |
kStatus_SDMMC_SDIO_InvalidArgument | |
kStatus_Success | |
- Parameters
-
card | Card descriptor. |
func | IO number |
enable | enable/disable flag |
- Return values
-
kStatus_SDMMC_TransferFailed | |
kStatus_Success | |
- Parameters
-
card | Card descriptor. |
func | IO number |
enable | enable/disable flag |
- Return values
-
kStatus_SDMMC_TransferFailed | |
kStatus_Success | |
- Parameters
-
card | Card descriptor. |
func | IO number |
- Return values
-
kStatus_SDMMC_TransferFailed | |
kStatus_Success | |
- Parameters
-
card | Card descriptor. |
func | IO number |
- Return values
-
kStatus_SDMMC_TransferFailed | |
kStatus_Success | |
- Parameters
-
card | Card descriptor. |
driverStrength | target driver strength. |
- Return values
-
kStatus_SDMMC_TransferFailed | |
kStatus_Success | |
- Parameters
-
card | Card descriptor. |
enable | true is enable, false is disable. |
- Return values
-
kStatus_SDMMC_TransferFailed | |
kStatus_Success | |
- Parameters
-
card | Card descriptor. |
pendingInt | pointer store pending interrupt |
- Return values
-
kStatus_SDMMC_TransferFailed | |
kStatus_Success | |
status_t SDIO_IO_Transfer |
( |
sdio_card_t * |
card, |
|
|
sdio_command_t |
cmd, |
|
|
uint32_t |
argument, |
|
|
uint32_t |
blockSize, |
|
|
uint8_t * |
txData, |
|
|
uint8_t * |
rxData, |
|
|
uint16_t |
dataSize, |
|
|
uint32_t * |
response |
|
) |
| |
This function can be used for trnansfer direct/extend command. Please pay attention to the non-align data buffer address transfer, if data buffer address can not meet host controller internal DMA requirement, sdio driver will try to use internal align buffer if data size is not bigger than internal buffer size, Align address transfer always can get a better performance, so if application want sdio driver make sure buffer address align,
Please note it is a thread safe function.
- Parameters
-
card | card descriptor. |
cmd | command to transfer |
argument | argument to transfer |
blockSize | used for block mode. |
txData | tx buffer pointer or NULL |
rxData | rx buffer pointer or NULL |
dataSize | transfer data size |
response | reponse pointer, if application want read response back, please set it to a NON-NULL pointer. |
- Parameters
-
card | card descriptor. |
func | function io number. |
handler | io IRQ handler. |
This function is used to handle the pending io interrupt. To reigster a IO IRQ handler,
call it in interrupt callback
To releae a IO IRQ handler,
- Parameters
-
- Return values
-
kStatus_SDMMC_TransferFailed | |
kStatus_Success | |