sam0 SD Host Controller

SD card interface functions for sam0 class devices. More...

Detailed Description

SD card interface functions for sam0 class devices.

Warning
This driver is deprecated. Use the sdmmc driver module instead. You can refer to the `same54-xpro´ board as an example on how to use it.

Modules

 MTD wrapper for SAM0 SDHC devices
 Driver for SD Cards connected to the SAM0 SDHC peripheral using the MTD interface.
 

Files

file  sdhc.h
 SD card interface functions for sam0 class devices.
 

Data Structures

struct  sdhc_state_t
 SD Card driver context. More...
 

Macros

#define SD_MMC_BLOCK_SIZE   512
 This SD stack uses the maximum block size authorized (512 bytes) More...
 
#define SDHC_SLOW_CLOCK_HZ   400000
 Clock frequency on init.
 
#define SDHC_FAST_CLOCK_HZ   25000000
 Clock frequency after init.
 

Functions

int sdhc_init (sdhc_state_t *state)
 Initialize the SD host controller. More...
 
bool sdhc_send_cmd (sdhc_state_t *state, uint32_t cmd, uint32_t arg)
 Send a command to the SD card. More...
 
int sdhc_read_blocks (sdhc_state_t *state, uint32_t block, void *dst, uint16_t num)
 Read blocks from the SD card into memory. More...
 
int sdhc_write_blocks (sdhc_state_t *state, uint32_t block, const void *src, uint16_t num)
 Write memory to SD card blocks. More...
 
int sdhc_erase_blocks (sdhc_state_t *state, uint32_t block, uint16_t num)
 Erase memory from SD card blocks. More...
 

Card Types

#define CARD_TYPE_UNKNOWN   (0)
 Unknown type card.
 
#define CARD_TYPE_SD   (1 << 0)
 SD card.
 
#define CARD_TYPE_MMC   (1 << 1)
 MMC card.
 
#define CARD_TYPE_SDIO   (1 << 2)
 SDIO card.
 
#define CARD_TYPE_HC   (1 << 3)
 High capacity card.
 
#define CARD_TYPE_SD_COMBO   (CARD_TYPE_SD | CARD_TYPE_SDIO)
 SD combo card (io + memory)
 

Card Versions

#define CARD_VER_UNKNOWN   (0)
 Unknown card version.
 
#define CARD_VER_SD_1_0   (0x10)
 SD version 1.0 and 1.01.
 
#define CARD_VER_SD_1_10   (0x1A)
 SD version 1.10.
 
#define CARD_VER_SD_2_0   (0X20)
 SD version 2.00.
 
#define CARD_VER_SD_3_0   (0X30)
 SD version 3.0X.
 
#define CARD_VER_MMC_1_2   (0x12)
 MMC version 1.2.
 
#define CARD_VER_MMC_1_4   (0x14)
 MMC version 1.4.
 
#define CARD_VER_MMC_2_2   (0x22)
 MMC version 2.2.
 
#define CARD_VER_MMC_3   (0x30)
 MMC version 3.
 
#define CARD_VER_MMC_4   (0x40)
 MMC version 4.
 

Flags used to define MCI parser for SD/MMC command

#define MCI_RESP_PRESENT   (1ul << 8)
 Have response.
 
#define MCI_RESP_136   (1ul << 11)
 136 bit response
 
#define MCI_RESP_CRC   (1ul << 12)
 Expect valid crc.
 
#define MCI_RESP_BUSY   (1ul << 13)
 Card may send busy.
 
#define MCI_CMD_OPENDRAIN   (1ul << 14)
 Open drain for a broadcast command.
 
#define MCI_CMD_WRITE   (1ul << 15)
 To signal a data write operation.
 
#define MCI_CMD_SDIO_BYTE   (1ul << 16)
 To signal a SDIO transfer in multi byte mode.
 
#define MCI_CMD_SDIO_BLOCK   (1ul << 17)
 To signal a SDIO transfer in block mode.
 
#define MCI_CMD_STREAM   (1ul << 18)
 To signal a data transfer in stream mode.
 
#define MCI_CMD_SINGLE_BLOCK   (1ul << 19)
 To signal a data transfer in single block mode.
 
#define MCI_CMD_MULTI_BLOCK   (1ul << 20)
 To signal a data transfer in multi block mode.
 

Macro Definition Documentation

◆ SD_MMC_BLOCK_SIZE

#define SD_MMC_BLOCK_SIZE   512

This SD stack uses the maximum block size authorized (512 bytes)

SD card block size

Definition at line 99 of file sdhc.h.

Function Documentation

◆ sdhc_erase_blocks()

int sdhc_erase_blocks ( sdhc_state_t state,
uint32_t  block,
uint16_t  num 
)

Erase memory from SD card blocks.

Erases n 512 byte blocks on the SD card

Parameters
[in]statedriver context
[in]blockfirst block number to erase
[in]numnumber of blocks to erase
Returns
0 if success, negative error if failed

◆ sdhc_init()

int sdhc_init ( sdhc_state_t state)

Initialize the SD host controller.

Parameters
[in]statedriver context
Returns
int 0 on success, error otherwise

◆ sdhc_read_blocks()

int sdhc_read_blocks ( sdhc_state_t state,
uint32_t  block,
void *  dst,
uint16_t  num 
)

Read blocks from the SD card into memory.

Reads n 512 byte blocks from the SD card

Parameters
[in]statedriver context
[in]blockblock number to read from
[out]dstdestination address
[in]numnumber of blocks to read
Returns
0 if success, negative error if failed

◆ sdhc_send_cmd()

bool sdhc_send_cmd ( sdhc_state_t state,
uint32_t  cmd,
uint32_t  arg 
)

Send a command to the SD card.

Parameters
[in]statedriver context
[in]cmdthe command code
[in]argcommand argument
Returns
true command was successful
false command returned error

◆ sdhc_write_blocks()

int sdhc_write_blocks ( sdhc_state_t state,
uint32_t  block,
const void *  src,
uint16_t  num 
)

Write memory to SD card blocks.

Writes n 512 bytes blocks on the SD card

Parameters
[in]statedriver context
[in]blockblock number to write to
[in]srcpointer to memory to write
[in]numnumber of blocks to write
Returns
0 if success, negative error if failed