MicroSd
[Drivers]

This module implements the SPI layer needed to control a micro SD card. More...

Collaboration diagram for MicroSd:

Defines

#define CMD0   (0)
 GO_IDLE_STATE.
#define CMD1   (1)
 SEND_OP_COND.
#define ACMD41   (41 | 0x80)
 SEND_OP_COND (SDC).
#define CMD8   (8)
 SEND_IF_COND.
#define CMD9   (9)
 SEND_CSD.
#define CMD10   (10)
 SEND_CID.
#define CMD12   (12)
 STOP_TRANSMISSION.
#define ACMD13   (13 | 0x80)
 SD_STATUS (SDC).
#define CMD16   (16)
 SET_BLOCKLEN.
#define CMD17   (17)
 READ_SINGLE_BLOCK.
#define CMD18   (18)
 READ_MULTIPLE_BLOCK.
#define CMD23   (23)
 SET_BLOCK_COUNT.
#define ACMD23   (23 | 0x80)
 SET_WR_BLK_ERASE_COUNT (SDC).
#define CMD24   (24)
 WRITE_BLOCK.
#define CMD25   (25)
 WRITE_MULTIPLE_BLOCK.
#define CMD41   (41)
 SEND_OP_COND (ACMD).
#define CMD55   (55)
 APP_CMD.
#define CMD58   (58)
 READ_OCR.

Functions

void MICROSD_Init (void)
 Initialize the SPI peripheral for microSD card usage.
void MICROSD_Deinit (void)
 Deinitialize SPI peripheral.
int MICROSD_Select (void)
 Select the micro SD card and wait for the card to become ready.
void MICROSD_Deselect (void)
 Deselect the micro SD card and release the SPI bus.
void MICROSD_PowerOn (void)
 Turn on micro SD card power.
void MICROSD_PowerOff (void)
 Turn off micro SD card power.
int MICROSD_BlockRx (uint8_t *buff, uint32_t btr)
 Receive a data block from micro SD card.
int MICROSD_BlockTx (const uint8_t *buff, uint8_t token)
 Send a data block to micro SD card.
uint8_t MICROSD_SendCmd (uint8_t cmd, DWORD arg)
 Send a command packet to micro SD card.
uint8_t MICROSD_XferSpi (uint8_t data)
 Do one SPI transfer.
void MICROSD_SpiClkFast (void)
 Set SPI clock to maximum frequency.
void MICROSD_SpiClkSlow (void)
 Set SPI clock to a low frequency suitable for initial card initialization.
bool MICROSD_TimeOutElapsed (void)
 Check if timeout value set with MICROSD_TimeOutSet() has elapsed.
void MICROSD_TimeOutSet (uint32_t msec)
 Set a timeout value.

Detailed Description

This module implements the SPI layer needed to control a micro SD card.


Define Documentation

#define ACMD13   (13 | 0x80)

SD_STATUS (SDC).

Definition at line 48 of file microsd.h.

#define ACMD23   (23 | 0x80)

SET_WR_BLK_ERASE_COUNT (SDC).

Definition at line 53 of file microsd.h.

#define ACMD41   (41 | 0x80)

SEND_OP_COND (SDC).

Definition at line 43 of file microsd.h.

#define CMD0   (0)

GO_IDLE_STATE.

Definition at line 41 of file microsd.h.

Referenced by MICROSD_SendCmd().

#define CMD1   (1)

SEND_OP_COND.

Definition at line 42 of file microsd.h.

#define CMD10   (10)

SEND_CID.

Definition at line 46 of file microsd.h.

#define CMD12   (12)

STOP_TRANSMISSION.

Definition at line 47 of file microsd.h.

Referenced by MICROSD_SendCmd().

#define CMD16   (16)

SET_BLOCKLEN.

Definition at line 49 of file microsd.h.

#define CMD17   (17)

READ_SINGLE_BLOCK.

Definition at line 50 of file microsd.h.

#define CMD18   (18)

READ_MULTIPLE_BLOCK.

Definition at line 51 of file microsd.h.

#define CMD23   (23)

SET_BLOCK_COUNT.

Definition at line 52 of file microsd.h.

#define CMD24   (24)

WRITE_BLOCK.

Definition at line 54 of file microsd.h.

#define CMD25   (25)

WRITE_MULTIPLE_BLOCK.

Definition at line 55 of file microsd.h.

#define CMD41   (41)

SEND_OP_COND (ACMD).

Definition at line 56 of file microsd.h.

#define CMD55   (55)

APP_CMD.

Definition at line 57 of file microsd.h.

