Loading...
Searching...
No Matches
sdmmc.h
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2023 Gunar Schorcht
3 * SPDX-License-Identifier: LGPL-2.1-only
4 */
5
6#pragma once
7
125
126#include <errno.h>
127
128#include "assert.h"
129#include "byteorder.h"
130#include "macros/units.h"
131#include "periph_conf.h"
132#include "xfa.h"
133
134#ifdef __cplusplus
135extern "C" {
136#endif
137
147#ifndef SDMMC_CPU_DMA_REQUIREMENTS
148#define SDMMC_CPU_DMA_REQUIREMENTS
149#endif
150
159#define sdmmc_buf_t SDMMC_CPU_DMA_REQUIREMENTS uint8_t
160
167#define SDMMC_SDHC_BLOCK_SIZE (512)
168
173
177#define SDMMC_CMD(n) (n)
178
182#define SDMMC_ACMD_PREFIX (1 << 7)
183
187#define SDMMC_ACMD(n) (SDMMC_ACMD_PREFIX | SDMMC_CMD(n))
188
232
234#define SDMMC_CMD_NO_ARG (0x00000000UL)
235
237#define SDMMC_CMD_ARG_RCA(n) ((uint32_t)n << 16)
238
240#define SDMMC_RESP_CRC (1UL << 4)
242#define SDMMC_RESP_BUSY (1UL << 5)
244#define SDMMC_RESP_IDX (0xf)
245
272
273
281
282#define SDMMC_CMD8_CHECK_PATTERN (0xaa)
283#define SDMMC_CMD8_VHS_27_36V (0b0001 << 8)
284#define SDMMC_CMD8_PCIE_AVAIL (1 << 12)
285#define SDMMC_CMD8_PCIE_12V (1 << 13)
286
288#define SDMMC_CMD8_CHECK (SDMMC_CMD8_VHS_27_36V | SDMMC_CMD8_CHECK_PATTERN)
290
298#define SDMMC_OCR_18V (1UL << 7)
299#define SDMMC_OCR_27_28V (1UL << 15)
300#define SDMMC_OCR_28_29V (1UL << 16)
301#define SDMMC_OCR_29_30V (1UL << 17)
302#define SDMMC_OCR_30_31V (1UL << 18)
303#define SDMMC_OCR_31_32V (1UL << 19)
304#define SDMMC_OCR_32_33V (1UL << 20)
305#define SDMMC_OCR_33_34V (1UL << 21)
306#define SDMMC_OCR_34_35V (1UL << 22)
307#define SDMMC_OCR_35_36V (1UL << 23)
308
309#define SDMMC_OCR_S18A (1UL << 24)
310#define SDMMC_OCR_OVER_2TB (1UL << 27)
311#define SDMMC_OCR_UHS_II (1UL << 29)
312#define SDMMC_OCR_CCS (1UL << 30)
313#define SDMMC_OCR_POWER_UP (1UL << 31)
314
322#define SDMMC_OCR_ALL_VOLTAGES (SDMMC_OCR_27_28V | SDMMC_OCR_28_29V | \
323 SDMMC_OCR_29_30V | SDMMC_OCR_30_31V | \
324 SDMMC_OCR_31_32V | SDMMC_OCR_32_33V | \
325 SDMMC_OCR_33_34V | SDMMC_OCR_34_35V | \
326 SDMMC_OCR_35_36V)
327
328
339typedef enum {
344 /* bits 3..5 are left unused for later extensions of SD Memory Card types */
348
352#define SDMMC_CARD_TYPE_SD (SDMMC_CARD_TYPE_SDSC_V1 | \
353 SDMMC_CARD_TYPE_SDSC_V2_V3 | \
354 SDMMC_CARD_TYPE_SDHC_SDXC)
355
373
392
405#define SDMMC_CARD_STATUS_OUT_OF_RANGE (1UL << 31)
406#define SDMMC_CARD_STATUS_ADDRESS_ERROR (1UL << 30)
407#define SDMMC_CARD_STATUS_BLOCK_LEN_ERROR (1UL << 29)
408#define SDMMC_CARD_STATUS_ERASE_SEQ_ERROR (1UL << 28)
409#define SDMMC_CARD_STATUS_ERASE_PARAM (1UL << 27)
410#define SDMMC_CARD_STATUS_WP_VIOLATION (1UL << 26)
411#define SDMMC_CARD_STATUS_CARD_IS_LOCKED (1UL << 25)
412#define SDMMC_CARD_STATUS_LOCK_UNLOCK_FAILED (1UL << 24)
413#define SDMMC_CARD_STATUS_COM_CRC_ERROR (1UL << 23)
414#define SDMMC_CARD_STATUS_ILLEGAL_COMMAND (1UL << 22)
415#define SDMMC_CARD_STATUS_CARD_ECC_FAILED (1UL << 21)
416#define SDMMC_CARD_STATUS_CC_ERROR (1UL << 20)
417#define SDMMC_CARD_STATUS_ERROR (1UL << 19)
418#define SDMMC_CARD_STATUS_UNDERRUN (1UL << 18)
419#define SDMMC_CARD_STATUS_OVERRUN (1UL << 17)
420#define SDMMC_CARD_STATUS_CSD_OVERWRITE (1UL << 16)
421#define SDMMC_CARD_STATUS_WP_ERASE_SKIP (1UL << 15)
422#define SDMMC_CARD_STATUS_CARD_ECC_DISABLED (1UL << 14)
423#define SDMMC_CARD_STATUS_ERASE_RESET (1UL << 13)
424#define SDMMC_CARD_STATUS_READY_FOR_DATA (1UL << 8)
425#define SDMMC_CARD_STATUS_SWITCH_ERROR (1UL << 7)
426#define SDMMC_CARD_STATUS_FX_EVENT (1UL << 6)
427#define SDMMC_CARD_STATUS_APP_CMD (1UL << 5)
428#define SDMMC_CARD_STATUS_AKE_SEQ_ERROR (1UL << 3)
429
431#define SDMMC_CARD_STATUS_ERRORS (SDMMC_CARD_STATUS_OUT_OF_RANGE | \
432 SDMMC_CARD_STATUS_ADDRESS_ERROR | \
433 SDMMC_CARD_STATUS_BLOCK_LEN_ERROR | \
434 SDMMC_CARD_STATUS_ERASE_SEQ_ERROR | \
435 SDMMC_CARD_STATUS_ERASE_PARAM | \
436 SDMMC_CARD_STATUS_WP_VIOLATION | \
437 SDMMC_CARD_STATUS_LOCK_UNLOCK_FAILED | \
438 SDMMC_CARD_STATUS_COM_CRC_ERROR | \
439 SDMMC_CARD_STATUS_ILLEGAL_COMMAND | \
440 SDMMC_CARD_STATUS_CARD_ECC_FAILED | \
441 SDMMC_CARD_STATUS_CC_ERROR | \
442 SDMMC_CARD_STATUS_ERROR | \
443 SDMMC_CARD_STATUS_UNDERRUN | \
444 SDMMC_CARD_STATUS_OVERRUN | \
445 SDMMC_CARD_STATUS_CSD_OVERWRITE | \
446 SDMMC_CARD_STATUS_WP_ERASE_SKIP | \
447 SDMMC_CARD_STATUS_SWITCH_ERROR | \
448 SDMMC_CARD_STATUS_AKE_SEQ_ERROR)
449
451#define SDMMC_CARD_STATUS_CURRENT_STATE(n) (((n) >> SDMMC_CARD_STATUS_CURRENT_STATE_Pos) & 0x0f)
452#define SDMMC_CARD_STATUS_CURRENT_STATE_Pos (9)
453
457enum {
468};
469
473typedef union {
474 struct {
475 uint32_t reserved0 :2;
476 uint32_t reserved2 :1;
477 uint32_t AKE_SEQ_ERROR :1;
478 uint32_t reserved4 :1;
479 uint32_t APP_CMD :1;
480 uint32_t FX_EVENT :1;
481 uint32_t SWITCH_ERROR :1;
482 uint32_t READY_FOR_DATA :1;
483 uint32_t CURRENT_STATE :4;
484 uint32_t ERASE_RESET :1;
485 uint32_t CARD_ECC_DISABLED :1;
486 uint32_t WP_ERASE_SKIP :1;
487 uint32_t CSD_OVERWRITE :1;
488 uint32_t OVERRUN :1;
489 uint32_t UNDERRUN :1;
490 uint32_t ERROR :1;
491 uint32_t CC_ERROR :1;
492 uint32_t CARD_ECC_FAILED :1;
493 uint32_t ILLEGAL_COMMAND :1;
494 uint32_t COM_CRC_ERROR :1;
496 uint32_t CARD_IS_LOCKED :1;
497 uint32_t WP_VIOLATION :1;
498 uint32_t ERASE_PARAM :1;
499 uint32_t ERASE_SEQ_ERROR :1;
500 uint32_t BLOCK_LEN_ERROR :1;
501 uint32_t ADDRESS_ERROR :1;
502 uint32_t OUT_OF_RANGE :1;
503 };
504 uint32_t value;
506
508
513
515#define SDMMC_SD_STATUS_SIZE (64)
516
529typedef struct __attribute__((packed)) {
531 uint32_t SUS_ADDR:22;
532 uint32_t VSC_AU_SIZE:10;
533 uint16_t SD_CARD_TYPE:16;
534 uint16_t ERASE_SIZE:16;
535 uint8_t SPEED_CLASS:8;
538 uint8_t ERASE_TIMEOUT:6;
539 uint8_t ERASE_OFFSET:2;
540 uint8_t UHS_SPEED_GRADE:4;
541 uint8_t UHS_AU_SIZE:4;
542 uint8_t AU_SIZE:4;
543 uint8_t DAT_BUS_WIDTH:2;
544 uint8_t SECURED_MODE:1;
546
548
553
555#define SDMMC_CID_REG_SIZE (16)
556
557#define SDMMC_CID_OID_SIZE_SD (2)
558#define SDMMC_CID_PNM_SIZE_SD (5)
559#define SDMMC_CID_PNM_SIZE_MMC (6)
560
567typedef struct __attribute__((packed)) {
568 uint8_t MID;
571 uint8_t PRV;
574 uint8_t CID_CRC;
576
584typedef struct __attribute__((packed)) {
585 uint8_t MID;
588 uint8_t PRV;
590 uint8_t MDT;
591 uint8_t CID_CRC;
593
601
603
614
624
626#define SDMMC_CSD_REG_SIZE (16)
627
634typedef struct __attribute__((packed)) {
635 uint32_t CSD_CRC:8;
636 uint32_t reserved5:1;
637 uint32_t WP_UPC:1;
638 uint32_t FILE_FORMAT:2;
639 uint32_t TMP_WRITE_PROTECT:1;
641 uint32_t COPY:1;
642 uint32_t FILE_FORMAT_GRP:1;
643 uint32_t reserved4:5;
644 uint32_t WRITE_BL_PARTIAL:1;
645 uint32_t WRITE_BL_LEN:4;
646 uint32_t R2W_FACTOR:3;
647 uint32_t reserved3:2;
648 uint32_t WP_GRP_ENABLE:1;
649 uint32_t WP_GRP_SIZE:7;
650 uint32_t SECTOR_SIZE:7;
651 uint32_t ERASE_BLK_EN:1;
652 uint32_t C_SIZE_MULT:3;
653 uint32_t VDD_W_CURR_MAX:3;
654 uint32_t VDD_W_CURR_MIN:3;
655 uint32_t VDD_R_CURR_MAX:3;
656 uint32_t VDD_R_CURR_MIN:3;
657 uint32_t C_SIZE:12;
658 uint32_t reserved2:2;
659 uint32_t DSR_IMP:1;
660 uint32_t READ_BLK_MISALIGN:1;
662 uint32_t READ_BL_PARTIAL:1;
663 uint32_t READ_BL_LEN:4;
664 uint32_t CCC:12;
665 uint32_t TRAN_SPEED:8;
666 uint32_t NSAC:8;
667 uint32_t TAAC:8;
668 uint32_t reserved1:6;
669 uint32_t CSD_STRUCTURE:2;
671
683typedef struct __attribute__((packed)) {
684 uint32_t CSD_CRC:8;
685 uint32_t reserved5:1;
686 uint32_t WP_UPC:1;
687 uint32_t FILE_FORMAT:2;
688 uint32_t TMP_WRITE_PROTECT:1;
690 uint32_t COPY:1;
691 uint32_t FILE_FORMAT_GRP:1;
692 uint32_t reserved4:5;
693 uint32_t WRITE_BL_PARTIAL:1;
694 uint32_t WRITE_BL_LEN:4;
695 uint32_t R2W_FACTOR:3;
696 uint32_t reserved3:2;
697 uint32_t WP_GRP_ENABLE:1;
698 uint32_t WP_GRP_SIZE:7;
699 uint32_t SECTOR_SIZE:7;
700 uint32_t ERASE_BLK_EN:1;
701 uint32_t reserved2:1;
702 uint32_t C_SIZE:28;
703 uint32_t DSR_IMP:1;
704 uint32_t READ_BLK_MISALIGN:1;
706 uint32_t READ_BL_PARTIAL:1;
707 uint32_t READ_BL_LEN:4;
708 uint32_t CCC:12;
709 uint32_t TRAN_SPEED:8;
710 uint32_t NSAC:8;
711 uint32_t TAAC:8;
712 uint32_t reserved1:6;
713 uint32_t CSD_STRUCTURE:2;
715
723typedef struct __attribute__((packed)) {
724 uint32_t CSD_CRC:8;
725 uint32_t ECC:2;
726 uint32_t FILE_FORMAT:2;
727 uint32_t TMP_WRITE_PROTECT:1;
729 uint32_t COPY:1;
730 uint32_t FILE_FORMAT_GRP:1;
731 uint32_t CONTENT_PROT_APP:1;
732 uint32_t reserved4:4;
733 uint32_t WRITE_BL_PARTIAL:1;
734 uint32_t WRITE_BL_LEN:4;
735 uint32_t R2W_FACTOR:3;
736 uint32_t DEFAULT_ECC:2;
737 uint32_t WP_GRP_ENABLE:1;
738 uint32_t WP_GRP_SIZE:5;
739 uint32_t ERASE_GRP_MULT:5;
740 uint32_t ERASE_GRP_SIZE:5;
741 uint32_t C_SIZE_MULT:3;
742 uint32_t VDD_W_CURR_MAX:3;
743 uint32_t VDD_W_CURR_MIN:3;
744 uint32_t VDD_R_CURR_MAX:3;
745 uint32_t VDD_R_CURR_MIN:3;
746 uint16_t C_SIZE:12;
747 uint32_t reserved2:2;
748 uint32_t DSR_IMP:1;
749 uint32_t READ_BLK_MISALIGN:1;
751 uint32_t READ_BL_PARTIAL:1;
752 uint32_t READ_BL_LEN:4;
753 uint32_t CCC:12;
754 uint32_t TRAN_SPEED:8;
755 uint32_t NSAC:8;
756 uint32_t TAAC:8;
757 uint32_t reserved1:2;
758 uint32_t SPEC_VERS:4;
759 uint32_t CSD_STRUCTURE:2;
761
770
772#define SDMMC_EXT_CSD_REG_SIZE (512)
773
785typedef struct {
786 uint32_t SEC_COUNT;
787 uint8_t CARD_TYPE;
789 uint8_t BUS_WIDTH;
791
793
801
803#define SDMMC_SCR_REG_SIZE (8)
804
811typedef struct {
812 /* first 32-bit word */
813 uint32_t reserved0;
814 /* second 32-bit word */
815 union {
816 struct {
817 uint32_t CMD_SUPPORT:5;
818 uint32_t reserved37:1;
819 uint32_t SD_SPECX:4;
820 uint32_t SD_SPEC4:1;
821 uint32_t EX_SECURITY:4;
822 uint32_t SD_SPEC3:1;
823 uint32_t SD_BUS_WIDTHS:4;
824 uint32_t SD_SECURITY:3;
826 uint32_t SD_SPEC:4;
827 uint32_t SCR_STRUCTURE:4;
828 };
829 uint32_t value;
830 };
832
833#define SDMMC_SCR_ACMD_53_54_SUPPORT (0b10000)
835#define SDMMC_SCR_ACMD_58_59_SUPPORT (0b01000)
837#define SDMMC_SCR_ACMD_48_49_SUPPORT (0b00100)
839#define SDMMC_SCR_ACMD_23_SUPPORT (0b00010)
841#define SDMMC_SCR_ACMD_20_SUPPORT (0b00001)
843
862#define SDMMC_SCR_SD_SPEC(scr) \
863 (scr.SD_SPEC + scr.SD_SPEC3 + (scr.SD_SPECX ? scr.SD_SPECX + 1 : scr.SD_SPEC4))
864
866
871#define SDMMC_DEV(x) (sdmmc_get_dev(x))
873
877typedef struct sdmmc_dev sdmmc_dev_t;
878
887
903
913typedef enum {
914 SDMMC_AUTO_CMD_NONE = 0x00,
915 SDMMC_AUTO_CMD12 = 0x01,
916 SDMMC_AUTO_CMD23 = 0x02,
917 SDMMC_AUTO_CMD_BOTH = 0x03,
919
923typedef enum {
924 SDMMC_EVENT_CARD_INSERTED,
925 SDMMC_EVENT_CARD_REMOVED,
927
940
952typedef struct {
971 void (*init)(sdmmc_dev_t *dev);
972
1027 int (*send_cmd)(sdmmc_dev_t *dev, sdmmc_cmd_t cmd_idx, uint32_t arg,
1028 sdmmc_resp_t resp_type, uint32_t *resp);
1029
1057
1108
1134
1135#if !IS_USED(MODULE_PERIPH_SDMMC_AUTO_CLK) || DOXYGEN
1152 int (*enable_clock)(sdmmc_dev_t *dev, bool enable);
1153#endif
1154
1180
1223 const void *data_wr, void *data_rd,
1224 uint16_t *done);
1225
1246
1248
1265typedef struct sdmmc_dev {
1271
1284
1292
1300
1308
1309#if IS_USED(MODULE_SDMMC_MMC)
1314 sdmmc_ext_csd_t ext_csd;
1315#endif
1316
1322 uint32_t status;
1323
1329 uint16_t rca;
1330
1337
1346
1355
1362
1369
1376
1383
1384} sdmmc_dev_t;
1385
1427#if !DOXYGEN
1429#else
1431#endif
1432
1436#define SDMMC_NUMOF XFA_LEN(sdmmc_dev_t *, sdmmc_devs)
1437
1450static inline sdmmc_dev_t *sdmmc_get_dev(unsigned num)
1451{
1452 return (num < SDMMC_NUMOF) ? sdmmc_devs[num] : NULL;
1453}
1454
1474static inline void sdmmc_init(sdmmc_dev_t *dev)
1475{
1476 assert(dev);
1477 assert(dev->driver);
1478
1479 dev->driver->init(dev);
1480}
1481
1529int sdmmc_send_cmd(sdmmc_dev_t *dev, sdmmc_cmd_t cmd_idx, uint32_t arg,
1530 sdmmc_resp_t resp_type, uint32_t *resp);
1531
1588int sdmmc_send_acmd(sdmmc_dev_t *dev, sdmmc_cmd_t cmd_idx, uint32_t arg,
1589 sdmmc_resp_t resp_type, uint32_t *resp);
1590
1642
1746int sdmmc_xfer(sdmmc_dev_t *dev, sdmmc_cmd_t cmd_idx, uint32_t arg,
1747 uint16_t block_size, uint16_t block_num,
1748 const void *data_wr, void *data_rd, uint16_t *done);
1749
1804 uint32_t block_addr, uint16_t block_size,
1805 uint16_t block_num, void *data, uint16_t *done);
1806
1860int sdmmc_write_blocks(sdmmc_dev_t *dev, uint32_t block_addr,
1861 uint16_t block_size, uint16_t block_num,
1862 const void *data, uint16_t *done);
1863
1898 uint32_t block_addr, uint16_t block_num);
1899
1930
1950
1952
1953#ifdef __cplusplus
1954}
1955#endif
POSIX.1-2008 compliant version of the assert macro.
#define assert(cond)
abort the program if assertion is false
Definition assert.h:143
Functions to work with different byte orders.
sdmmc_cmd_t
SDIO/SD/MMC Commands.
Definition sdmmc.h:198
sdmmc_xfer_type_t
Data transfer types.
Definition sdmmc.h:882
sdmmc_auto_cmd_t
Auto Command features supported by the SDIO/SD/MMC peripheral.
Definition sdmmc.h:913
int sdmmc_read_blocks(sdmmc_dev_t *dev, uint32_t block_addr, uint16_t block_size, uint16_t block_num, void *data, uint16_t *done)
Read a number of blocks.
int sdmmc_xfer(sdmmc_dev_t *dev, sdmmc_cmd_t cmd_idx, uint32_t arg, uint16_t block_size, uint16_t block_num, const void *data_wr, void *data_rd, uint16_t *done)
Perform a data transfer with the selected card or embedded device.
struct sdmmc_dev sdmmc_dev_t
sdmmc_dev_t forward declaration
Definition sdmmc.h:877
#define SDMMC_CID_OID_SIZE_SD
OID (OEM/Application ID) size in byte (SD)
Definition sdmmc.h:557
sdmmc_resp_t
SDIO/SD/MMC Response types.
Definition sdmmc.h:255
static void sdmmc_init(sdmmc_dev_t *dev)
Basic initialization of the given SDIO/SD/MMC device.
Definition sdmmc.h:1474
int sdmmc_erase_blocks(sdmmc_dev_t *dev, uint32_t block_addr, uint16_t block_num)
Erase a number of blocks.
static sdmmc_dev_t * sdmmc_get_dev(unsigned num)
Retrieve SDIO/SD/MMC device descriptor reference from device index.
Definition sdmmc.h:1450
#define SDMMC_CMD(n)
Command index.
Definition sdmmc.h:177
sdmmc_dev_t sdmmc_devs[]
SDIO/SD/MMC device descriptor references as read-only XFA.
Definition sdmmc.h:1430
#define SDMMC_ACMD(n)
Application specific command index.
Definition sdmmc.h:187
sdmmc_clock_rate_t
SDIO/SD/MMC Card clock rate types.
Definition sdmmc.h:384
#define SDMMC_RESP_BUSY
Mask to check whether the response includes busy status from card.
Definition sdmmc.h:242
int sdmmc_read_sds(sdmmc_dev_t *dev, sdmmc_sd_status_t *sds)
Read SD Status Register.
sdmmc_card_type_t
SDIO/SD/MMC Card types.
Definition sdmmc.h:339
int sdmmc_card_init(sdmmc_dev_t *dev)
Card Initialization and Identification.
void(* sdmmc_event_cb_t)(sdmmc_dev_t *dev, sdmmc_event_t event)
Event callback function type.
Definition sdmmc.h:939
#define SDMMC_NUMOF
Number of SDIO/SD/MMC devices defined.
Definition sdmmc.h:1436
#define SDMMC_CID_PNM_SIZE_MMC
PNM (Product name) size in byte (MMC)
Definition sdmmc.h:559
uint64_t sdmmc_get_capacity(sdmmc_dev_t *dev)
Get Capacity of SD/MMC Card.
int sdmmc_send_acmd(sdmmc_dev_t *dev, sdmmc_cmd_t cmd_idx, uint32_t arg, sdmmc_resp_t resp_type, uint32_t *resp)
Send application specific command optionally wait for response.
int sdmmc_write_blocks(sdmmc_dev_t *dev, uint32_t block_addr, uint16_t block_size, uint16_t block_num, const void *data, uint16_t *done)
Write a number of blocks.
#define SDMMC_RESP_CRC
Mask to check whether the response type uses CRC7.
Definition sdmmc.h:240
sdmmc_csd_version_t
CSD Register Versions (SD Memory Card and MMC)
Definition sdmmc.h:618
sdmmc_event_t
Events generated by SDIO/SD/MMC high level API.
Definition sdmmc.h:923
#define SDMMC_CID_PNM_SIZE_SD
PNM (Product name) size in byte (SD)
Definition sdmmc.h:558
int sdmmc_send_cmd(sdmmc_dev_t *dev, sdmmc_cmd_t cmd_idx, uint32_t arg, sdmmc_resp_t resp_type, uint32_t *resp)
Send command to SDIO/SD/MMC Card and optionally wait for response.
sdmmc_bus_width_t
SDIO/SD/MMC Card data bus widths.
Definition sdmmc.h:368
@ SDMMC_CMD5
SD_APP_OP_COND (SDIO only)
Definition sdmmc.h:204
@ SDMMC_CMD58
READ_OCR (SPI mode only)
Definition sdmmc.h:224
@ SDMMC_CMD16
SET_BLOCKLEN.
Definition sdmmc.h:212
@ SDMMC_ACMD51
SEND_SCR.
Definition sdmmc.h:230
@ SDMMC_CMD33
ERASE_WR_BLK_END.
Definition sdmmc.h:219
@ SDMMC_CMD25
WRITE_MULTIPLE_BLOCK.
Definition sdmmc.h:217
@ SDMMC_ACMD13
SD_STATUS.
Definition sdmmc.h:227
@ SDMMC_CMD4
SET_DSR.
Definition sdmmc.h:203
@ SDMMC_ACMD41
SD_APP_OP_COND.
Definition sdmmc.h:229
@ SDMMC_CMD7
SELECT/DESELECT_CARD.
Definition sdmmc.h:206
@ SDMMC_CMD32
ERASE_WR_BLK_START.
Definition sdmmc.h:218
@ SDMMC_CMD17
READ_SINGLE_BLOCK.
Definition sdmmc.h:213
@ SDMMC_CMD6
SWITCH.
Definition sdmmc.h:205
@ SDMMC_CMD38
ERASE.
Definition sdmmc.h:220
@ SDMMC_CMD8
SEND_IF_COND (SD), SEND_EXT_CSD (MMC)
Definition sdmmc.h:207
@ SDMMC_CMD24
WRITE_BLOCK.
Definition sdmmc.h:216
@ SDMMC_CMD59
CRC_ON_OFF (SPI mode only)
Definition sdmmc.h:225
@ SDMMC_CMD13
SEND_STATUS.
Definition sdmmc.h:211
@ SDMMC_CMD3
SET_RELATIVE_ADDR.
Definition sdmmc.h:202
@ SDMMC_CMD52
IO_RW_DIRECT (SDIO only)
Definition sdmmc.h:221
@ SDMMC_CMD53
IO_RW_EXTENDED (SDIO only)
Definition sdmmc.h:222
@ SDMMC_ACMD23
SET_WR_BLK_ERASE_COUNT.
Definition sdmmc.h:228
@ SDMMC_CMD55
APP_CMD.
Definition sdmmc.h:223
@ SDMMC_CMD12
STOP_TRANSMISSION.
Definition sdmmc.h:210
@ SDMMC_CMD10
SEND_CID.
Definition sdmmc.h:209
@ SDMMC_CMD23
SET_BLOCK_COUNT.
Definition sdmmc.h:215
@ SDMMC_ACMD6
SET_BUS_WIDTH.
Definition sdmmc.h:226
@ SDMMC_CMD2
ALL_SEND_CID.
Definition sdmmc.h:201
@ SDMMC_CMD9
SEND_CSD.
Definition sdmmc.h:208
@ SDMMC_CMD18
READ_MULTIPLE_BLOCK.
Definition sdmmc.h:214
@ SDMMC_CMD1
SEND_OP_COND.
Definition sdmmc.h:200
@ SDMMC_CMD0
GO_IDLE_STATE.
Definition sdmmc.h:199
@ SDMMC_BLOCK
Transfer block with size of READ_BL_LEN/WRITE_BL_LEN.
Definition sdmmc.h:884
@ SDMMC_MULTIBYTE
Transfer 1 to READ_BL_LEN/WRITE_BL_LEN bytes.
Definition sdmmc.h:883
@ SDMMC_STREAM
Transfer until CMD12 is sent (MMC and 1-bit bus only)
Definition sdmmc.h:885
@ SDMMC_R4
Fast I/O [48 bit (16 bit RCA, 1 bit status, 7 bit addr, 8 bit reg)].
Definition sdmmc.h:263
@ SDMMC_R3
OCR Resister [48 bit (32 bit OCR)].
Definition sdmmc.h:262
@ SDMMC_NO_R
No response expected.
Definition sdmmc.h:256
@ SDMMC_R1
Normal Response [48 bit (32 bit card status)].
Definition sdmmc.h:257
@ SDMMC_R6
Published RCA Response [48 bit (16 bit RCA, 16 bit card status)
Definition sdmmc.h:267
@ SDMMC_R1B
Normal Response [48 bit (R1 with optional busy signal on DAT0)].
Definition sdmmc.h:258
@ SDMMC_R7
Card Interface Condition [48 bit (32 bit data)], see section 4.9.6)
Definition sdmmc.h:269
@ SDMMC_R2
CID/CSD [136 bit (128 bit CID or CSD)].
Definition sdmmc.h:261
@ SDMMC_R5
Interrupt Request [48 bit (16 bit RCA, 16 bit not defined)
Definition sdmmc.h:265
@ SDMMC_CLK_20M
MMC Card in Data Transfer Mode (Backward Compatibility)
Definition sdmmc.h:386
@ SDMMC_CLK_400K
Identification Mode f_OD (400 kHz)
Definition sdmmc.h:385
@ SDMMC_CLK_52M
MMC/eMMC in Data Transfer Mode (High Speed)
Definition sdmmc.h:390
@ SDMMC_CLK_26M
MMC/eMMC Card in Data Transfer Mode (Default Speed)
Definition sdmmc.h:388
@ SDMMC_CLK_25M
SD/SDIO Card in Data Transfer Mode (Default Speed)
Definition sdmmc.h:387
@ SDMMC_CLK_50M
SD/SDIO Card in Data Transfer Mode (High Speed)
Definition sdmmc.h:389
@ SDMMC_CARD_TYPE_SDSC_V2_V3
SD Memory Card Standard Capacity (SDSC) Version 2.x+.
Definition sdmmc.h:342
@ SDMMC_CARD_TYPE_MMC
MultiMedia Card.
Definition sdmmc.h:346
@ SDMMC_CARD_TYPE_SDIO
SDIO Card.
Definition sdmmc.h:345
@ SDMMC_CARD_TYPE_SDHC_SDXC
SD Memory Card High or Extended Capacity (SDHC/SDXC)
Definition sdmmc.h:343
@ SDMMC_CARD_TYPE_SDSC_V1
SD Memory Card Standard Capacity (SDSC) Version 1.x.
Definition sdmmc.h:341
@ SDMMC_CARD_TYPE_UNKNOWN
Card type unknown.
Definition sdmmc.h:340
@ SDMMC_CARD_STATE_IDLE
Idle.
Definition sdmmc.h:458
@ SDMMC_CARD_STATE_READY
Ready.
Definition sdmmc.h:459
@ SDMMC_CARD_STATE_DATA
Data.
Definition sdmmc.h:463
@ SDMMC_CARD_STATE_RCV
Receive.
Definition sdmmc.h:464
@ SDMMC_CARD_STATE_PRG
Programming.
Definition sdmmc.h:465
@ SDMMC_CARD_STATE_BTST
Bus Test.
Definition sdmmc.h:467
@ SDMMC_CARD_STATE_TRAN
Transfer.
Definition sdmmc.h:462
@ SDMMC_CARD_STATE_IDENT
Identification.
Definition sdmmc.h:460
@ SDMMC_CARD_STATE_DIS
Disconnect.
Definition sdmmc.h:466
@ SDMMC_CARD_STATE_STBY
Stand-by.
Definition sdmmc.h:461
@ SDMMC_CSD_V1
CSD Version 1.0 (SDSC and MMC)
Definition sdmmc.h:619
@ SDMMC_CSD_V3
CSD Version 3.0 (SDUC) or Version 1.2 (MMC)
Definition sdmmc.h:621
@ SDMMC_CSD_V2
CSD Version 2.0 (SDHC/SDXC) or Version 1.1 (MMC)
Definition sdmmc.h:620
@ SDMMC_CSD_Vx
Reserved (SD) or Version in EXT_CSD (MMC)
Definition sdmmc.h:622
@ SDMMC_BUS_WIDTH_1BIT
Data bus width is 1 bit (default)
Definition sdmmc.h:369
@ SDMMC_BUS_WIDTH_4BIT
Data bus width is 4 bit.
Definition sdmmc.h:370
@ SDMMC_BUS_WIDTH_8BIT
Data bus width is 8 bit.
Definition sdmmc.h:371
event structure
Definition event.h:145
CID register structure (MMC)
Definition sdmmc.h:584
be_uint32_t PSN
Product serial number in big-endian order.
Definition sdmmc.h:589
uint8_t MDT
Manufacturing date.
Definition sdmmc.h:590
be_uint16_t OID
OEM/Application ID in big-endian order.
Definition sdmmc.h:586
uint8_t PRV
Product revision.
Definition sdmmc.h:588
uint8_t CID_CRC
CRC7 checksum including bit 0.
Definition sdmmc.h:591
uint8_t MID
Manufacturer ID.
Definition sdmmc.h:585
char PNM[SDMMC_CID_PNM_SIZE_MMC]
Product name.
Definition sdmmc.h:587
CID register structure (SD Memory Cards)
Definition sdmmc.h:567
char OID[SDMMC_CID_OID_SIZE_SD]
OEM/Application ID.
Definition sdmmc.h:569
be_uint32_t PSN
Product serial number in big-endian order.
Definition sdmmc.h:572
uint8_t CID_CRC
CRC7 checksum including bit 0.
Definition sdmmc.h:574
uint8_t MID
Manufacturer ID.
Definition sdmmc.h:568
char PNM[SDMMC_CID_PNM_SIZE_SD]
Product name.
Definition sdmmc.h:570
uint8_t PRV
Product revision.
Definition sdmmc.h:571
be_uint16_t MDT
Manufacturing date in big-endian order.
Definition sdmmc.h:573
CSD register structure for MMC.
Definition sdmmc.h:723
uint32_t R2W_FACTOR
Write speed factor [28:26].
Definition sdmmc.h:735
uint32_t reserved4
reserved [20:17]
Definition sdmmc.h:732
uint32_t WP_GRP_SIZE
Write protect group size [36:32].
Definition sdmmc.h:738
uint32_t TMP_WRITE_PROTECT
Temporary write protection [12].
Definition sdmmc.h:727
uint32_t DEFAULT_ECC
Manufacturer default ECC [30:29].
Definition sdmmc.h:736
uint32_t CSD_STRUCTURE
CSD structure [127:126].
Definition sdmmc.h:759
uint32_t CONTENT_PROT_APP
Content protection application [16].
Definition sdmmc.h:731
uint32_t WRITE_BL_LEN
Max.
Definition sdmmc.h:734
uint32_t VDD_W_CURR_MIN
Max.
Definition sdmmc.h:743
uint32_t FILE_FORMAT
File format [11:10].
Definition sdmmc.h:726
uint32_t DSR_IMP
DSR implemented [76].
Definition sdmmc.h:748
uint32_t WP_GRP_ENABLE
write protect group enable [31]
Definition sdmmc.h:737
uint32_t reserved2
reserved [75:74]
Definition sdmmc.h:747
uint32_t NSAC
Data read access-time-2 in CLK cycles [111:104].
Definition sdmmc.h:755
uint32_t VDD_R_CURR_MAX
Max.
Definition sdmmc.h:744
uint32_t CCC
Card command classes [95:84].
Definition sdmmc.h:753
uint32_t WRITE_BL_PARTIAL
partial blocks for write allowed [21]
Definition sdmmc.h:733
uint32_t reserved1
reserved [121:120]
Definition sdmmc.h:757
uint32_t FILE_FORMAT_GRP
File format group [15].
Definition sdmmc.h:730
uint32_t TRAN_SPEED
Max.
Definition sdmmc.h:754
uint32_t ERASE_GRP_MULT
Erase group size multiplier [41:37].
Definition sdmmc.h:739
uint32_t TAAC
Data read access-time-1 [119:112].
Definition sdmmc.h:756
uint32_t WRITE_BLK_MISALIGN
Write block misalignment [78].
Definition sdmmc.h:750
uint32_t CSD_CRC
CRC including End bit 1b [7:0].
Definition sdmmc.h:724
uint32_t COPY
Copy flag [14].
Definition sdmmc.h:729
uint32_t SPEC_VERS
Specification version [125:122].
Definition sdmmc.h:758
uint32_t ERASE_GRP_SIZE
Erase group size [46:42].
Definition sdmmc.h:740
uint16_t C_SIZE
Device size [73:62].
Definition sdmmc.h:746
uint32_t VDD_W_CURR_MAX
Max.
Definition sdmmc.h:742
uint32_t VDD_R_CURR_MIN
Max.
Definition sdmmc.h:745
uint32_t READ_BL_LEN
Max.
Definition sdmmc.h:752
uint32_t PERM_WRITE_PROTECT
Permanent write protection [13].
Definition sdmmc.h:728
uint32_t ECC
ECC code [9:8].
Definition sdmmc.h:725
uint32_t READ_BLK_MISALIGN
Read block misalignment [77].
Definition sdmmc.h:749
uint32_t C_SIZE_MULT
Device size multiplier [49:47].
Definition sdmmc.h:741
uint32_t READ_BL_PARTIAL
Partial blocks for read allowed [79].
Definition sdmmc.h:751
CSD register structure Version 1.0.
Definition sdmmc.h:634
uint32_t WRITE_BL_LEN
max.
Definition sdmmc.h:645
uint32_t FILE_FORMAT_GRP
File format group [15].
Definition sdmmc.h:642
uint32_t READ_BL_PARTIAL
partial blocks for read allowed [79]
Definition sdmmc.h:662
uint32_t PERM_WRITE_PROTECT
permanent write protection [13]
Definition sdmmc.h:640
uint32_t VDD_R_CURR_MIN
max.
Definition sdmmc.h:656
uint32_t TMP_WRITE_PROTECT
temporary write protection [12]
Definition sdmmc.h:639
uint32_t WP_GRP_SIZE
write protect group size [38:32]
Definition sdmmc.h:649
uint32_t R2W_FACTOR
write speed factor [28:26]
Definition sdmmc.h:646
uint32_t reserved2
reserved [75:74]
Definition sdmmc.h:658
uint32_t FILE_FORMAT
File format [11:10].
Definition sdmmc.h:638
uint32_t CSD_CRC
CRC including End bit 1b [7:0].
Definition sdmmc.h:635
uint32_t TRAN_SPEED
max.
Definition sdmmc.h:665
uint32_t VDD_W_CURR_MAX
max.
Definition sdmmc.h:653
uint32_t TAAC
data read access-time-1 [119:112]
Definition sdmmc.h:667
uint32_t C_SIZE
device size [73:62]
Definition sdmmc.h:657
uint32_t WRITE_BL_PARTIAL
partial blocks for write allowed [21]
Definition sdmmc.h:644
uint32_t SECTOR_SIZE
erase sector size [45:39]
Definition sdmmc.h:650
uint32_t READ_BLK_MISALIGN
read block misalignment [77]
Definition sdmmc.h:660
uint32_t DSR_IMP
DSR implemented [76].
Definition sdmmc.h:659
uint32_t VDD_R_CURR_MAX
max.
Definition sdmmc.h:655
uint32_t WP_GRP_ENABLE
write protect group enable [31]
Definition sdmmc.h:648
uint32_t CSD_STRUCTURE
CSD structure [127:126].
Definition sdmmc.h:669
uint32_t reserved4
reserved [20:16]
Definition sdmmc.h:643
uint32_t reserved3
reserved [30:29]
Definition sdmmc.h:647
uint32_t reserved1
reserved [125:120]
Definition sdmmc.h:668
uint32_t READ_BL_LEN
max.
Definition sdmmc.h:663
uint32_t NSAC
data read access-time-2 in CLK cycles [111:104]
Definition sdmmc.h:666
uint32_t WP_UPC
write protection until power cycle [9]
Definition sdmmc.h:637
uint32_t WRITE_BLK_MISALIGN
write block misalignment [78]
Definition sdmmc.h:661
uint32_t VDD_W_CURR_MIN
max.
Definition sdmmc.h:654
uint32_t COPY
copy flag [14]
Definition sdmmc.h:641
uint32_t ERASE_BLK_EN
erase single block enable [46]
Definition sdmmc.h:651
uint32_t reserved5
reserved [8]
Definition sdmmc.h:636
uint32_t C_SIZE_MULT
device size multiplier [49:47]
Definition sdmmc.h:652
uint32_t CCC
card command classes [95:84]
Definition sdmmc.h:664
CSD register structure Version 2.0 and Version 3.0.
Definition sdmmc.h:683
uint32_t WRITE_BL_LEN
max.
Definition sdmmc.h:694
uint32_t reserved2
reserved [47]
Definition sdmmc.h:701
uint32_t WP_GRP_ENABLE
write protect group enable [31]
Definition sdmmc.h:697
uint32_t SECTOR_SIZE
erase sector size [45:39]
Definition sdmmc.h:699
uint32_t TMP_WRITE_PROTECT
temporary write protection [12]
Definition sdmmc.h:688
uint32_t FILE_FORMAT_GRP
File format group [15].
Definition sdmmc.h:691
uint32_t reserved4
reserved [20:16]
Definition sdmmc.h:692
uint32_t READ_BLK_MISALIGN
read block misalignment [77]
Definition sdmmc.h:704
uint32_t PERM_WRITE_PROTECT
permanent write protection [13]
Definition sdmmc.h:689
uint32_t WP_UPC
write protection until power cycle [9]
Definition sdmmc.h:686
uint32_t TAAC
data read access-time-1 [119:112]
Definition sdmmc.h:711
uint32_t DSR_IMP
DSR implemented [76].
Definition sdmmc.h:703
uint32_t ERASE_BLK_EN
erase single block enable [46]
Definition sdmmc.h:700
uint32_t READ_BL_LEN
max.
Definition sdmmc.h:707
uint32_t CCC
card command classes [95:84]
Definition sdmmc.h:708
uint32_t WRITE_BL_PARTIAL
partial blocks for write allowed [21]
Definition sdmmc.h:693
uint32_t FILE_FORMAT
File format [11:10].
Definition sdmmc.h:687
uint32_t CSD_CRC
CRC including End bit 1b [7:0].
Definition sdmmc.h:684
uint32_t CSD_STRUCTURE
CSD structure [127:126].
Definition sdmmc.h:713
uint32_t reserved3
reserved [30:29]
Definition sdmmc.h:696
uint32_t reserved5
reserved [8]
Definition sdmmc.h:685
uint32_t reserved1
reserved [125:120]
Definition sdmmc.h:712
uint32_t WP_GRP_SIZE
write protect group size [38:32]
Definition sdmmc.h:698
uint32_t COPY
copy flag [14]
Definition sdmmc.h:690
uint32_t TRAN_SPEED
max.
Definition sdmmc.h:709
uint32_t C_SIZE
device size v2.0 [69:48], v3.0 [75:48]
Definition sdmmc.h:702
uint32_t WRITE_BLK_MISALIGN
write block misalignment [78]
Definition sdmmc.h:705
uint32_t NSAC
data read access-time-2 in CLK cycles [111:104]
Definition sdmmc.h:710
uint32_t READ_BL_PARTIAL
partial blocks for read allowed [79]
Definition sdmmc.h:706
uint32_t R2W_FACTOR
write speed factor [28:26]
Definition sdmmc.h:695
SDIO/SD/MMC device descriptor.
Definition sdmmc.h:1265
bool init_done
Indicates whether the card is initialized (default false).
Definition sdmmc.h:1361
uint16_t rca
Relative Card Address (RCA) of the SDIO/SD/MMC Card as determined during the initialization and ident...
Definition sdmmc.h:1329
sdmmc_scr_t scr
SCR register of the SD Card, read during the initialization and identification procedure in the sdmmc...
Definition sdmmc.h:1299
sdmmc_cid_t cid
CID register of the SD/MMC Card, read during the initialization and identification procedure in the s...
Definition sdmmc.h:1291
bool s18v_allowed
Indicates whether the card supports the switching to 1.8V (default false).
Definition sdmmc.h:1375
bool spi_mode
Indicates whether SPI mode is used by the SDIO/SD/MMC device (default false).
Definition sdmmc.h:1382
uint32_t status
Last SDIO/SD/MMC Card status reported in R1 response.
Definition sdmmc.h:1322
sdmmc_card_type_t type
Type of the SDIO/SD/MMC Card as identified during the initialization and identification procedure in ...
Definition sdmmc.h:1336
const sdmmc_driver_t * driver
Low-level SDIO/SD/MMC peripheral driver.
Definition sdmmc.h:1270
sdmmc_event_cb_t event_cb
The application can register an event callback function of type sdmmc_event_cb_t which is called when...
Definition sdmmc.h:1283
sdmmc_csd_t csd
CSD register of the SD/MMC Card, read during the initialization and identification procedure in the s...
Definition sdmmc.h:1307
sdmmc_bus_width_t bus_width
Data bus width supported by the SDIO/SD/MMC device (default SDMMC_BUS_WIDTH_1BIT).
Definition sdmmc.h:1345
bool present
Indicates whether a card is present.
Definition sdmmc.h:1354
bool s18v_support
Indicates whether the SDIO/SD/MMC peripheral supports the switching to 1.8V (default false).
Definition sdmmc.h:1368
Low-level SDIO/SD/MMC peripheral driver.
Definition sdmmc.h:952
int(* set_bus_width)(sdmmc_dev_t *dev, sdmmc_bus_width_t width)
Set data bus width.
Definition sdmmc.h:1107
int(* xfer_execute)(sdmmc_dev_t *dev, sdmmc_xfer_desc_t *xfer, const void *data_wr, void *data_rd, uint16_t *done)
Execute the data transfer.
Definition sdmmc.h:1222
int(* enable_clock)(sdmmc_dev_t *dev, bool enable)
Enable or disable the SD CLK signal.
Definition sdmmc.h:1152
int(* send_cmd)(sdmmc_dev_t *dev, sdmmc_cmd_t cmd_idx, uint32_t arg, sdmmc_resp_t resp_type, uint32_t *resp)
Send command to SDIO/SD/MMC Card and optionally wait for response.
Definition sdmmc.h:1027
int(* set_clock_rate)(sdmmc_dev_t *dev, sdmmc_clock_rate_t rate)
Set SD CLK signal rate.
Definition sdmmc.h:1133
int(* xfer_prepare)(sdmmc_dev_t *dev, sdmmc_xfer_desc_t *xfer)
Prepare a data transfer.
Definition sdmmc.h:1179
void(* init)(sdmmc_dev_t *dev)
Basic initialization of the given SDIO/SD/MMC device.
Definition sdmmc.h:971
int(* xfer_finish)(sdmmc_dev_t *dev, sdmmc_xfer_desc_t *xfer)
Finish the data transfer.
Definition sdmmc.h:1245
int(* card_init)(sdmmc_dev_t *dev)
Card Initialization and Identification.
Definition sdmmc.h:1056
Extended CSD (EXT_CSD) register structure (MMC only)
Definition sdmmc.h:785
uint32_t SEC_COUNT
Sector Count [215:212].
Definition sdmmc.h:786
uint8_t CSD_STRUCTURE
CSD Structure Version [194].
Definition sdmmc.h:788
uint8_t CARD_TYPE
Card Type [196].
Definition sdmmc.h:787
uint8_t BUS_WIDTH
Bus Width Mode [183].
Definition sdmmc.h:789
SCR register structure (SD Memory Card only)
Definition sdmmc.h:811
uint32_t reserved0
Reserved for manufacturer usage [31:0].
Definition sdmmc.h:813
uint32_t SD_BUS_WIDTHS
DAT Bus widths supported [51:48].
Definition sdmmc.h:823
uint32_t SCR_STRUCTURE
SCR Structure [63:60].
Definition sdmmc.h:827
uint32_t SD_SECURITY
CPRM Security Support [54:52].
Definition sdmmc.h:824
uint32_t SD_SPEC
SD Memory Card - Spec.
Definition sdmmc.h:826
uint32_t DATA_STAT_AFTER_ERASE
Data status after erases [55].
Definition sdmmc.h:825
uint32_t SD_SPEC3
Spec.
Definition sdmmc.h:822
uint32_t SD_SPECX
Spec.
Definition sdmmc.h:819
uint32_t EX_SECURITY
Extended Security Support [46:43].
Definition sdmmc.h:821
uint32_t CMD_SUPPORT
Command Support bits [36:32].
Definition sdmmc.h:817
uint32_t reserved37
Reserved [37].
Definition sdmmc.h:818
uint32_t SD_SPEC4
Spec.
Definition sdmmc.h:820
SD Status (SD Memory Card only)
Definition sdmmc.h:529
uint16_t SD_CARD_TYPE
[495:480] Section 4.10.2, Table 4-44
Definition sdmmc.h:533
uint8_t AU_SIZE
[431:428] Section 4.10.2.4, Table 4-47
Definition sdmmc.h:542
uint32_t VSC_AU_SIZE
[377:368] Section 4.10.2.11, Table 4-56
Definition sdmmc.h:532
uint8_t VIDEO_SPEED_CLASS
[391:384] Section 4.10.2.10, Table 4-54
Definition sdmmc.h:537
uint32_t SIZE_OF_PROTECTED_AREA
[479:448] Section 4.10.2.1
Definition sdmmc.h:530
uint8_t ERASE_TIMEOUT
[407:402] Section 4.10.2.6, Table 4-50
Definition sdmmc.h:538
uint8_t PERFORMANCE_MOVE
[439:432] Section 4.10.2.3, Table 4-46
Definition sdmmc.h:536
uint8_t ERASE_OFFSET
[401:400] Section 4.10.2.7, Table 4-51
Definition sdmmc.h:539
uint8_t SECURED_MODE
[509] Section 4.10.2, Table 4-44
Definition sdmmc.h:544
uint16_t ERASE_SIZE
[423:408] Section 4.10.2.5, Table 4-49
Definition sdmmc.h:534
uint32_t SUS_ADDR
[367:346] Section 4.10.2.12, Table 4-57
Definition sdmmc.h:531
uint8_t SPEED_CLASS
[447:440] Section 4.10.2.2, Table 4-45
Definition sdmmc.h:535
uint8_t DAT_BUS_WIDTH
[511:510] Section 4.10.2, Table 4-44
Definition sdmmc.h:543
uint8_t UHS_AU_SIZE
[395:392] Section 4.10.2.9, Table 4-3
Definition sdmmc.h:541
uint8_t UHS_SPEED_GRADE
[399:396] Section 4.10.2.8, Table 4-52
Definition sdmmc.h:540
Transfer descriptor.
Definition sdmmc.h:894
sdmmc_xfer_type_t type
Type of the transfer.
Definition sdmmc.h:895
uint32_t arg
Command argument used for the transfer.
Definition sdmmc.h:899
uint16_t block_num
Number of blocks to be transferred, 1 for Byte transfer.
Definition sdmmc.h:901
sdmmc_cmd_t cmd_idx
Command index used for the transfer.
Definition sdmmc.h:897
uint16_t block_size
Size of a block or number of bytes for Byte transfer.
Definition sdmmc.h:900
sdmmc_resp_t resp_type
Type of expected response for the transfer.
Definition sdmmc.h:898
bool write
Indicate a write transfer.
Definition sdmmc.h:896
A 16 bit integer in big endian aka network byte order.
Definition byteorder.h:73
A 32 bit integer in big endian aka network byte order.
Definition byteorder.h:83
SD/MMC Card status as structure.
Definition sdmmc.h:473
uint32_t BLOCK_LEN_ERROR
[29] SD and MMC
Definition sdmmc.h:500
uint32_t AKE_SEQ_ERROR
[3] SD only, Reserved in MMC
Definition sdmmc.h:477
uint32_t SWITCH_ERROR
[7] MMC only, reserved in SD/SDIO
Definition sdmmc.h:481
uint32_t OVERRUN
[17] MMC only, DEFERRED_RESPONSE in SD
Definition sdmmc.h:488
uint32_t reserved4
[4] Reserved
Definition sdmmc.h:478
uint32_t ERASE_SEQ_ERROR
[28] SD and MMC
Definition sdmmc.h:499
uint32_t ILLEGAL_COMMAND
[22] SD/SDIO and MMC
Definition sdmmc.h:493
uint32_t OUT_OF_RANGE
[31] SD/SDIO and MMC
Definition sdmmc.h:502
uint32_t reserved2
[2] Reserved for appl.
Definition sdmmc.h:476
uint32_t CC_ERROR
[20] SD and MMC
Definition sdmmc.h:491
uint32_t CURRENT_STATE
[12:9] SD and MMC
Definition sdmmc.h:483
uint32_t UNDERRUN
[18] MMC only, reserved in SD
Definition sdmmc.h:489
uint32_t ERASE_RESET
[13] SD and MMC
Definition sdmmc.h:484
uint32_t LOCK_UNLOCK_FAILED
[24] SD and MMC
Definition sdmmc.h:495
uint32_t CARD_IS_LOCKED
[25] SD and MMC
Definition sdmmc.h:496
uint32_t READY_FOR_DATA
[8] SD and MMC
Definition sdmmc.h:482
uint32_t FX_EVENT
[6] SD only, Reserved in MMC
Definition sdmmc.h:480
uint32_t COM_CRC_ERROR
[23] SD/SDIO and MMC
Definition sdmmc.h:494
uint32_t ADDRESS_ERROR
[30] SD and MMC
Definition sdmmc.h:501
uint32_t ERROR
[19] SD/SDIO and MMC
Definition sdmmc.h:490
uint32_t ERASE_PARAM
[27] SD and MMC
Definition sdmmc.h:498
uint32_t CARD_ECC_FAILED
[21] SD and MMC
Definition sdmmc.h:492
uint32_t CSD_OVERWRITE
[16] SD (CSD), MMC (CSD and CID)
Definition sdmmc.h:487
uint32_t reserved0
[1:0] Reserved for appl.
Definition sdmmc.h:475
uint32_t WP_ERASE_SKIP
[15] SD and MMC
Definition sdmmc.h:486
uint32_t WP_VIOLATION
[26] SD and MMC
Definition sdmmc.h:497
uint32_t APP_CMD
[5] SD and MMC
Definition sdmmc.h:479
uint32_t value
SD/MMC Card status as 32 bit value.
Definition sdmmc.h:504
uint32_t CARD_ECC_DISABLED
[14] SD only, reserved in MMC
Definition sdmmc.h:485
CID register structure (SD Memory and MMC Cards)
Definition sdmmc.h:597
sdmmc_cid_mmc_t mmc
CID register of MMC.
Definition sdmmc.h:599
sdmmc_cid_sd_t sd
CID register of SD Memory Cards.
Definition sdmmc.h:598
CSD register (SD Memory Card and MMC)
Definition sdmmc.h:765
sdmmc_csd_v1_t v1
CSD Version 1.0.
Definition sdmmc.h:766
sdmmc_csd_mmc_t mmc
CSD Version for MMC.
Definition sdmmc.h:768
sdmmc_csd_v2_t v2
CSD Version 2.0 and 3.0.
Definition sdmmc.h:767
Unit helper macros.
#define MHZ(x)
A macro to return the Hz in x MHz.
Definition units.h:45
#define KHZ(x)
A macro to return the Hz in x kHz.
Definition units.h:40
Cross File Arrays.
#define XFA_USE_CONST(type, name)
Declare an external read-only cross-file array.
Definition xfa.h:110