HPM SDK
HPMicro Software Development Kit
hpm_sdmmc_sd.c File Reference
#include "hpm_sdmmc_sd.h"
#include "hpm_l1c_drv.h"
#include "hpm_clock_drv.h"

Data Structures

union  sd_raw_status_t
 

Macros

#define SPEED_1Kbps   (1000U)
 
#define SPEED_1Mbps   (1000UL * 1000UL)
 
#define MAX_BLOCK_COUNT   ((1UL << 26) / 512 - 1U)
 
#define WRITE_BLOCK_TIMEOUT_IN_MS   (1000U)
 
#define READ_BLOCK_TIMEOUT_IN_MS   (100U)
 

Functions

static uint32_t sd_be2le (uint32_t be)
 
static void sd_convert_data_endian (uint32_t *word, uint32_t word_count)
 
static hpm_stat_t sd_send_card_status (sd_card_t *card)
 
static hpm_stat_t sd_send_rca (sd_card_t *card)
 
static hpm_stat_t sd_send_csd (sd_card_t *card)
 
static hpm_stat_t sd_switch_function (sd_card_t *card, uint32_t mode, uint32_t group, uint32_t number)
 
static void sd_decode_scr (sd_card_t *card, const uint32_t *raw_scr)
 
static hpm_stat_t sd_send_scr (sd_card_t *card)
 
static hpm_stat_t sd_app_cmd_send_cond_op (const sd_card_t *card, sd_ocr_t ocr)
 
static hpm_stat_t sd_send_if_cond (const sd_card_t *card)
 
static hpm_stat_t sd_probe_bus_voltage (sd_card_t *card)
 
static hpm_stat_t sd_switch_voltage (const sd_card_t *card)
 
static void sd_decode_csd (sd_card_t *card, const uint32_t *raw_csd)
 
static void sd_decode_status (sd_card_t *card, uint32_t *raw_status)
 
static hpm_stat_t sd_set_bus_width (const sd_card_t *card, sdmmc_buswidth_t buswidth)
 
static hpm_stat_t sd_set_bus_timing (sd_card_t *card, sdmmc_speed_mode_t timing_mode)
 
static hpm_stat_t sd_check_card_parameters (const sd_card_t *card)
 
static hpm_stat_t sd_app_cmd_set_write_block_erase_count (const sd_card_t *card, uint32_t block_count)
 
static hpm_stat_t sd_error_recovery (const sd_card_t *card, hpm_stat_t last_error)
 
static hpm_stat_t sd_send_cmd (const sd_card_t *card, const sdmmchost_cmd_t *cmd)
 
static hpm_stat_t sd_transfer (const sd_card_t *card, const sdmmchost_xfer_t *content)
 
static hpm_stat_t sd_all_send_cid (sd_card_t *card)
 
void sd_card_deinit (sd_card_t *card)
 De-Initialize SD card. More...
 
hpm_stat_t sd_host_init (sd_card_t *card)
 Initialize SD Host. More...
 
hpm_stat_t sd_init (sd_card_t *card)
 Initialize SD device. More...
 
void sd_deinit (const sd_card_t *card)
 De-Initialize SD device. More...
 
hpm_stat_t sd_card_init (sd_card_t *card)
 Initialize SD card. More...
 
bool sd_is_card_present (const sd_card_t *card)
 Check whether the SD card is present. More...
 
hpm_stat_t sd_select_card (const sd_card_t *card, bool is_selected)
 Select/Deselect SD card. More...
 
hpm_stat_t sd_read_status (sd_card_t *card)
 Read SD card status. More...
 
hpm_stat_t sd_read_blocks (sd_card_t *card, uint8_t *buffer, uint32_t start_block, uint32_t block_count)
 Read data from specified SD block. More...
 
hpm_stat_t sd_write_blocks (sd_card_t *card, const uint8_t *buffer, uint32_t start_block, uint32_t block_count)
 Write data to specified SD block. More...
 
static uint32_t sd_calculate_erase_timeout (const sd_card_t *card, uint32_t start_block, uint32_t block_count)
 Calculate SD erase timeout value Refer to SD_Specification_Part1_Physical_Layer_Specification_Version4.20.pdf, section 4.14 for more details. More...
 
hpm_stat_t sd_erase_blocks (sd_card_t *card, uint32_t start_block, uint32_t block_count)
 Erase specified SD ranges. More...
 
