HPM SDK
HPMicro Software Development Kit
hpm_sdmmc_common.h File Reference
#include "hpm_common.h"
#include "hpm_sdmmc_card.h"
#include "hpm_sdmmc_host.h"

Go to the source code of this file.

Macros

#define SDMMC_CLOCK_400KHZ   (400000UL)
 
#define SD_CLOCK_25MHZ   (25000000UL)
 
#define SD_CLOCK_50MHZ   (50000000UL)
 
#define SD_CLOCK_100MHZ   (100000000UL)
 
#define SD_CLOCK_208MHZ   (208000000UL)
 
#define MMC_CLOCK_26MHz   (26000000UL)
 
#define MMC_CLOCK_52MHz   (52000000UL)
 
#define MMC_CLOCK_DDR52   (52000000UL)
 
#define MMC_CLOCK_HS200   (200000000UL)
 
#define MMC_CLOCK_HS400   (200000000UL)
 

Enumerations

enum  {
  sdmmc_state_idle = 0 , sdmmc_state_ready = 1 , sdmmc_state_identify = 2 , sdmmc_state_standby = 3 ,
  sdmmc_state_transfer = 4 , sdmmc_state_send_data = 5 , sdmmc_state_receive_data = 6 , sdmmc_state_program = 7 ,
  sdmmc_state_disconnect = 8
}
 
enum  sdmmc_operation_voltage_t { sdmmc_operation_voltage_1v8 = 5 , sdmmc_operation_voltage_3v0 = 6 , sdmmc_operation_voltage_3v3 = 7 }
 
enum  sdmmc_resp_type_t {
  sdmmc_resp_none = 0 , sdmmc_resp_r1 , sdmmc_resp_r1b , sdmmc_resp_r2 ,
  sdmmc_resp_r3 , sdmmc_resp_r4 , sdmmc_resp_r5 , sdmmc_resp_r5b ,
  sdmmc_resp_r6 , sdmmc_resp_r7
}
 
enum  {
  status_sdmmc_card_not_support = MAKE_STATUS(status_group_sdmmc, 0) , status_sdmmc_wait_card_insert_timeout = MAKE_STATUS(status_group_sdmmc, 1) , status_sdmmc_no_sd_card_inserted = MAKE_STATUS(status_group_sdmmc, 2) , status_sdmmc_device_init_required = MAKE_STATUS(status_group_sdmmc, 3) ,
  status_sdmmc_wait_busy_timeout = MAKE_STATUS(status_group_sdmmc, 4)
}
 

Functions

hpm_stat_t sdmmc_go_idle_state (sdmmc_host_t *host, uint32_t argument)
 Switch device to Idle state. More...
 
hpm_stat_t sdmmc_go_inactive_state (sdmmc_host_t *host, uint16_t relative_addr)
 Switch device to Inactive state. More...
 
hpm_stat_t sdmmc_select_card (sdmmc_host_t *host, uint16_t relative_addr, bool is_selected)
 Select/De-select the device. More...
 
hpm_stat_t sdmmc_send_application_command (sdmmc_host_t *host, uint16_t relative_addr)
 Send Application Command. More...
 
hpm_stat_t sdmmc_set_block_count (sdmmc_host_t *host, uint32_t block_count)
 Set block count. More...
 
hpm_stat_t sdmmc_set_block_size (sdmmc_host_t *host, uint32_t block_size)
 Set Block size. More...
 
hpm_stat_t sdmmc_enable_auto_tuning (sdmmc_host_t *host)
 Enable Auto Tuning mode. More...
 
uint32_t extract_csd_field (const uint32_t *raw_csd, uint8_t end_offset, uint8_t start_offset)
 Extract Fields from raw CSD data. More...
 
uint32_t sdmmc_get_sys_addr (sdmmc_host_t *host, uint32_t addr)
 Get System address. More...
 

Macro Definition Documentation

◆ MMC_CLOCK_26MHz

#define MMC_CLOCK_26MHz   (26000000UL)

◆ MMC_CLOCK_52MHz

#define MMC_CLOCK_52MHz   (52000000UL)

◆ MMC_CLOCK_DDR52

#define MMC_CLOCK_DDR52   (52000000UL)

◆ MMC_CLOCK_HS200

#define MMC_CLOCK_HS200   (200000000UL)

◆ MMC_CLOCK_HS400

#define MMC_CLOCK_HS400   (200000000UL)

◆ SD_CLOCK_100MHZ

#define SD_CLOCK_100MHZ   (100000000UL)

◆ SD_CLOCK_208MHZ

