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, 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 (sd_card_t *card, sd_ocr_t ocr)
 
static hpm_stat_t sd_send_if_cond (sd_card_t *card)
 
static hpm_stat_t sd_probe_bus_voltage (sd_card_t *card)
 
static hpm_stat_t sd_switch_voltage (sd_card_t *card)
 
static void sd_decode_csd (sd_card_t *card, 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 (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 (sd_card_t *card)
 
static hpm_stat_t sd_app_cmd_set_write_block_erase_count (sd_card_t *card, uint32_t block_count)
 
static hpm_stat_t sd_error_recovery (sd_card_t *card)
 
static hpm_stat_t sd_send_cmd (sd_card_t *card, sdmmchost_cmd_t *cmd)
 
static hpm_stat_t sd_transfer (sd_card_t *card, sdmmchost_xfer_t *content)
 
static hpm_stat_t sd_all_send_cid (sd_card_t *card)
 
void sd_card_deinit (sd_card_t *card)
 
hpm_stat_t sd_host_init (sd_card_t *card)
 
hpm_stat_t sd_init (sd_card_t *card)
 
void sd_deinit (sd_card_t *card)
 
hpm_stat_t sd_card_init (sd_card_t *card)
 
bool sd_is_card_present (sd_card_t *card)
 
hpm_stat_t sd_select_card (sd_card_t *card, bool is_selected)
 
hpm_stat_t sd_read_status (sd_card_t *card)
 
hpm_stat_t sd_read_blocks (sd_card_t *card, uint8_t *buffer, uint32_t start_block, uint32_t block_count)
 
hpm_stat_t sd_write_blocks (sd_card_t *card, const uint8_t *buffer, uint32_t start_block, uint32_t block_count)
 
static uint32_t sd_calculate_erase_timeout (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)
 
hpm_stat_t sd_set_driver_strength (sd_card_t *card, sd_drive_strength_t driver_strength)
 
hpm_stat_t sd_set_max_current (sd_card_t *card, sd_max_current_t max_current)
 
hpm_stat_t sd_polling_card_status_busy (sd_card_t *card, uint32_t timeout_ms)
 

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 ( 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 ( 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 ( 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_card_deinit()

void sd_card_deinit ( sd_card_t card)

◆ sd_card_init()

hpm_stat_t sd_card_init ( sd_card_t card)

Send CMD: Set power limit

◆ sd_check_card_parameters()

static hpm_stat_t sd_check_card_parameters ( 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,
uint32_t *  raw_csd 
)
static

◆ sd_decode_scr()

void sd_decode_scr ( sd_card_t card,
uint32_t *  raw_scr 
)
static

◆ sd_decode_status()

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

◆ sd_deinit()

void sd_deinit ( sd_card_t card)

◆ sd_erase_blocks()

hpm_stat_t sd_erase_blocks ( sd_card_t card,
uint32_t  start_block,
uint32_t  block_count 
)

◆ sd_error_recovery()

static hpm_stat_t sd_error_recovery ( sd_card_t card)
static

◆ sd_host_init()

hpm_stat_t sd_host_init ( sd_card_t card)

◆ sd_init()

hpm_stat_t sd_init ( sd_card_t card)

◆ sd_is_card_present()

bool sd_is_card_present ( sd_card_t card)

◆ sd_polling_card_status_busy()

hpm_stat_t sd_polling_card_status_busy ( sd_card_t card,
uint32_t  timeout_ms 
)

◆ sd_probe_bus_voltage()

static hpm_stat_t sd_probe_bus_voltage ( sd_card_t card)
static

◆ sd_read_blocks()

hpm_stat_t sd_read_blocks ( sd_card_t card,
uint8_t *  buffer,
uint32_t  start_block,
uint32_t  block_count 
)

◆ sd_read_status()

hpm_stat_t sd_read_status ( sd_card_t card)

◆ sd_select_card()

hpm_stat_t sd_select_card ( sd_card_t card,
bool  is_selected 
)

◆ 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 ( sd_card_t card,
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 ( 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 ( sd_card_t card,
sdmmc_buswidth_t  buswidth 
)
static

◆ sd_set_driver_strength()

hpm_stat_t sd_set_driver_strength ( sd_card_t card,
sd_drive_strength_t  driver_strength 
)

◆ sd_set_max_current()

hpm_stat_t sd_set_max_current ( sd_card_t card,
sd_max_current_t  max_current 
)

◆ 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 ( sd_card_t card)
static

◆ sd_transfer()

static hpm_stat_t sd_transfer ( sd_card_t card,
sdmmchost_xfer_t content 
)
static

◆ sd_write_blocks()

hpm_stat_t sd_write_blocks ( sd_card_t card,
const uint8_t *  buffer,
uint32_t  start_block,
uint32_t  block_count 
)