hpm_stat_t sd_set_driver_strength (sd_card_t *card, sd_drive_strength_t driver_strength)
 Set the driver strength for SD card. More...
 
hpm_stat_t sd_set_max_current (sd_card_t *card, sd_max_current_t max_current)
 Set the maximum current for SD card. More...
 
hpm_stat_t sd_polling_card_status_busy (sd_card_t *card, uint32_t timeout_ms)
 Polling SD card status busy. More...
 

Macro Definition Documentation

◆ MAX_BLOCK_COUNT

#define MAX_BLOCK_COUNT   ((1UL << 26) / 512 - 1U)

◆ READ_BLOCK_TIMEOUT_IN_MS

#define READ_BLOCK_TIMEOUT_IN_MS   (100U)

◆ SPEED_1Kbps

#define SPEED_1Kbps   (1000U)

◆ SPEED_1Mbps

#define SPEED_1Mbps   (1000UL * 1000UL)

◆ WRITE_BLOCK_TIMEOUT_IN_MS

#define WRITE_BLOCK_TIMEOUT_IN_MS   (1000U)

Function Documentation

◆ sd_all_send_cid()

static hpm_stat_t sd_all_send_cid ( sd_card_t card)
static

◆ sd_app_cmd_send_cond_op()

static hpm_stat_t sd_app_cmd_send_cond_op ( const sd_card_t card,
sd_ocr_t  ocr 
)
static

◆ sd_app_cmd_set_write_block_erase_count()

static hpm_stat_t sd_app_cmd_set_write_block_erase_count ( const sd_card_t card,
uint32_t  block_count 
)
static

◆ sd_be2le()

uint32_t sd_be2le ( uint32_t  be)
static

◆ sd_calculate_erase_timeout()

static uint32_t sd_calculate_erase_timeout ( const sd_card_t card,
uint32_t  start_block,
uint32_t  block_count 
)
static

Calculate SD erase timeout value Refer to SD_Specification_Part1_Physical_Layer_Specification_Version4.20.pdf, section 4.14 for more details.

◆ sd_check_card_parameters()

static hpm_stat_t sd_check_card_parameters ( const sd_card_t card)
static

◆ sd_convert_data_endian()

static void sd_convert_data_endian ( uint32_t *  word,
uint32_t  word_count 
)
static

◆ sd_decode_csd()

static void sd_decode_csd ( sd_card_t card,
const uint32_t *  raw_csd 
)
static

◆ sd_decode_scr()

void sd_decode_scr ( sd_card_t card,
const uint32_t *  raw_scr 
)
static

◆ sd_decode_status()

static void sd_decode_status ( sd_card_t card,
uint32_t *  raw_status 
)
static

◆ sd_error_recovery()

static hpm_stat_t sd_error_recovery ( const sd_card_t card,
hpm_stat_t  last_error 
)
static

◆ sd_probe_bus_voltage()

static hpm_stat_t sd_probe_bus_voltage ( sd_card_t card)
static

◆ sd_send_card_status()

static hpm_stat_t sd_send_card_status ( sd_card_t card)
static

◆ sd_send_cmd()

static hpm_stat_t sd_send_cmd ( const sd_card_t card,
const sdmmchost_cmd_t cmd 
)
static

◆ sd_send_csd()

static hpm_stat_t sd_send_csd ( sd_card_t card)
static

◆ sd_send_if_cond()

static hpm_stat_t sd_send_if_cond ( const sd_card_t card)
static

◆ sd_send_rca()

static hpm_stat_t sd_send_rca ( sd_card_t card)
static

◆ sd_send_scr()

static hpm_stat_t sd_send_scr ( sd_card_t card)
static

◆ sd_set_bus_timing()

static hpm_stat_t sd_set_bus_timing ( sd_card_t card,
sdmmc_speed_mode_t  timing_mode 
)
static

◆ sd_set_bus_width()

static hpm_stat_t sd_set_bus_width ( const sd_card_t card,
sdmmc_buswidth_t  buswidth 
)
static

◆ sd_switch_function()

hpm_stat_t sd_switch_function ( sd_card_t card,
uint32_t  mode,
uint32_t  group,
uint32_t  number 
)
static

◆ sd_switch_voltage()

static hpm_stat_t sd_switch_voltage ( const sd_card_t card)
static

◆ sd_transfer()

static hpm_stat_t sd_transfer ( const sd_card_t card,
const sdmmchost_xfer_t content 
)
static