HPM SDK
HPMicro Software Development Kit
hpm_sdmmc_common.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2021-2024 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 
20 #include "hpm_common.h"
21 #include "hpm_sdmmc_card.h"
22 #include "hpm_sdmmc_host.h"
23 
24 /******************************************************************
25  *
26  * @brief SD/MMC Typical Clock frequency definitions
27  *
28  ******************************************************************/
29 #define SDMMC_CLOCK_400KHZ (400000UL)
30 #define SD_CLOCK_25MHZ (25000000UL)
31 #define SD_CLOCK_50MHZ (50000000UL)
32 #define SD_CLOCK_100MHZ (100000000UL)
33 #define SD_CLOCK_208MHZ (208000000UL)
34 
35 #define MMC_CLOCK_26MHz (26000000UL)
36 #define MMC_CLOCK_52MHz (52000000UL)
37 #define MMC_CLOCK_DDR52 (52000000UL)
38 #define MMC_CLOCK_HS200 (200000000UL)
39 #define MMC_CLOCK_HS400 (200000000UL)
40 
41 enum {
51 };
52 
53 typedef enum {
58 
59 
60 typedef enum {
72 
73 enum {
79 };
80 
81 #ifndef HPM_SDMMC_MALLOC
82 #define HPM_SDMMC_MALLOC malloc
83 #endif
84 
85 #ifndef HPM_SDMMC_FREE
86 #define HPM_SDMMC_FREE free
87 #endif
88 
89 #ifdef __cplusplus
90 extern "C" {
91 #endif
92 
99 hpm_stat_t sdmmc_go_idle_state(sdmmc_host_t *host, uint32_t argument);
100 
107 hpm_stat_t sdmmc_go_inactive_state(sdmmc_host_t *host, uint16_t relative_addr);
108 
116 hpm_stat_t sdmmc_select_card(sdmmc_host_t *host, uint16_t relative_addr, bool is_selected);
117 
124 hpm_stat_t sdmmc_send_application_command(sdmmc_host_t *host, uint16_t relative_addr);
125 
132 hpm_stat_t sdmmc_set_block_count(sdmmc_host_t *host, uint32_t block_count);
133 
140 hpm_stat_t sdmmc_set_block_size(sdmmc_host_t *host, uint32_t block_size);
141 
148 
156 uint32_t extract_csd_field(const uint32_t *raw_csd, uint8_t end_offset, uint8_t start_offset);
157 
164 extern uint32_t sdmmc_get_sys_addr(const sdmmc_host_t *host, uint32_t addr);
165 
166 
167 #ifdef __cplusplus
168 }
169 #endif
170 
176 #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:53
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
uint32_t sdmmc_get_sys_addr(const sdmmc_host_t *host, uint32_t addr)
Get System address.
Definition: hpm_sdmmc_port.c:13
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(const sdmmc_host_t *host)
Enable Auto Tuning mode.
Definition: hpm_sdmmc_common.c:136
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:60
hpm_stat_t sdmmc_set_block_size(sdmmc_host_t *host, uint32_t block_size)
Set Block size.
Definition: hpm_sdmmc_common.c:116
@ sdmmc_operation_voltage_3v0
Definition: hpm_sdmmc_common.h:55
@ sdmmc_operation_voltage_3v3
Definition: hpm_sdmmc_common.h:56
@ sdmmc_operation_voltage_1v8
Definition: hpm_sdmmc_common.h:54
@ status_sdmmc_wait_busy_timeout
Definition: hpm_sdmmc_common.h:78
@ status_sdmmc_card_not_support
Definition: hpm_sdmmc_common.h:74
@ status_sdmmc_device_init_required
Definition: hpm_sdmmc_common.h:77
@ status_sdmmc_wait_card_insert_timeout
Definition: hpm_sdmmc_common.h:75
@ status_sdmmc_no_sd_card_inserted
Definition: hpm_sdmmc_common.h:76
@ sdmmc_state_standby
Definition: hpm_sdmmc_common.h:45
@ sdmmc_state_disconnect
Definition: hpm_sdmmc_common.h:50
@ sdmmc_state_identify
Definition: hpm_sdmmc_common.h:44
@ sdmmc_state_ready
Definition: hpm_sdmmc_common.h:43
@ sdmmc_state_program
Definition: hpm_sdmmc_common.h:49
@ sdmmc_state_receive_data
Definition: hpm_sdmmc_common.h:48
@ sdmmc_state_idle
Definition: hpm_sdmmc_common.h:42
@ sdmmc_state_send_data
Definition: hpm_sdmmc_common.h:47
@ sdmmc_state_transfer
Definition: hpm_sdmmc_common.h:46
@ sdmmc_resp_r7
Definition: hpm_sdmmc_common.h:70
@ sdmmc_resp_none
Definition: hpm_sdmmc_common.h:61
@ sdmmc_resp_r6
Definition: hpm_sdmmc_common.h:69
@ sdmmc_resp_r1
Definition: hpm_sdmmc_common.h:62
@ sdmmc_resp_r5b
Definition: hpm_sdmmc_common.h:68
@ sdmmc_resp_r3
Definition: hpm_sdmmc_common.h:65
@ sdmmc_resp_r4
Definition: hpm_sdmmc_common.h:66
@ sdmmc_resp_r1b
Definition: hpm_sdmmc_common.h:63
@ sdmmc_resp_r2
Definition: hpm_sdmmc_common.h:64
@ sdmmc_resp_r5
Definition: hpm_sdmmc_common.h:67
Definition: hpm_sdmmc_host.h:203