HPM SDK
HPMicro Software Development Kit
hpm_sdmmc_sd.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_SD_H
9 #define HPM_SDMMC_SD_H
10 
11 #include "hpm_sdmmc_common.h"
12 #include "hpm_sdmmc_card.h"
13 #include "hpm_sdmmc_port.h"
14 
15 typedef enum {
22 
23 typedef enum {
29 
30 typedef enum {
36 
37 
38 
39 typedef union {
40  uint32_t flags;
41  struct {
44  uint32_t support_4bit_width: 1;
46  };
47 } sd_flags_t;
48 
49 enum {
54 };
55 
56 enum {
59 };
60 
61 typedef union {
62  uint32_t status_word[16];
63  struct {
64  uint32_t reserved0[8];
65  uint16_t reserved1;
71 
76 
88  };
90 
91 typedef struct _sdmmc_sdcard {
92  sdmmc_host_t *host;
93  uint16_t relative_addr;
94  sd_cid_t cid;
95  sd_ocr_t ocr;
96  sd_csd_t csd;
97  sd_scr_t scr;
99  sd_status_t status;
100  sdmmc_r1_status_t r1_status;
101  sd_flags_t sd_flags;
102 
103  uint32_t block_count;
104  uint32_t block_size;
105  uint32_t max_freq;
106  uint64_t card_size_in_bytes;
107 
108  sdmmc_speed_mode_t current_timing;
109  sd_drive_strength_t drive_strength;
110  sd_max_current_t max_current;
111  sdmmc_operation_voltage_t operation_voltage;
112 
113  bool is_host_ready;
115 
116 
117 #ifdef __cplusplus
118 extern "C" {
119 #endif
120 
122 
123 void sd_deinit(sd_card_t *card);
124 
126 
127 void sd_card_deinit(sd_card_t *card);
128 
130 
132 
133 void sd_set_card_power(sd_card_t *card, bool enable);
134 
135 bool sd_is_card_present(sd_card_t *card);
136 
138 
139 hpm_stat_t sd_select_card(sd_card_t *card, bool is_selected);
140 
142 
143 hpm_stat_t sd_read_blocks(sd_card_t *card, uint8_t *buffer, uint32_t start_block, uint32_t block_count);
144 
145 hpm_stat_t sd_write_blocks(sd_card_t *card, const uint8_t *buffer, uint32_t start_block, uint32_t block_count);
146 
147 hpm_stat_t sd_erase_blocks(sd_card_t *card, uint32_t start_block, uint32_t block_count);
148 
150 
152 
153 hpm_stat_t sd_polling_card_status_busy(sd_card_t *card, uint32_t timeout_ms);
154 
155 
156 #ifdef __cplusplus
157 }
158 #endif
159 
160 #endif /* HPM_SDMMC_SD_H */
uint32_t hpm_stat_t
Definition: hpm_common.h:123
struct _sd_csd sd_csd_t
SD Card CSD register information.
sdmmc_operation_voltage_t
Definition: hpm_sdmmc_common.h:44
sdmmc_speed_mode_t
SD/MMC Speed definitions.
Definition: hpm_sdmmc_host.h:88
hpm_stat_t sd_set_driver_strength(sd_card_t *card, sd_drive_strength_t driver_strength)
Definition: hpm_sdmmc_sd.c:1099
hpm_stat_t sd_host_deinit(sd_card_t *card)
bool sd_check_readonly(sd_card_t *card)
struct _sdmmc_sdcard sd_card_t
hpm_stat_t sd_host_init(sd_card_t *card)
Definition: hpm_sdmmc_sd.c:651
hpm_stat_t sd_select_card(sd_card_t *card, bool is_selected)
Definition: hpm_sdmmc_sd.c:846
hpm_stat_t sd_init(sd_card_t *card)
Definition: hpm_sdmmc_sd.c:666
sd_max_current_t
Definition: hpm_sdmmc_sd.h:30
@ sd_current_limit_800ma
Definition: hpm_sdmmc_sd.h:34
@ sd_current_limit_600ma
Definition: hpm_sdmmc_sd.h:33
@ sd_current_limit_400ma
Definition: hpm_sdmmc_sd.h:32
@ sd_current_limit_200ma
Definition: hpm_sdmmc_sd.h:31
hpm_stat_t sd_set_max_current(sd_card_t *card, sd_max_current_t max_current)
Definition: hpm_sdmmc_sd.c:1105
sd_timing_mode_t
Definition: hpm_sdmmc_sd.h:15
@ sd_timing_sdr50
Definition: hpm_sdmmc_sd.h:18
@ sd_timing_sdr104
Definition: hpm_sdmmc_sd.h:19
@ sd_timing_sdr25_highspeed
Definition: hpm_sdmmc_sd.h:17
@ sd_timing_sdr12_default
Definition: hpm_sdmmc_sd.h:16
@ sd_timing_ddr50
Definition: hpm_sdmmc_sd.h:20
void sd_card_deinit(sd_card_t *card)
Definition: hpm_sdmmc_sd.c:646
void sd_deinit(sd_card_t *card)
Definition: hpm_sdmmc_sd.c:702
@ sd_switch_function_mode_set
Definition: hpm_sdmmc_sd.h:58
@ sd_switch_function_mode_check
Definition: hpm_sdmmc_sd.h:57
void sd_set_card_power(sd_card_t *card, bool enable)
bool sd_is_card_present(sd_card_t *card)
Definition: hpm_sdmmc_sd.c:841
hpm_stat_t sd_read_status(sd_card_t *card)
Definition: hpm_sdmmc_sd.c:852
sd_drive_strength_t
Definition: hpm_sdmmc_sd.h:23
@ sd_drive_strength_typea
Definition: hpm_sdmmc_sd.h:25
@ sd_drive_strength_typec
Definition: hpm_sdmmc_sd.h:26
@ sd_drive_strength_typeb
Definition: hpm_sdmmc_sd.h:24
@ sd_drive_strength_typed
Definition: hpm_sdmmc_sd.h:27
hpm_stat_t sd_erase_blocks(sd_card_t *card, uint32_t start_block, uint32_t block_count)
Definition: hpm_sdmmc_sd.c:1051
hpm_stat_t sd_card_init(sd_card_t *card)
Definition: hpm_sdmmc_sd.c:708
hpm_stat_t sd_write_blocks(sd_card_t *card, const uint8_t *buffer, uint32_t start_block, uint32_t block_count)
Definition: hpm_sdmmc_sd.c:947
hpm_stat_t sd_polling_card_status_busy(sd_card_t *card, uint32_t timeout_ms)
Definition: hpm_sdmmc_sd.c:1111
@ sd_switch_function_group_drive_strength
Definition: hpm_sdmmc_sd.h:52
@ sd_switch_function_group_access_mode
Definition: hpm_sdmmc_sd.h:50
@ sd_switch_function_group_power_limit
Definition: hpm_sdmmc_sd.h:53
@ sd_switch_function_group_command_system
Definition: hpm_sdmmc_sd.h:51
hpm_stat_t sd_read_blocks(sd_card_t *card, uint8_t *buffer, uint32_t start_block, uint32_t block_count)
Definition: hpm_sdmmc_sd.c:882
SD Card Satus Register Information.
Definition: hpm_sdmmc_card.h:161
Definition: hpm_sdmmc_host.h:180
SD CID Register Information.
Definition: hpm_sdmmc_card.h:181
Definition: hpm_sdmmc_sd.h:39
uint32_t support_speed_class_control_cmd
Definition: hpm_sdmmc_sd.h:42
uint32_t flags
Definition: hpm_sdmmc_sd.h:40
uint32_t support_4bit_width
Definition: hpm_sdmmc_sd.h:44
uint32_t support_set_block_count_cmd
Definition: hpm_sdmmc_sd.h:43
uint32_t is_byte_addressing_mode
Definition: hpm_sdmmc_sd.h:45
SD OCR register information.
Definition: hpm_sdmmc_card.h:199
SD Card SCR register information.
Definition: hpm_sdmmc_card.h:265
SD/MMC R1 register information.
Definition: hpm_sdmmc_card.h:126
Definition: hpm_sdmmc_sd.h:61
uint32_t busy_status_for_function_in_group6
Definition: hpm_sdmmc_sd.h:72
uint32_t max_current_or_power_consumption
Definition: hpm_sdmmc_sd.h:87
uint32_t function_selection_of_function_group3
Definition: hpm_sdmmc_sd.h:77
uint16_t busy_status_for_function_in_group1
Definition: hpm_sdmmc_sd.h:66
uint32_t support_bits_of_functions_in_function_group4
Definition: hpm_sdmmc_sd.h:84
uint16_t reserved1
Definition: hpm_sdmmc_sd.h:65
uint32_t function_selection_of_function_group5
Definition: hpm_sdmmc_sd.h:79
uint32_t function_selection_of_function_group2
Definition: hpm_sdmmc_sd.h:75
uint32_t support_bits_of_functions_in_function_group6
Definition: hpm_sdmmc_sd.h:86
uint32_t function_selection_of_function_group4
Definition: hpm_sdmmc_sd.h:78
uint32_t support_bits_of_functions_in_function_group1
Definition: hpm_sdmmc_sd.h:81
uint32_t support_bits_of_functions_in_function_group5
Definition: hpm_sdmmc_sd.h:85
uint16_t busy_status_for_function_in_group3
Definition: hpm_sdmmc_sd.h:68
uint32_t function_selection_of_function_group6
Definition: hpm_sdmmc_sd.h:80
uint32_t data_structure_version
Definition: hpm_sdmmc_sd.h:73
uint16_t busy_status_for_function_in_group5
Definition: hpm_sdmmc_sd.h:70
uint32_t function_selection_of_function_group1
Definition: hpm_sdmmc_sd.h:74
uint16_t busy_status_for_function_in_group2
Definition: hpm_sdmmc_sd.h:67
uint32_t support_bits_of_functions_in_function_group3
Definition: hpm_sdmmc_sd.h:83
uint16_t busy_status_for_function_in_group4
Definition: hpm_sdmmc_sd.h:69
uint32_t support_bits_of_functions_in_function_group2
Definition: hpm_sdmmc_sd.h:82