8 #ifndef HPM_SDMMC_CARD_H
9 #define HPM_SDMMC_CARD_H
197 uint32_t cid_words[4];
232 typedef struct _sd_csd {
233 uint8_t csd_structure;
234 uint8_t data_read_access_time1;
235 uint8_t data_read_access_time2;
236 uint8_t transfer_speed;
237 uint16_t card_command_class;
238 bool support_read_block_partial;
239 bool support_write_block_misalignment;
240 bool support_read_block_misalignment;
241 bool is_dsr_implemented;
243 bool is_erase_block_enabled;
244 bool is_write_protection_group_enabled;
245 bool support_write_block_partial;
246 bool support_file_format_group;
248 bool support_permanent_write_protect;
249 bool support_temporary_write_protect;
251 uint8_t read_current_vdd_min;
252 uint8_t read_current_vdd_max;
253 uint8_t write_current_vdd_min;
254 uint8_t write_current_vdd_max;
255 uint8_t device_size_multiplier;
256 uint8_t write_speed_factor;
259 uint32_t device_size;
260 uint32_t read_block_len;
261 uint32_t erase_sector_size;
262 uint32_t max_write_block_len;
263 uint32_t write_protect_group_size;
287 uint32_t scr_word[2];
299 #define SDMMC_BLOCK_SIZE_DEFAULT (512U)
305 #define SPISD_DUMMY_BYTE 0xFFU
306 #define SPISD_START_TOKEN 0xFEU
307 #define SPISD_START_MULTI_WRITE_TOKEN 0xFCU
308 #define SPISD_END_MULTI_WRITE_TOKEN 0xFDU
312 #define SPI_SD_BLOCK_SIZE (512U)
317 #define SPISD_R1_IDLE_FLAG (0x01)
318 #define SPISD_R1_ERASE_RESET_FLAG (0x02)
319 #define SPISD_R1_ILLEGAL_CMD_FLAG (0x04)
320 #define SPISD_R1_CMD_CRC_FLAG (0x08)
321 #define SPISD_R1_ERASE_SEQ_ERROR_FLAG (0x10)
322 #define SPISD_R1_ADDR_ERROR_FLAG (0x20)
323 #define SPISD_R1_PARAM_ERROR_FLAG (0x40)
324 #define SPISD_R1_ZERO_FLAG (0x80)
@ sd_cmd_all_send_cid
Definition: hpm_sdmmc_card.h:54
@ sd_cmd_crc_option
Definition: hpm_sdmmc_card.h:63
@ sd_cmd_erase_end
Definition: hpm_sdmmc_card.h:62
@ sd_acmd_set_clear_card_detect
Definition: hpm_sdmmc_card.h:51
@ sd_cmd_send_csd
Definition: hpm_sdmmc_card.h:58
@ sd_acmd_sd_status
Definition: hpm_sdmmc_card.h:47
@ sd_cmd_send_if_cond
Definition: hpm_sdmmc_card.h:57
@ sd_cmd_erase_start
Definition: hpm_sdmmc_card.h:61
@ sd_cmd_send_relative_addr
Definition: hpm_sdmmc_card.h:55
@ sd_acmd_set_bus_width
Definition: hpm_sdmmc_card.h:46
@ sd_acmd_sd_send_op_cond
Definition: hpm_sdmmc_card.h:50
@ sd_acmd_send_scr
Definition: hpm_sdmmc_card.h:52
@ sd_cmd_switch
Definition: hpm_sdmmc_card.h:56
@ sd_acmd_set_num_wr_blocks
Definition: hpm_sdmmc_card.h:48
@ sd_cmd_send_tuning_block
Definition: hpm_sdmmc_card.h:60
@ sd_voltage_switch
Definition: hpm_sdmmc_card.h:59
@ sd_acmd_set_wr_blk_erase_count
Definition: hpm_sdmmc_card.h:49
struct _sd_csd sd_csd_t
SD Card CSD register information.
sdcard_type_t
Definition: hpm_sdmmc_card.h:292
@ card_type_mmc
Definition: hpm_sdmmc_card.h:293
@ card_type_sd_v2_hc
Definition: hpm_sdmmc_card.h:296
@ card_type_sd_v2
Definition: hpm_sdmmc_card.h:295
@ card_type_sd_v1
Definition: hpm_sdmmc_card.h:294
@ sdmmc_cmd_select_card
Definition: hpm_sdmmc_card.h:20
@ sdmmc_cmd_app_cmd
Definition: hpm_sdmmc_card.h:37
@ sdmmc_cmd_go_inactive_state
Definition: hpm_sdmmc_card.h:25
@ sdmmc_cmd_send_status
Definition: hpm_sdmmc_card.h:24
@ sdmmc_cmd_erase
Definition: hpm_sdmmc_card.h:35
@ sdmmc_cmd_set_block_length
Definition: hpm_sdmmc_card.h:26
@ sdmmc_cmd_send_cid
Definition: hpm_sdmmc_card.h:22
@ sdmmc_cmd_send_csd
Definition: hpm_sdmmc_card.h:21
@ sdmmc_cmd_go_idle_state
Definition: hpm_sdmmc_card.h:17
@ sdmmc_cmd_read_single_block
Definition: hpm_sdmmc_card.h:27
@ sdmmc_cmd_write_multiple_block
Definition: hpm_sdmmc_card.h:31
@ sdmmc_cmd_clear_write_protect
Definition: hpm_sdmmc_card.h:34
@ sdmmc_cmd_read_ocr
Definition: hpm_sdmmc_card.h:39
@ sdmmc_cmd_program_csd
Definition: hpm_sdmmc_card.h:32
@ sdmmc_cmd_general_cmd
Definition: hpm_sdmmc_card.h:38
@ sdmmc_cmd_stop_transmission
Definition: hpm_sdmmc_card.h:23
@ sdmmc_cmd_set_write_protect
Definition: hpm_sdmmc_card.h:33
@ sdmmc_cmd_all_send_cid
Definition: hpm_sdmmc_card.h:18
@ sdmmc_cmd_lock_unlock
Definition: hpm_sdmmc_card.h:36
@ sdmmc_cmd_read_multiple_block
Definition: hpm_sdmmc_card.h:28
@ sdmmc_cmd_write_single_block
Definition: hpm_sdmmc_card.h:30
@ sdmmc_cmd_set_block_count
Definition: hpm_sdmmc_card.h:29
@ sdmmc_cmd_set_dsr
Definition: hpm_sdmmc_card.h:19
@ sdio_cmd_io_send_op_cond
Definition: hpm_sdmmc_card.h:121
@ emmc_cmd_send_status
Definition: hpm_sdmmc_card.h:81
@ emmc_cmd_protocol_write
Definition: hpm_sdmmc_card.h:113
@ emmc_cmd_lock_unlock
Definition: hpm_sdmmc_card.h:107
@ emmc_cmd_protocol_read
Definition: hpm_sdmmc_card.h:112
@ emmc_cmd_send_write_prot
Definition: hpm_sdmmc_card.h:102
@ emmc_cmd_read_multiple_block
Definition: hpm_sdmmc_card.h:87
@ emmc_cmd_send_cid
Definition: hpm_sdmmc_card.h:79
@ emmc_cmd_execute_write_task
Definition: hpm_sdmmc_card.h:118
@ emmc_cmd_program_csd
Definition: hpm_sdmmc_card.h:93
@ emmc_cmd_set_relative_addr
Definition: hpm_sdmmc_card.h:72
@ emmc_cmd_send_ext_csd
Definition: hpm_sdmmc_card.h:77
@ emmc_cmd_switch
Definition: hpm_sdmmc_card.h:75
@ sdio_cmd_io_rw_direct
Definition: hpm_sdmmc_card.h:122
@ emmc_cmd_app_cmd
Definition: hpm_sdmmc_card.h:109
@ emmc_cmd_gen_cmd
Definition: hpm_sdmmc_card.h:110
@ emmc_cmd_fast_io
Definition: hpm_sdmmc_card.h:105
@ emmc_cmd_send_tuning_block
Definition: hpm_sdmmc_card.h:88
@ emmc_cmd_set_time
Definition: hpm_sdmmc_card.h:94
@ emmc_cmd_erase
Definition: hpm_sdmmc_card.h:98
@ sdio_cmd_io_rw_extend
Definition: hpm_sdmmc_card.h:123
@ emmc_cmd_go_inactive_state
Definition: hpm_sdmmc_card.h:83
@ emmc_cmd_set_write_prot
Definition: hpm_sdmmc_card.h:100
@ emmc_cmd_write_multiple_block
Definition: hpm_sdmmc_card.h:91
@ emmc_cmd_bus_test
Definition: hpm_sdmmc_card.h:82
@ emmc_cmd_send_write_prot_type
Definition: hpm_sdmmc_card.h:103
@ emmc_cmd_erase_group_start
Definition: hpm_sdmmc_card.h:96
@ emmc_cmd_execute_read_task
Definition: hpm_sdmmc_card.h:117
@ emmc_cmd_all_send_cid
Definition: hpm_sdmmc_card.h:71
@ emmc_cmd_set_block_length
Definition: hpm_sdmmc_card.h:85
@ emmc_cmd_clear_write_prot
Definition: hpm_sdmmc_card.h:101
@ emmc_cmd_go_irq_state
Definition: hpm_sdmmc_card.h:106
@ emmc_cmd_cmdq_task_mgmt
Definition: hpm_sdmmc_card.h:119
@ emmc_cmd_write_single_block
Definition: hpm_sdmmc_card.h:90
@ emmc_cmd_stop_transmission
Definition: hpm_sdmmc_card.h:80
@ emmc_cmd_read_single_block
Definition: hpm_sdmmc_card.h:86
@ emmc_cmd_send_csd
Definition: hpm_sdmmc_card.h:78
@ emmc_cmd_select
Definition: hpm_sdmmc_card.h:76
@ emmc_cmd_queued_task_params
Definition: hpm_sdmmc_card.h:115
@ emmc_cmd_sleep_awake
Definition: hpm_sdmmc_card.h:74
@ emmc_cmd_set_block_count
Definition: hpm_sdmmc_card.h:89
@ emmc_cmd_program_cid
Definition: hpm_sdmmc_card.h:92
@ emmc_cmd_erase_group_end
Definition: hpm_sdmmc_card.h:97
@ emmc_cmd_send_op_cond
Definition: hpm_sdmmc_card.h:70
@ emmc_cmd_set_dsr
Definition: hpm_sdmmc_card.h:73
@ emmc_cmd_queued_task_address
Definition: hpm_sdmmc_card.h:116
SD Card Status Register Information.
Definition: hpm_sdmmc_card.h:165
uint32_t protected_size
Definition: hpm_sdmmc_card.h:169
uint8_t speed_class
Definition: hpm_sdmmc_card.h:170
uint32_t erase_size
Definition: hpm_sdmmc_card.h:176
uint32_t au_size
Definition: hpm_sdmmc_card.h:174
uint8_t uhs_speed_grade
Definition: hpm_sdmmc_card.h:172
uint8_t bus_width
Definition: hpm_sdmmc_card.h:166
uint32_t erase_timeout
Definition: hpm_sdmmc_card.h:175
uint32_t uhs_au_size
Definition: hpm_sdmmc_card.h:178
uint8_t erase_offset
Definition: hpm_sdmmc_card.h:173
uint8_t secure_mode
Definition: hpm_sdmmc_card.h:167
uint8_t performance_move
Definition: hpm_sdmmc_card.h:171
uint16_t card_type
Definition: hpm_sdmmc_card.h:168
SD CID Register Information.
Definition: hpm_sdmmc_card.h:185
uint64_t mdt
Definition: hpm_sdmmc_card.h:189
uint64_t mid
Definition: hpm_sdmmc_card.h:195
uint64_t crc7
Definition: hpm_sdmmc_card.h:188
uint64_t psn
Definition: hpm_sdmmc_card.h:191
uint64_t pnm
Definition: hpm_sdmmc_card.h:193
uint64_t oid
Definition: hpm_sdmmc_card.h:194
uint64_t prv
Definition: hpm_sdmmc_card.h:192
SD OCR register information.
Definition: hpm_sdmmc_card.h:203
uint32_t over_2tb_support
Definition: hpm_sdmmc_card.h:220
uint32_t low_voltage_range
Definition: hpm_sdmmc_card.h:207
uint32_t uhs2_card_status
Definition: hpm_sdmmc_card.h:222
uint32_t support_2v9_3v0
Definition: hpm_sdmmc_card.h:211
uint32_t support_3v3_3v4
Definition: hpm_sdmmc_card.h:215
uint32_t support_3v0_3v1
Definition: hpm_sdmmc_card.h:212
uint32_t support_3v5_3v6
Definition: hpm_sdmmc_card.h:217
uint32_t support_2v7_2v8
Definition: hpm_sdmmc_card.h:209
uint32_t card_power_up_status
Definition: hpm_sdmmc_card.h:224
uint32_t switching_to_1v8_accepted
Definition: hpm_sdmmc_card.h:218
uint32_t ocr_word
Definition: hpm_sdmmc_card.h:204
uint32_t card_capacity_status
Definition: hpm_sdmmc_card.h:223
uint32_t support_3v4_3v5
Definition: hpm_sdmmc_card.h:216
uint32_t support_3v1_3v2
Definition: hpm_sdmmc_card.h:213
uint32_t support_3v2_3v3
Definition: hpm_sdmmc_card.h:214
uint32_t support_2v8_2v9
Definition: hpm_sdmmc_card.h:210
SD Card SCR register information.
Definition: hpm_sdmmc_card.h:269
uint32_t support_cmd58_or_cmd59
Definition: hpm_sdmmc_card.h:275
uint32_t sd_bus_widths
Definition: hpm_sdmmc_card.h:281
uint32_t scr_structure
Definition: hpm_sdmmc_card.h:285
uint32_t sd_specx
Definition: hpm_sdmmc_card.h:277
uint32_t ex_security
Definition: hpm_sdmmc_card.h:279
uint32_t sd_spec
Definition: hpm_sdmmc_card.h:284
uint32_t data_stat_after_erase
Definition: hpm_sdmmc_card.h:283
uint32_t sd_spec3
Definition: hpm_sdmmc_card.h:280
uint32_t sd_security
Definition: hpm_sdmmc_card.h:282
uint32_t reserved
Definition: hpm_sdmmc_card.h:271
uint32_t sd_spec4
Definition: hpm_sdmmc_card.h:278
uint32_t support_cmd23
Definition: hpm_sdmmc_card.h:273
uint32_t support_cmd48_or_cmd49
Definition: hpm_sdmmc_card.h:274
uint32_t support_cmd20
Definition: hpm_sdmmc_card.h:272
SD/MMC R1 register information.
Definition: hpm_sdmmc_card.h:130
uint32_t card_ecc_failed
Definition: hpm_sdmmc_card.h:148
uint32_t error
Definition: hpm_sdmmc_card.h:146
uint32_t card_is_locked
Definition: hpm_sdmmc_card.h:152
uint32_t ready_for_data
Definition: hpm_sdmmc_card.h:139
uint32_t csd_overwrite
Definition: hpm_sdmmc_card.h:144
uint32_t status
Definition: hpm_sdmmc_card.h:131
uint32_t illegal_command
Definition: hpm_sdmmc_card.h:149
uint32_t out_of_range
Definition: hpm_sdmmc_card.h:158
uint32_t ake_seq_error
Definition: hpm_sdmmc_card.h:134
uint32_t wp_violation
Definition: hpm_sdmmc_card.h:153
uint32_t erase_reset
Definition: hpm_sdmmc_card.h:141
uint32_t app_cmd
Definition: hpm_sdmmc_card.h:136
uint32_t erase_param
Definition: hpm_sdmmc_card.h:154
uint32_t cc_error
Definition: hpm_sdmmc_card.h:147
uint32_t card_ecc_disabled
Definition: hpm_sdmmc_card.h:142
uint32_t current_state
Definition: hpm_sdmmc_card.h:140
uint32_t wp_erase_skip
Definition: hpm_sdmmc_card.h:143
uint32_t fx_event
Definition: hpm_sdmmc_card.h:137
uint32_t block_len_error
Definition: hpm_sdmmc_card.h:156
uint32_t address_error
Definition: hpm_sdmmc_card.h:157
uint32_t erase_seq_error
Definition: hpm_sdmmc_card.h:155
uint32_t com_crc_error
Definition: hpm_sdmmc_card.h:150
uint32_t lock_unlock_failed
Definition: hpm_sdmmc_card.h:151