HPM SDK
HPMicro Software Development Kit
hpm_sdmmc_common.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2021-2023 HPMicro
3  *
4  * SPDX-License-Identifier: BSD-3-Clause
5  *
6  */
7 
8 #ifndef HPM_SDMMC_COMMON_H
9 #define HPM_SDMMC_COMMON_H
10 
11 #include "hpm_common.h"
12 #include "hpm_sdmmc_card.h"
13 #include "hpm_sdmmc_host.h"
14 
15 /******************************************************************
16  *
17  * @brief SD/MMC Typical Clock frequency definitions
18  *
19  ******************************************************************/
20 #define SDMMC_CLOCK_400KHZ (400000UL)
21 #define SD_CLOCK_25MHZ (25000000UL)
22 #define SD_CLOCK_50MHZ (50000000UL)
23 #define SD_CLOCK_100MHZ (100000000UL)
24 #define SD_CLOCK_208MHZ (208000000UL)
25 
26 #define MMC_CLOCK_26MHz (26000000UL)
27 #define MMC_CLOCK_52MHz (52000000UL)
28 #define MMC_CLOCK_DDR52 (52000000UL)
29 #define MMC_CLOCK_HS200 (200000000UL)
30 #define MMC_CLOCK_HS400 (200000000UL)
31 
32 enum {
42 };
43 
44 typedef enum {
49 
50 
51 typedef enum {
63 
64 enum {
70 
71 };
72 
73 #ifdef __cplusplus
74 extern "C" {
75 #endif
76 
83  hpm_stat_t sdmmc_go_idle_state(sdmmc_host_t *host, uint32_t argument);
90  hpm_stat_t sdmmc_go_inactive_state(sdmmc_host_t *host, uint16_t relative_addr);
98  hpm_stat_t sdmmc_select_card(sdmmc_host_t *host, uint16_t relative_addr, bool is_selected);
105  hpm_stat_t sdmmc_send_application_command(sdmmc_host_t *host, uint16_t relative_addr);
112  hpm_stat_t sdmmc_set_block_count(sdmmc_host_t *host, uint32_t block_count);
119  hpm_stat_t sdmmc_set_block_size(sdmmc_host_t *host, uint32_t block_size);
120 
127 
135  uint32_t extract_csd_field(const uint32_t *raw_csd, uint8_t end_offset, uint8_t start_offset);
136 
143  extern uint32_t sdmmc_get_sys_addr(sdmmc_host_t *host, uint32_t addr);
144 
145 
146 #ifdef __cplusplus
147 }
148 #endif
149 
150 
151 #endif /* HPM_SDMMC_COMMON_H */
uint32_t hpm_stat_t
Definition: hpm_common.h:123
#define MAKE_STATUS(group, code)
Definition: hpm_common.h:132
@ status_group_sdmmc
Definition: hpm_common.h:166
sdmmc_operation_voltage_t
Definition: hpm_sdmmc_common.h:44
@ sdmmc_operation_voltage_3v0
Definition: hpm_sdmmc_common.h:46
@ sdmmc_operation_voltage_3v3
Definition: hpm_sdmmc_common.h:47
@ sdmmc_operation_voltage_1v8
Definition: hpm_sdmmc_common.h:45
@ sdmmc_state_standby
Definition: hpm_sdmmc_common.h:36
@ sdmmc_state_disconnect
Definition: hpm_sdmmc_common.h:41
@ sdmmc_state_identify
Definition: hpm_sdmmc_common.h:35
@ sdmmc_state_ready
Definition: hpm_sdmmc_common.h:34
@ sdmmc_state_program
Definition: hpm_sdmmc_common.h:40
@ sdmmc_state_receive_data
Definition: hpm_sdmmc_common.h:39
@ sdmmc_state_idle
Definition: hpm_sdmmc_common.h:33
@ sdmmc_state_send_data
Definition: hpm_sdmmc_common.h:38
@ sdmmc_state_transfer
Definition: hpm_sdmmc_common.h:37
hpm_stat_t sdmmc_send_application_command(sdmmc_host_t *host, uint16_t relative_addr)
Send Application Command.
Definition: hpm_sdmmc_common.c:76
uint32_t extract_csd_field(const uint32_t *raw_csd, uint8_t end_offset, uint8_t start_offset)
Extract Fields from raw CSD data.
Definition: hpm_sdmmc_common.c:161
hpm_stat_t sdmmc_select_card(sdmmc_host_t *host, uint16_t relative_addr, bool is_selected)
Select/De-select the device.
Definition: hpm_sdmmc_common.c:52
hpm_stat_t sdmmc_go_idle_state(sdmmc_host_t *host, uint32_t argument)
Switch device to Idle state.
Definition: hpm_sdmmc_common.c:12
hpm_stat_t sdmmc_enable_auto_tuning(sdmmc_host_t *host)
Enable Auto Tuning mode.
Definition: hpm_sdmmc_common.c:136
uint32_t sdmmc_get_sys_addr(sdmmc_host_t *host, uint32_t addr)
Get System address.
Definition: hpm_sdmmc_port.c:13
@ status_sdmmc_wait_busy_timeout
Definition: hpm_sdmmc_common.h:69
@ status_sdmmc_card_not_support
Definition: hpm_sdmmc_common.h:65
@ status_sdmmc_device_init_required
Definition: hpm_sdmmc_common.h:68
@ status_sdmmc_wait_card_insert_timeout
Definition: hpm_sdmmc_common.h:66
@ status_sdmmc_no_sd_card_inserted
Definition: hpm_sdmmc_common.h:67
hpm_stat_t sdmmc_set_block_count(sdmmc_host_t *host, uint32_t block_count)
Set block count.
Definition: hpm_sdmmc_common.c:96
hpm_stat_t sdmmc_go_inactive_state(sdmmc_host_t *host, uint16_t relative_addr)
Switch device to Inactive state.
Definition: hpm_sdmmc_common.c:32
sdmmc_resp_type_t
Definition: hpm_sdmmc_common.h:51
@ sdmmc_resp_r7
Definition: hpm_sdmmc_common.h:61
@ sdmmc_resp_none
Definition: hpm_sdmmc_common.h:52
@ sdmmc_resp_r6
Definition: hpm_sdmmc_common.h:60
@ sdmmc_resp_r1
Definition: hpm_sdmmc_common.h:53
@ sdmmc_resp_r5b
Definition: hpm_sdmmc_common.h:59
@ sdmmc_resp_r3
Definition: hpm_sdmmc_common.h:56
@ sdmmc_resp_r4
Definition: hpm_sdmmc_common.h:57
@ sdmmc_resp_r1b
Definition: hpm_sdmmc_common.h:54
@ sdmmc_resp_r2
Definition: hpm_sdmmc_common.h:55
@ sdmmc_resp_r5
Definition: hpm_sdmmc_common.h:58
hpm_stat_t sdmmc_set_block_size(sdmmc_host_t *host, uint32_t block_size)
Set Block size.
Definition: hpm_sdmmc_common.c:116
Definition: hpm_sdmmc_host.h:180