#define SD_CLOCK_208MHZ   (208000000UL)

◆ SD_CLOCK_25MHZ

#define SD_CLOCK_25MHZ   (25000000UL)

◆ SD_CLOCK_50MHZ

#define SD_CLOCK_50MHZ   (50000000UL)

◆ SDMMC_CLOCK_400KHZ

#define SDMMC_CLOCK_400KHZ   (400000UL)

Enumeration Type Documentation

◆ anonymous enum

anonymous enum
Enumerator
sdmmc_state_idle 
sdmmc_state_ready 
sdmmc_state_identify 
sdmmc_state_standby 
sdmmc_state_transfer 
sdmmc_state_send_data 
sdmmc_state_receive_data 
sdmmc_state_program 
sdmmc_state_disconnect 

◆ anonymous enum

anonymous enum
Enumerator
status_sdmmc_card_not_support 
status_sdmmc_wait_card_insert_timeout 
status_sdmmc_no_sd_card_inserted 
status_sdmmc_device_init_required 
status_sdmmc_wait_busy_timeout 

◆ sdmmc_operation_voltage_t

Enumerator
sdmmc_operation_voltage_1v8 
sdmmc_operation_voltage_3v0 
sdmmc_operation_voltage_3v3 

◆ sdmmc_resp_type_t

Enumerator
sdmmc_resp_none 
sdmmc_resp_r1 
sdmmc_resp_r1b 
sdmmc_resp_r2 
sdmmc_resp_r3 
sdmmc_resp_r4 
sdmmc_resp_r5 
sdmmc_resp_r5b 
sdmmc_resp_r6 
sdmmc_resp_r7 

Function Documentation

◆ extract_csd_field()

uint32_t extract_csd_field ( const uint32_t *  raw_csd,
uint8_t  end_offset,
uint8_t  start_offset 
)

Extract Fields from raw CSD data.

Parameters
[in]raw_csdRaw CSD data array
[in]end_offsetend offset of the specific field (in terms of bit)
[in]start_offsetstart offset of the specific field (in terms of bit)
Returns
Extracted CSD field

◆ sdmmc_enable_auto_tuning()

hpm_stat_t sdmmc_enable_auto_tuning ( sdmmc_host_t host)

Enable Auto Tuning mode.

Parameters
[in/out]host SD/MMC Host Context
Returns
status_success if operation is successful

◆ sdmmc_get_sys_addr()

uint32_t sdmmc_get_sys_addr ( sdmmc_host_t host,
uint32_t  addr 
)

Get System address.

Parameters
[in]hostSD/MMC Host Context
[in]addrmemory address
Returns
Converted system address

◆ sdmmc_go_idle_state()

hpm_stat_t sdmmc_go_idle_state ( sdmmc_host_t host,
uint32_t  argument 
)

Switch device to Idle state.

Parameters
[in/out]host SD/MMC Host Context
[in]argumentArgument for CMD0
Returns
status_success if operation is successful

◆ sdmmc_go_inactive_state()

hpm_stat_t sdmmc_go_inactive_state ( sdmmc_host_t host,
uint16_t  relative_addr 
)

Switch device to Inactive state.

Parameters
[in/out]host SD/MMC Host Context
[in]relative_addrdevice relative address
Returns
status_succes if operation is successful

◆ sdmmc_select_card()

hpm_stat_t sdmmc_select_card ( sdmmc_host_t host,
uint16_t  relative_addr,
bool  is_selected 
)

Select/De-select the device.

Parameters
[in/out]host SD/MMC Host Context
[in]relative_addrdevice relative address
[in]is_selectedtrue: select, false: de-select
Returns
status_success if operation is successful

◆ sdmmc_send_application_command()

hpm_stat_t sdmmc_send_application_command ( sdmmc_host_t host,
uint16_t  relative_addr 
)

Send Application Command.

Parameters
[in/out]host SD/MMC Host Context
[in]relative_addrdevice related address
Returns
status_success if operation is successful

◆ sdmmc_set_block_count()

hpm_stat_t sdmmc_set_block_count ( sdmmc_host_t host,
uint32_t  block_count 
)

Set block count.

Parameters
[in/out]host SD/MMC Host Context
[in]block_countSD/MMC Block count
Returns
status_success if operation is successful

◆ sdmmc_set_block_size()

hpm_stat_t sdmmc_set_block_size ( sdmmc_host_t host,
uint32_t  block_size 
)

Set Block size.

Parameters
[in/out]host SD/MMC Host Context
[in]block_sizeSD/MMC Block size
Returns
status_success if operation is successful