HPM SDK
HPMicro Software Development Kit
hpm_sdmmc_sd.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_SD_H
9 #define HPM_SDMMC_SD_H
10 
20 #include "hpm_sdmmc_common.h"
21 #include "hpm_sdmmc_card.h"
22 #include "hpm_sdmmc_port.h"
23 
24 typedef enum {
31 
32 typedef enum {
38 
39 typedef enum {
45 
46 
47 
48 typedef union {
49  uint32_t flags;
50  struct {
53  uint32_t support_4bit_width: 1;
55  };
56 } sd_flags_t;
57 
58 enum {
63 };
64 
65 enum {
68 };
69 
70 typedef union {
71  uint32_t status_word[16];
72  struct {
73  uint32_t reserved0[8];
74  uint16_t reserved1;
80 
85 
97  };
99 
100 typedef struct _sdmmc_sdcard {
101  sdmmc_host_t *host;
102  uint16_t relative_addr;
103  sd_cid_t cid;
104  sd_ocr_t ocr;
105  sd_csd_t csd;
106  sd_scr_t scr;
108  sd_status_t status;
109  sdmmc_r1_status_t r1_status;
110  sd_flags_t sd_flags;
111 
112  uint32_t block_count;
113  uint32_t block_size;
114  uint32_t max_freq;
115  uint64_t card_size_in_bytes;
116 
117  sdmmc_speed_mode_t current_timing;
118  sd_drive_strength_t drive_strength;
119  sd_max_current_t max_current;
120  sdmmc_operation_voltage_t operation_voltage;
121 
122  bool is_host_ready;
124 
125 
126 #ifdef __cplusplus
127 extern "C" {
128 #endif
129 
138 
146 void sd_deinit(const sd_card_t *card);
147 
156 
164 void sd_card_deinit(sd_card_t *card);
165 
174 
183 
191 bool sd_is_card_present(const sd_card_t *card);
192 
200 hpm_stat_t sd_select_card(const sd_card_t *card, bool is_selected);
201 
210 
221 hpm_stat_t sd_read_blocks(sd_card_t *card, uint8_t *buffer, uint32_t start_block, uint32_t block_count);
222 
233 hpm_stat_t sd_write_blocks(sd_card_t *card, const uint8_t *buffer, uint32_t start_block, uint32_t block_count);
234 
244 hpm_stat_t sd_erase_blocks(sd_card_t *card, uint32_t start_block, uint32_t block_count);
245 
255 
264 
272 hpm_stat_t sd_polling_card_status_busy(sd_card_t *card, uint32_t timeout_ms);
273 
274 
275 #ifdef __cplusplus
276 }
277 #endif
278 
282 #endif /* HPM_SDMMC_SD_H */
uint32_t hpm_stat_t
Definition: hpm_common.h:123
hpm_stat_t sd_set_driver_strength(sd_card_t *card, sd_drive_strength_t driver_strength)
Set the driver strength for SD card.
Definition: hpm_sdmmc_sd.c:1110
hpm_stat_t sd_host_deinit(sd_card_t *card)
De-Initialize SD Host.
sdmmc_operation_voltage_t
Definition: hpm_sdmmc_common.h:53
struct _sdmmc_sdcard sd_card_t
hpm_stat_t sd_host_init(sd_card_t *card)
Initialize SD Host.
Definition: hpm_sdmmc_sd.c:654
hpm_stat_t sd_init(sd_card_t *card)
Initialize SD device.
Definition: hpm_sdmmc_sd.c:669
sd_max_current_t
Definition: hpm_sdmmc_sd.h:39
hpm_stat_t sd_set_max_current(sd_card_t *card, sd_max_current_t max_current)
Set the maximum current for SD card.
Definition: hpm_sdmmc_sd.c:1116
sd_timing_mode_t
Definition: hpm_sdmmc_sd.h:24
void sd_card_deinit(sd_card_t *card)
De-Initialize SD card.
Definition: hpm_sdmmc_sd.c:646
void sd_deinit(const sd_card_t *card)
De-Initialize SD device.
Definition: hpm_sdmmc_sd.c:705
hpm_stat_t sd_read_status(sd_card_t *card)
Read SD card status.
Definition: hpm_sdmmc_sd.c:855
sd_drive_strength_t
Definition: hpm_sdmmc_sd.h:32
hpm_stat_t sd_erase_blocks(sd_card_t *card, uint32_t start_block, uint32_t block_count)
Erase specified SD ranges.
Definition: hpm_sdmmc_sd.c:1062
hpm_stat_t sd_card_init(sd_card_t *card)
Initialize SD card.
Definition: hpm_sdmmc_sd.c:711
hpm_stat_t sd_select_card(const sd_card_t *card, bool is_selected)
Select/Deselect SD card.
Definition: hpm_sdmmc_sd.c:849
hpm_stat_t sd_write_blocks(sd_card_t *card, const uint8_t *buffer, uint32_t start_block, uint32_t block_count)
Write data to specified SD block.
Definition: hpm_sdmmc_sd.c:958
hpm_stat_t sd_polling_card_status_busy(sd_card_t *card, uint32_t timeout_ms)
Polling SD card status busy.
Definition: hpm_sdmmc_sd.c:1122
bool sd_is_card_present(const sd_card_t *card)
Check whether the SD card is present.
Definition: hpm_sdmmc_sd.c:844
sdmmc_speed_mode_t
SD/MMC Speed definitions.
Definition: hpm_sdmmc_host.h:103
hpm_stat_t sd_read_blocks(sd_card_t *card, uint8_t *buffer, uint32_t start_block, uint32_t block_count)
Read data from specified SD block.
Definition: hpm_sdmmc_sd.c:885
@ sd_current_limit_800ma
Definition: hpm_sdmmc_sd.h:43
@ sd_current_limit_600ma
Definition: hpm_sdmmc_sd.h:42
@ sd_current_limit_400ma
Definition: hpm_sdmmc_sd.h:41
@ sd_current_limit_200ma
Definition: hpm_sdmmc_sd.h:40
@ sd_timing_sdr50
Definition: hpm_sdmmc_sd.h:27
@ sd_timing_sdr104
Definition: hpm_sdmmc_sd.h:28
@ sd_timing_sdr25_highspeed
Definition: hpm_sdmmc_sd.h:26
@ sd_timing_sdr12_default
Definition: hpm_sdmmc_sd.h:25
@ sd_timing_ddr50
Definition: hpm_sdmmc_sd.h:29
@ sd_switch_function_mode_set
Definition: hpm_sdmmc_sd.h:67
@ sd_switch_function_mode_check
Definition: hpm_sdmmc_sd.h:66
@ sd_switch_function_group_drive_strength
Definition: hpm_sdmmc_sd.h:61
@ sd_switch_function_group_access_mode
Definition: hpm_sdmmc_sd.h:59
@ sd_switch_function_group_power_limit
Definition: hpm_sdmmc_sd.h:62
@ sd_switch_function_group_command_system
Definition: hpm_sdmmc_sd.h:60
@ sd_drive_strength_type_c
Definition: hpm_sdmmc_sd.h:35
@ sd_drive_strength_type_a
Definition: hpm_sdmmc_sd.h:34
@ sd_drive_strength_type_b
Definition: hpm_sdmmc_sd.h:33
@ sd_drive_strength_type_d
Definition: hpm_sdmmc_sd.h:36
struct _sd_csd sd_csd_t
SD Card CSD register information.
SD Card Status Register Information.
Definition: hpm_sdmmc_card.h:165
Definition: hpm_sdmmc_host.h:203
SD CID Register Information.
Definition: hpm_sdmmc_card.h:185
Definition: hpm_sdmmc_sd.h:48
uint32_t support_speed_class_control_cmd
Definition: hpm_sdmmc_sd.h:51
uint32_t flags
Definition: hpm_sdmmc_sd.h:49
uint32_t support_4bit_width
Definition: hpm_sdmmc_sd.h:53
uint32_t support_set_block_count_cmd
Definition: hpm_sdmmc_sd.h:52
uint32_t is_byte_addressing_mode
Definition: hpm_sdmmc_sd.h:54
SD OCR register information.
Definition: hpm_sdmmc_card.h:203
SD Card SCR register information.
Definition: hpm_sdmmc_card.h:269
SD/MMC R1 register information.
Definition: hpm_sdmmc_card.h:130
Definition: hpm_sdmmc_sd.h:70
uint32_t busy_status_for_function_in_group6
Definition: hpm_sdmmc_sd.h:81
uint32_t max_current_or_power_consumption
Definition: hpm_sdmmc_sd.h:96
uint32_t function_selection_of_function_group3
Definition: hpm_sdmmc_sd.h:86
uint16_t busy_status_for_function_in_group1
Definition: hpm_sdmmc_sd.h:75
uint32_t support_bits_of_functions_in_function_group4
Definition: hpm_sdmmc_sd.h:93
uint16_t reserved1
Definition: hpm_sdmmc_sd.h:74
uint32_t function_selection_of_function_group5
Definition: hpm_sdmmc_sd.h:88
uint32_t function_selection_of_function_group2
Definition: hpm_sdmmc_sd.h:84
uint32_t support_bits_of_functions_in_function_group6
Definition: hpm_sdmmc_sd.h:95
uint32_t function_selection_of_function_group4
Definition: hpm_sdmmc_sd.h:87
uint32_t support_bits_of_functions_in_function_group1
Definition: hpm_sdmmc_sd.h:90
uint32_t support_bits_of_functions_in_function_group5
Definition: hpm_sdmmc_sd.h:94
uint16_t busy_status_for_function_in_group3
Definition: hpm_sdmmc_sd.h:77
uint32_t function_selection_of_function_group6
Definition: hpm_sdmmc_sd.h:89
uint32_t data_structure_version
Definition: hpm_sdmmc_sd.h:82
uint16_t busy_status_for_function_in_group5
Definition: hpm_sdmmc_sd.h:79
uint32_t function_selection_of_function_group1
Definition: hpm_sdmmc_sd.h:83
uint16_t busy_status_for_function_in_group2
Definition: hpm_sdmmc_sd.h:76
uint32_t support_bits_of_functions_in_function_group3
Definition: hpm_sdmmc_sd.h:92
uint16_t busy_status_for_function_in_group4
Definition: hpm_sdmmc_sd.h:78
uint32_t support_bits_of_functions_in_function_group2
Definition: hpm_sdmmc_sd.h:91