1.1.6.4.13 DRV_SDMMC_Async_SDIO_ExtBlockWrite Function
C
void DRV_SDMMC_Async_SDIO_ExtBlockWrite (
const DRV_HANDLE handle,
DRV_SDMMC_COMMAND_HANDLE* commandHandle,
uint8_t fn,
uint32_t regAddr,
void* wrData,
uint32_t nBlocks,
bool isAddrInc
)Summary
Writes blocks of data starting at the specified regAddr of the SDIO card.
Description
This function schedules a non-blocking write operation for writing multiple blocks of data (using CMD53) to the given I/O function in the SDIO card. The API allows the application to specify whether to increment or not the I/O address after each byte is written. The size of the block is fixed to 512 bytes. The function returns with a valid buffer handle in the commandHandle argument if the write request was scheduled successfully. The function adds the request to the hardware instance queue and returns immediately. While the request is in the queue, the application buffer is owned by the driver and should not be modified. The function returns DRV_SDMMC_COMMAND_HANDLE_INVALID in the commandHandle argument under the following circumstances:
if the driver handle is invalid
if the wrData pointer is NULL or nBlocks is 0
if the nBlocks is not between 1 and 511
if the media is not in attached state
if a buffer object could not be allocated to the request
If the requesting client registered an event callback with the driver, the driver will issue a DRV_SDMMC_EVENT_COMMAND_COMPLETE event if the buffer was processed successfully or DRV_SDMMC_EVENT_COMMAND_ERROR event if the buffer was not processed successfully.
Precondition
The DRV_SDMMC_Initialize routine must have been called for the specified SDMMC driver instance.
DRV_SDMMC_Open routine must have been called to obtain a valid opened device handle.
Parameters
| Parameters | Description |
|---|---|
| handle | A valid open-instance handle, returned from the driver's open function. |
| commandHandle | Pointer to the buffer handle returned by this API. |
| fn | The function number within the SDIO card to write to. |
| regAddr | Start address of I/O register to write the data to. |
| wrData | Pointer to the buffer containing the data to be written. |
| nBlocks | Number of blocks of data to be written. Its value must be from 1 to 511. |
| isAddrInc | True - increment the I/O register address after each write. |
Returns
The buffer handle is returned in the commandHandle argument. It will be DRV_SDMMC_COMMAND_HANDLE_INVALID if the request was not successful.
Example
uint8_t CACHE_ALIGN myBuffer[512]; // address should be block aligned. uint32_t reg_addr = 0x1000; uint32_t nBlock = 1; DRV_SDMMC_COMMAND_HANDLE commandHandle; // Event is received when the buffer is processed. void APP_SDMMCEventHandler( DRV_SDMMC_EVENT event, DRV_SDMMC_COMMAND_HANDLE commandHandle, uintptr_t contextHandle ) { switch(event) { case DRV_SDMMC_EVENT_COMMAND_COMPLETE: { // This means the data was transferred successfully break; } case DRV_SDMMC_EVENT_COMMAND_ERROR: { // Error handling here break; } default: { break; } } } // mySDMMCHandle is the handle returned // by the DRV_SDMMC_Open function. // Client registers an event handler with driver DRV_SDMMC_EventHandlerSet(mySDMMCHandle, APP_SDMMCEventHandler, (uintptr_t)NULL); DRV_SDMMC_Async_SDIO_ExtBlockWrite ( mySDMMCHandle, &commandHandle, 1, reg_addr, myBuffer, 1, true ); if(commandHandle == DRV_SDMMC_COMMAND_HANDLE_INVALID) { // Error handling here }
Remarks
None.