Referenced by MICROSD_SendCmd().

#define CMD58   (58)

READ_OCR.

Definition at line 58 of file microsd.h.

#define CMD8   (8)

SEND_IF_COND.

Definition at line 44 of file microsd.h.

Referenced by MICROSD_SendCmd().

#define CMD9   (9)

SEND_CSD.

Definition at line 45 of file microsd.h.


Function Documentation

int MICROSD_BlockRx ( uint8_t *  buff,
uint32_t  btr 
)

Receive a data block from micro SD card.

Parameters:
[out] buff Data buffer to store received data.
btr Byte count (must be multiple of 4).
Returns:
1:OK, 0:Failed.

Definition at line 178 of file microsd.c.

References MICROSD_XferSpi().

Here is the call graph for this function:

int MICROSD_BlockTx ( const uint8_t *  buff,
uint8_t  token 
)

Send a data block to micro SD card.

Parameters:
[in] buff 512 bytes data block to be transmitted.
token Data token.
Returns:
1:OK, 0:Failed.

Definition at line 253 of file microsd.c.

References MICROSD_XferSpi().

Here is the call graph for this function:

void MICROSD_Deinit ( void   ) 

Deinitialize SPI peripheral.

Turn off the SPI peripheral and disable SPI GPIO pins.

Definition at line 91 of file microsd.c.

void MICROSD_Deselect ( void   ) 

Deselect the micro SD card and release the SPI bus.

Definition at line 125 of file microsd.c.

References MICROSD_XferSpi().

Referenced by MICROSD_PowerOff(), MICROSD_Select(), and MICROSD_SendCmd().

Here is the call graph for this function:

Here is the caller graph for this function:

void MICROSD_Init ( void   ) 

Initialize the SPI peripheral for microSD card usage.

SPI pins and speed etc. is defined in microsdconfig.h.

Definition at line 56 of file microsd.c.

void MICROSD_PowerOff ( void   ) 

Turn off micro SD card power.

DK doesn't support socket power control, only disable the SPI clock.

Definition at line 160 of file microsd.c.

References MICROSD_Deselect(), and MICROSD_Select().

Here is the call graph for this function:

void MICROSD_PowerOn ( void   ) 

Turn on micro SD card power.

DK doesn't support socket power control, only enable the SPI clock.

Definition at line 150 of file microsd.c.

int MICROSD_Select ( void   ) 

Select the micro SD card and wait for the card to become ready.

Returns:
1:Successful, 0:Timeout.

Definition at line 135 of file microsd.c.

References MICROSD_Deselect().

Referenced by MICROSD_PowerOff(), and MICROSD_SendCmd().

Here is the call graph for this function:

Here is the caller graph for this function:

uint8_t MICROSD_SendCmd ( uint8_t  cmd,
DWORD  arg 
)

Send a command packet to micro SD card.

Parameters:
[in] cmd Command byte.
[in] arg Argument.
Returns:
Response value.

Definition at line 342 of file microsd.c.

References CMD0, CMD12, CMD55, CMD8, MICROSD_Deselect(), MICROSD_Select(), MICROSD_SendCmd(), and MICROSD_XferSpi().

Referenced by MICROSD_SendCmd().

Here is the call graph for this function:

Here is the caller graph for this function:

void MICROSD_SpiClkFast ( void   ) 

Set SPI clock to maximum frequency.

Definition at line 408 of file microsd.c.

void MICROSD_SpiClkSlow ( void   ) 

Set SPI clock to a low frequency suitable for initial card initialization.

Definition at line 399 of file microsd.c.

bool MICROSD_TimeOutElapsed ( void   ) 

Check if timeout value set with MICROSD_TimeOutSet() has elapsed.

Returns:
True if timeout has elapsed.

Definition at line 433 of file microsd.c.

void MICROSD_TimeOutSet ( uint32_t  msec  ) 

Set a timeout value.

The timeout value will be decremented towards zero when SPI traffic to/from the micro SD card takes place. Use MICROSD_TimeOutElapsed() to check if timeout has elapsed.

Parameters:
[in] msec Millisecond timeout value (very approximate).

Definition at line 422 of file microsd.c.

uint8_t MICROSD_XferSpi ( uint8_t  data  ) 

Do one SPI transfer.

Parameters:
data Byte to transmit.
Returns:
Byte received.

Definition at line 112 of file microsd.c.

Referenced by MICROSD_BlockRx(), MICROSD_BlockTx(), MICROSD_Deselect(), and MICROSD_SendCmd().

Here is the caller graph for this function: