sdmmc.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2023 Gunar Schorcht
3  *
4  * This file is subject to the terms and conditions of the GNU Lesser
5  * General Public License v2.1. See the file LICENSE in the top level
6  * directory for more details.
7  */
8 
127 #ifndef SDMMC_SDMMC_H
128 #define SDMMC_SDMMC_H
129 
130 #include <errno.h>
131 
132 #include "assert.h"
133 #include "byteorder.h"
134 #include "macros/units.h"
135 #include "periph_conf.h"
136 #include "xfa.h"
137 
138 #ifdef __cplusplus
139 extern "C" {
140 #endif
141 
151 #ifndef SDMMC_CPU_DMA_REQUIREMENTS
152 #define SDMMC_CPU_DMA_REQUIREMENTS
153 #endif
154 
163 #define sdmmc_buf_t SDMMC_CPU_DMA_REQUIREMENTS uint8_t
164 
171 #define SDMMC_SDHC_BLOCK_SIZE (512)
172 
181 #define SDMMC_CMD(n) (n)
182 
186 #define SDMMC_ACMD_PREFIX (1 << 7)
187 
191 #define SDMMC_ACMD(n) (SDMMC_ACMD_PREFIX | SDMMC_CMD(n))
192 
202 typedef enum {
235 } sdmmc_cmd_t;
236 
238 #define SDMMC_CMD_NO_ARG (0x00000000UL)
239 
241 #define SDMMC_CMD_ARG_RCA(n) ((uint32_t)n << 16)
242 
244 #define SDMMC_RESP_CRC (1UL << 4)
246 #define SDMMC_RESP_BUSY (1UL << 5)
248 #define SDMMC_RESP_IDX (0xf)
249 
259 typedef enum {
263  | SDMMC_RESP_BUSY,
266  SDMMC_R3 = 3,
267  SDMMC_R4 = 4,
269  SDMMC_R5 = 5 | SDMMC_RESP_CRC,
271  SDMMC_R6 = 6 | SDMMC_RESP_CRC,
273  SDMMC_R7 = 7 | SDMMC_RESP_CRC,
275 } sdmmc_resp_t;
286 #define SDMMC_CMD8_CHECK_PATTERN (0xaa)
287 #define SDMMC_CMD8_VHS_27_36V (0b0001 << 8)
288 #define SDMMC_CMD8_PCIE_AVAIL (1 << 12)
289 #define SDMMC_CMD8_PCIE_12V (1 << 13)
292 #define SDMMC_CMD8_CHECK (SDMMC_CMD8_VHS_27_36V | SDMMC_CMD8_CHECK_PATTERN)
302 #define SDMMC_OCR_18V (1UL << 7)
303 #define SDMMC_OCR_27_28V (1UL << 15)
304 #define SDMMC_OCR_28_29V (1UL << 16)
305 #define SDMMC_OCR_29_30V (1UL << 17)
306 #define SDMMC_OCR_30_31V (1UL << 18)
307 #define SDMMC_OCR_31_32V (1UL << 19)
308 #define SDMMC_OCR_32_33V (1UL << 20)
309 #define SDMMC_OCR_33_34V (1UL << 21)
310 #define SDMMC_OCR_34_35V (1UL << 22)
311 #define SDMMC_OCR_35_36V (1UL << 23)
313 #define SDMMC_OCR_S18A (1UL << 24)
314 #define SDMMC_OCR_OVER_2TB (1UL << 27)
315 #define SDMMC_OCR_UHS_II (1UL << 29)
316 #define SDMMC_OCR_CCS (1UL << 30)
317 #define SDMMC_OCR_POWER_UP (1UL << 31)
326 #define SDMMC_OCR_ALL_VOLTAGES (SDMMC_OCR_27_28V | SDMMC_OCR_28_29V | \
327  SDMMC_OCR_29_30V | SDMMC_OCR_30_31V | \
328  SDMMC_OCR_31_32V | SDMMC_OCR_32_33V | \
329  SDMMC_OCR_33_34V | SDMMC_OCR_34_35V | \
330  SDMMC_OCR_35_36V)
343 typedef enum {
348  /* bits 3..5 are left unused for later extensions of SD Memory Card types */
352 
356 #define SDMMC_CARD_TYPE_SD (SDMMC_CARD_TYPE_SDSC_V1 | \
357  SDMMC_CARD_TYPE_SDSC_V2_V3 | \
358  SDMMC_CARD_TYPE_SDHC_SDXC)
359 
372 typedef enum {
377 
388 typedef enum {
396 
409 #define SDMMC_CARD_STATUS_OUT_OF_RANGE (1UL << 31)
410 #define SDMMC_CARD_STATUS_ADDRESS_ERROR (1UL << 30)
411 #define SDMMC_CARD_STATUS_BLOCK_LEN_ERROR (1UL << 29)
412 #define SDMMC_CARD_STATUS_ERASE_SEQ_ERROR (1UL << 28)
413 #define SDMMC_CARD_STATUS_ERASE_PARAM (1UL << 27)
414 #define SDMMC_CARD_STATUS_WP_VIOLATION (1UL << 26)
415 #define SDMMC_CARD_STATUS_CARD_IS_LOCKED (1UL << 25)
416 #define SDMMC_CARD_STATUS_LOCK_UNLOCK_FAILED (1UL << 24)
417 #define SDMMC_CARD_STATUS_COM_CRC_ERROR (1UL << 23)
418 #define SDMMC_CARD_STATUS_ILLEGAL_COMMAND (1UL << 22)
419 #define SDMMC_CARD_STATUS_CARD_ECC_FAILED (1UL << 21)
420 #define SDMMC_CARD_STATUS_CC_ERROR (1UL << 20)
421 #define SDMMC_CARD_STATUS_ERROR (1UL << 19)
422 #define SDMMC_CARD_STATUS_UNDERRUN (1UL << 18)
423 #define SDMMC_CARD_STATUS_OVERRUN (1UL << 17)
424 #define SDMMC_CARD_STATUS_CSD_OVERWRITE (1UL << 16)
425 #define SDMMC_CARD_STATUS_WP_ERASE_SKIP (1UL << 15)
426 #define SDMMC_CARD_STATUS_CARD_ECC_DISABLED (1UL << 14)
427 #define SDMMC_CARD_STATUS_ERASE_RESET (1UL << 13)
428 #define SDMMC_CARD_STATUS_READY_FOR_DATA (1UL << 8)
429 #define SDMMC_CARD_STATUS_SWITCH_ERROR (1UL << 7)
430 #define SDMMC_CARD_STATUS_FX_EVENT (1UL << 6)
431 #define SDMMC_CARD_STATUS_APP_CMD (1UL << 5)
432 #define SDMMC_CARD_STATUS_AKE_SEQ_ERROR (1UL << 3)
435 #define SDMMC_CARD_STATUS_ERRORS (SDMMC_CARD_STATUS_OUT_OF_RANGE | \
436  SDMMC_CARD_STATUS_ADDRESS_ERROR | \
437  SDMMC_CARD_STATUS_BLOCK_LEN_ERROR | \
438  SDMMC_CARD_STATUS_ERASE_SEQ_ERROR | \
439  SDMMC_CARD_STATUS_ERASE_PARAM | \
440  SDMMC_CARD_STATUS_WP_VIOLATION | \
441  SDMMC_CARD_STATUS_LOCK_UNLOCK_FAILED | \
442  SDMMC_CARD_STATUS_COM_CRC_ERROR | \
443  SDMMC_CARD_STATUS_ILLEGAL_COMMAND | \
444  SDMMC_CARD_STATUS_CARD_ECC_FAILED | \
445  SDMMC_CARD_STATUS_CC_ERROR | \
446  SDMMC_CARD_STATUS_ERROR | \
447  SDMMC_CARD_STATUS_UNDERRUN | \
448  SDMMC_CARD_STATUS_OVERRUN | \
449  SDMMC_CARD_STATUS_CSD_OVERWRITE | \
450  SDMMC_CARD_STATUS_WP_ERASE_SKIP | \
451  SDMMC_CARD_STATUS_SWITCH_ERROR | \
452  SDMMC_CARD_STATUS_AKE_SEQ_ERROR)
453 
455 #define SDMMC_CARD_STATUS_CURRENT_STATE(n) (((n) >> SDMMC_CARD_STATUS_CURRENT_STATE_Pos) & 0x0f)
456 #define SDMMC_CARD_STATUS_CURRENT_STATE_Pos (9)
461 enum {
472 };
473 
477 typedef union {
478  struct {
479  uint32_t reserved0 :2;
480  uint32_t reserved2 :1;
481  uint32_t AKE_SEQ_ERROR :1;
482  uint32_t reserved4 :1;
483  uint32_t APP_CMD :1;
484  uint32_t FX_EVENT :1;
485  uint32_t SWITCH_ERROR :1;
486  uint32_t READY_FOR_DATA :1;
487  uint32_t CURRENT_STATE :4;
488  uint32_t ERASE_RESET :1;
489  uint32_t CARD_ECC_DISABLED :1;
490  uint32_t WP_ERASE_SKIP :1;
491  uint32_t CSD_OVERWRITE :1;
492  uint32_t OVERRUN :1;
493  uint32_t UNDERRUN :1;
494  uint32_t ERROR :1;
495  uint32_t CC_ERROR :1;
496  uint32_t CARD_ECC_FAILED :1;
497  uint32_t ILLEGAL_COMMAND :1;
498  uint32_t COM_CRC_ERROR :1;
499  uint32_t LOCK_UNLOCK_FAILED:1;
500  uint32_t CARD_IS_LOCKED :1;
501  uint32_t WP_VIOLATION :1;
502  uint32_t ERASE_PARAM :1;
503  uint32_t ERASE_SEQ_ERROR :1;
504  uint32_t BLOCK_LEN_ERROR :1;
505  uint32_t ADDRESS_ERROR :1;
506  uint32_t OUT_OF_RANGE :1;
507  };
508  uint32_t value;
510 
519 #define SDMMC_SD_STATUS_SIZE (64)
520 
533 typedef struct __attribute__((packed)) {
535  uint32_t SUS_ADDR:22;
536  uint32_t VSC_AU_SIZE:10;
537  uint16_t SD_CARD_TYPE:16;
538  uint16_t ERASE_SIZE:16;
539  uint8_t SPEED_CLASS:8;
540  uint8_t PERFORMANCE_MOVE:8;
541  uint8_t VIDEO_SPEED_CLASS:8;
542  uint8_t ERASE_TIMEOUT:6;
543  uint8_t ERASE_OFFSET:2;
544  uint8_t UHS_SPEED_GRADE:4;
545  uint8_t UHS_AU_SIZE:4;
546  uint8_t AU_SIZE:4;
547  uint8_t DAT_BUS_WIDTH:2;
548  uint8_t SECURED_MODE:1;
550 
559 #define SDMMC_CID_REG_SIZE (16)
560 
561 #define SDMMC_CID_OID_SIZE_SD (2)
562 #define SDMMC_CID_PNM_SIZE_SD (5)
563 #define SDMMC_CID_PNM_SIZE_MMC (6)
571 typedef struct __attribute__((packed)) {
572  uint8_t MID;
575  uint8_t PRV;
578  uint8_t CID_CRC;
580 
588 typedef struct __attribute__((packed)) {
589  uint8_t MID;
592  uint8_t PRV;
594  uint8_t MDT;
595  uint8_t CID_CRC;
597 
601 typedef union {
604 } sdmmc_cid_t;
605 
622 typedef enum {
628 
630 #define SDMMC_CSD_REG_SIZE (16)
631 
638 typedef struct __attribute__((packed)) {
639  uint32_t CSD_CRC:8;
640  uint32_t reserved5:1;
641  uint32_t WP_UPC:1;
642  uint32_t FILE_FORMAT:2;
643  uint32_t TMP_WRITE_PROTECT:1;
644  uint32_t PERM_WRITE_PROTECT:1;
645  uint32_t COPY:1;
646  uint32_t FILE_FORMAT_GRP:1;
647  uint32_t reserved4:5;
648  uint32_t WRITE_BL_PARTIAL:1;
649  uint32_t WRITE_BL_LEN:4;
650  uint32_t R2W_FACTOR:3;
651  uint32_t reserved3:2;
652  uint32_t WP_GRP_ENABLE:1;
653  uint32_t WP_GRP_SIZE:7;
654  uint32_t SECTOR_SIZE:7;
655  uint32_t ERASE_BLK_EN:1;
656  uint32_t C_SIZE_MULT:3;
657  uint32_t VDD_W_CURR_MAX:3;
658  uint32_t VDD_W_CURR_MIN:3;
659  uint32_t VDD_R_CURR_MAX:3;
660  uint32_t VDD_R_CURR_MIN:3;
661  uint32_t C_SIZE:12;
662  uint32_t reserved2:2;
663  uint32_t DSR_IMP:1;
664  uint32_t READ_BLK_MISALIGN:1;
665  uint32_t WRITE_BLK_MISALIGN:1;
666  uint32_t READ_BL_PARTIAL:1;
667  uint32_t READ_BL_LEN:4;
668  uint32_t CCC:12;
669  uint32_t TRAN_SPEED:8;
670  uint32_t NSAC:8;
671  uint32_t TAAC:8;
672  uint32_t reserved1:6;
673  uint32_t CSD_STRUCTURE:2;
675 
687 typedef struct __attribute__((packed)) {
688  uint32_t CSD_CRC:8;
689  uint32_t reserved5:1;
690  uint32_t WP_UPC:1;
691  uint32_t FILE_FORMAT:2;
692  uint32_t TMP_WRITE_PROTECT:1;
693  uint32_t PERM_WRITE_PROTECT:1;
694  uint32_t COPY:1;
695  uint32_t FILE_FORMAT_GRP:1;
696  uint32_t reserved4:5;
697  uint32_t WRITE_BL_PARTIAL:1;
698  uint32_t WRITE_BL_LEN:4;
699  uint32_t R2W_FACTOR:3;
700  uint32_t reserved3:2;
701  uint32_t WP_GRP_ENABLE:1;
702  uint32_t WP_GRP_SIZE:7;
703  uint32_t SECTOR_SIZE:7;
704  uint32_t ERASE_BLK_EN:1;
705  uint32_t reserved2:1;
706  uint32_t C_SIZE:28;
707  uint32_t DSR_IMP:1;
708  uint32_t READ_BLK_MISALIGN:1;
709  uint32_t WRITE_BLK_MISALIGN:1;
710  uint32_t READ_BL_PARTIAL:1;
711  uint32_t READ_BL_LEN:4;
712  uint32_t CCC:12;
713  uint32_t TRAN_SPEED:8;
714  uint32_t NSAC:8;
715  uint32_t TAAC:8;
716  uint32_t reserved1:6;
717  uint32_t CSD_STRUCTURE:2;
719 
727 typedef struct __attribute__((packed)) {
728  uint32_t CSD_CRC:8;
729  uint32_t ECC:2;
730  uint32_t FILE_FORMAT:2;
731  uint32_t TMP_WRITE_PROTECT:1;
732  uint32_t PERM_WRITE_PROTECT:1;
733  uint32_t COPY:1;
734  uint32_t FILE_FORMAT_GRP:1;
735  uint32_t CONTENT_PROT_APP:1;
736  uint32_t reserved4:4;
737  uint32_t WRITE_BL_PARTIAL:1;
738  uint32_t WRITE_BL_LEN:4;
739  uint32_t R2W_FACTOR:3;
740  uint32_t DEFAULT_ECC:2;
741  uint32_t WP_GRP_ENABLE:1;
742  uint32_t WP_GRP_SIZE:5;
743  uint32_t ERASE_GRP_MULT:5;
744  uint32_t ERASE_GRP_SIZE:5;
745  uint32_t C_SIZE_MULT:3;
746  uint32_t VDD_W_CURR_MAX:3;
747  uint32_t VDD_W_CURR_MIN:3;
748  uint32_t VDD_R_CURR_MAX:3;
749  uint32_t VDD_R_CURR_MIN:3;
750  uint16_t C_SIZE:12;
751  uint32_t reserved2:2;
752  uint32_t DSR_IMP:1;
753  uint32_t READ_BLK_MISALIGN:1;
754  uint32_t WRITE_BLK_MISALIGN:1;
755  uint32_t READ_BL_PARTIAL:1;
756  uint32_t READ_BL_LEN:4;
757  uint32_t CCC:12;
758  uint32_t TRAN_SPEED:8;
759  uint32_t NSAC:8;
760  uint32_t TAAC:8;
761  uint32_t reserved1:2;
762  uint32_t SPEC_VERS:4;
763  uint32_t CSD_STRUCTURE:2;
765 
769 typedef union {
773 } sdmmc_csd_t;
774 
776 #define SDMMC_EXT_CSD_REG_SIZE (512)
777 
789 typedef struct {
790  uint32_t SEC_COUNT;
791  uint8_t CARD_TYPE;
792  uint8_t CSD_STRUCTURE;
793  uint8_t BUS_WIDTH;
795 
807 #define SDMMC_SCR_REG_SIZE (8)
808 
815 typedef struct {
816  /* first 32-bit word */
817  uint32_t reserved0;
818  /* second 32-bit word */
819  union {
820  struct {
821  uint32_t CMD_SUPPORT:5;
822  uint32_t reserved37:1;
823  uint32_t SD_SPECX:4;
824  uint32_t SD_SPEC4:1;
825  uint32_t EX_SECURITY:4;
826  uint32_t SD_SPEC3:1;
827  uint32_t SD_BUS_WIDTHS:4;
828  uint32_t SD_SECURITY:3;
830  uint32_t SD_SPEC:4;
831  uint32_t SCR_STRUCTURE:4;
832  };
833  uint32_t value;
834  };
835 } sdmmc_scr_t;
836 
837 #define SDMMC_SCR_ACMD_53_54_SUPPORT (0b10000)
839 #define SDMMC_SCR_ACMD_58_59_SUPPORT (0b01000)
841 #define SDMMC_SCR_ACMD_48_49_SUPPORT (0b00100)
843 #define SDMMC_SCR_ACMD_23_SUPPORT (0b00010)
845 #define SDMMC_SCR_ACMD_20_SUPPORT (0b00001)
866 #define SDMMC_SCR_SD_SPEC(scr) \
867  (scr.SD_SPEC + scr.SD_SPEC3 + (scr.SD_SPECX ? scr.SD_SPECX + 1 : scr.SD_SPEC4))
868 
875 #define SDMMC_DEV(x) (sdmmc_get_dev(x))
881 typedef struct sdmmc_dev sdmmc_dev_t;
882 
886 typedef enum {
891 
898 typedef struct {
900  bool write;
903  uint32_t arg;
904  uint16_t block_size;
905  uint16_t block_num;
907 
917 typedef enum {
918  SDMMC_AUTO_CMD_NONE = 0x00,
919  SDMMC_AUTO_CMD12 = 0x01,
920  SDMMC_AUTO_CMD23 = 0x02,
921  SDMMC_AUTO_CMD_BOTH = 0x03,
923 
927 typedef enum {
928  SDMMC_EVENT_CARD_INSERTED,
929  SDMMC_EVENT_CARD_REMOVED,
930 } sdmmc_event_t;
931 
944 
956 typedef struct {
975  void (*init)(sdmmc_dev_t *dev);
976 
1031  int (*send_cmd)(sdmmc_dev_t *dev, sdmmc_cmd_t cmd_idx, uint32_t arg,
1032  sdmmc_resp_t resp_type, uint32_t *resp);
1033 
1060  int (*card_init)(sdmmc_dev_t *dev);
1061 
1111  int (*set_bus_width)(sdmmc_dev_t *dev, sdmmc_bus_width_t width);
1112 
1137  int (*set_clock_rate)(sdmmc_dev_t *dev, sdmmc_clock_rate_t rate);
1138 
1139 #if !IS_USED(MODULE_PERIPH_SDMMC_AUTO_CLK) || DOXYGEN
1156  int (*enable_clock)(sdmmc_dev_t *dev, bool enable);
1157 #endif
1158 
1183  int (*xfer_prepare)(sdmmc_dev_t *dev, sdmmc_xfer_desc_t *xfer);
1184 
1226  int (*xfer_execute)(sdmmc_dev_t *dev, sdmmc_xfer_desc_t *xfer,
1227  const void *data_wr, void *data_rd,
1228  uint16_t *done);
1229 
1249  int (*xfer_finish)(sdmmc_dev_t *dev, sdmmc_xfer_desc_t *xfer);
1250 
1251 } sdmmc_driver_t;
1252 
1269 typedef struct sdmmc_dev {
1275 
1288 
1296 
1304 
1312 
1313 #if IS_USED(MODULE_SDMMC_MMC)
1318  sdmmc_ext_csd_t ext_csd;
1319 #endif
1320 
1326  uint32_t status;
1327 
1333  uint16_t rca;
1334 
1341 
1350 
1358  bool present;
1359 
1366 
1373 
1380 
1386  bool spi_mode;
1387 
1388 } sdmmc_dev_t;
1389 
1431 #if !DOXYGEN
1433 #else
1435 #endif
1436 
1440 #define SDMMC_NUMOF XFA_LEN(sdmmc_dev_t *, sdmmc_devs)
1441 
1454 static inline sdmmc_dev_t *sdmmc_get_dev(unsigned num)
1455 {
1456  return (num < SDMMC_NUMOF) ? sdmmc_devs[num] : NULL;
1457 }
1458 
1478 static inline void sdmmc_init(sdmmc_dev_t *dev)
1479 {
1480  assert(dev);
1481  assert(dev->driver);
1482 
1483  dev->driver->init(dev);
1484 }
1485 
1533 int sdmmc_send_cmd(sdmmc_dev_t *dev, sdmmc_cmd_t cmd_idx, uint32_t arg,
1534  sdmmc_resp_t resp_type, uint32_t *resp);
1535 
1592 int sdmmc_send_acmd(sdmmc_dev_t *dev, sdmmc_cmd_t cmd_idx, uint32_t arg,
1593  sdmmc_resp_t resp_type, uint32_t *resp);
1594 
1646 
1750 int sdmmc_xfer(sdmmc_dev_t *dev, sdmmc_cmd_t cmd_idx, uint32_t arg,
1751  uint16_t block_size, uint16_t block_num,
1752  const void *data_wr, void *data_rd, uint16_t *done);
1753 
1808  uint32_t block_addr, uint16_t block_size,
1809  uint16_t block_num, void *data, uint16_t *done);
1810 
1864 int sdmmc_write_blocks(sdmmc_dev_t *dev, uint32_t block_addr,
1865  uint16_t block_size, uint16_t block_num,
1866  const void *data, uint16_t *done);
1867 
1902  uint32_t block_addr, uint16_t block_num);
1903 
1934 
1954 
1957 #ifdef __cplusplus
1958 }
1959 #endif
1960 
1961 #endif /* SDMMC_SDMMC_H */
POSIX.1-2008 compliant version of the assert macro.
#define assert(cond)
abort the program if assertion is false
Definition: assert.h:136
Functions to work with different byte orders.
sdmmc_cmd_t
SDIO/SD/MMC Commands.
Definition: sdmmc.h:202
sdmmc_xfer_type_t
Data transfer types.
Definition: sdmmc.h:886
sdmmc_auto_cmd_t
Auto Command features supported by the SDIO/SD/MMC peripheral.
Definition: sdmmc.h:917
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:881
#define SDMMC_CID_OID_SIZE_SD
OID (OEM/Application ID) size in byte (SD)
Definition: sdmmc.h:561
sdmmc_resp_t
SDIO/SD/MMC Response types.
Definition: sdmmc.h:259
static void sdmmc_init(sdmmc_dev_t *dev)
Basic initialization of the given SDIO/SD/MMC device.
Definition: sdmmc.h:1478
int sdmmc_erase_blocks(sdmmc_dev_t *dev, uint32_t block_addr, uint16_t block_num)
Erase a number of blocks.
#define SDMMC_CMD(n)
Command index.
Definition: sdmmc.h:181
sdmmc_dev_t sdmmc_devs[]
SDIO/SD/MMC device descriptor references as read-only XFA.
Definition: sdmmc.h:1434
#define SDMMC_ACMD(n)
Application specific command index.
Definition: sdmmc.h:191
sdmmc_clock_rate_t
SDIO/SD/MMC Card clock rate types.
Definition: sdmmc.h:388
#define SDMMC_RESP_BUSY
Mask to check whether the response includes busy status from card.
Definition: sdmmc.h:246
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:343
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:943
#define SDMMC_NUMOF
Number of SDIO/SD/MMC devices defined.
Definition: sdmmc.h:1440
#define SDMMC_CID_PNM_SIZE_MMC
PNM (Product name) size in byte (MMC)
Definition: sdmmc.h:563
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:244
sdmmc_csd_version_t
CSD Register Versions (SD Memory Card and MMC)
Definition: sdmmc.h:622
sdmmc_event_t
Events generated by SDIO/SD/MMC high level API.
Definition: sdmmc.h:927
static sdmmc_dev_t * sdmmc_get_dev(unsigned num)
Retrieve SDIO/SD/MMC device descriptor reference from device index.
Definition: sdmmc.h:1454
#define SDMMC_CID_PNM_SIZE_SD
PNM (Product name) size in byte (SD)
Definition: sdmmc.h:562
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:372
@ SDMMC_CMD5
SD_APP_OP_COND (SDIO only)
Definition: sdmmc.h:208
@ SDMMC_CMD58
READ_OCR (SPI mode only)
Definition: sdmmc.h:228
@ SDMMC_CMD16
SET_BLOCKLEN.
Definition: sdmmc.h:216
@ SDMMC_ACMD51
SEND_SCR.
Definition: sdmmc.h:234
@ SDMMC_CMD33
ERASE_WR_BLK_END.
Definition: sdmmc.h:223
@ SDMMC_CMD25
WRITE_MULTIPLE_BLOCK.
Definition: sdmmc.h:221
@ SDMMC_ACMD13
SD_STATUS.
Definition: sdmmc.h:231
@ SDMMC_CMD4
SET_DSR.
Definition: sdmmc.h:207
@ SDMMC_ACMD41
SD_APP_OP_COND.
Definition: sdmmc.h:233
@ SDMMC_CMD7
SELECT/DESELECT_CARD.
Definition: sdmmc.h:210
@ SDMMC_CMD32
ERASE_WR_BLK_START.
Definition: sdmmc.h:222
@ SDMMC_CMD17
READ_SINGLE_BLOCK.
Definition: sdmmc.h:217
@ SDMMC_CMD6
SWITCH.
Definition: sdmmc.h:209
@ SDMMC_CMD38
ERASE.
Definition: sdmmc.h:224
@ SDMMC_CMD8
SEND_IF_COND (SD), SEND_EXT_CSD (MMC)
Definition: sdmmc.h:211
@ SDMMC_CMD24
WRITE_BLOCK.
Definition: sdmmc.h:220
@ SDMMC_CMD59
CRC_ON_OFF (SPI mode only)
Definition: sdmmc.h:229
@ SDMMC_CMD13
SEND_STATUS.
Definition: sdmmc.h:215
@ SDMMC_CMD3
SET_RELATIVE_ADDR.
Definition: sdmmc.h:206
@ SDMMC_CMD52
IO_RW_DIRECT (SDIO only)
Definition: sdmmc.h:225
@ SDMMC_CMD53
IO_RW_EXTENDED (SDIO only)
Definition: sdmmc.h:226
@ SDMMC_ACMD23
SET_WR_BLK_ERASE_COUNT.
Definition: sdmmc.h:232
@ SDMMC_CMD55
APP_CMD.
Definition: sdmmc.h:227
@ SDMMC_CMD12
STOP_TRANSMISSION.
Definition: sdmmc.h:214
@ SDMMC_CMD10
SEND_CID.
Definition: sdmmc.h:213
@ SDMMC_CMD23
SET_BLOCK_COUNT.
Definition: sdmmc.h:219
@ SDMMC_ACMD6
SET_BUS_WIDTH.
Definition: sdmmc.h:230
@ SDMMC_CMD2
ALL_SEND_CID.
Definition: sdmmc.h:205
@ SDMMC_CMD9
SEND_CSD.
Definition: sdmmc.h:212
@ SDMMC_CMD18
READ_MULTIPLE_BLOCK.
Definition: sdmmc.h:218
@ SDMMC_CMD1
SEND_OP_COND.
Definition: sdmmc.h:204
@ SDMMC_CMD0
GO_IDLE_STATE.
Definition: sdmmc.h:203
@ SDMMC_CARD_STATE_IDLE
Idle.
Definition: sdmmc.h:462
@ SDMMC_CARD_STATE_READY
Ready.
Definition: sdmmc.h:463
@ SDMMC_CARD_STATE_DATA
Data.
Definition: sdmmc.h:467
@ SDMMC_CARD_STATE_RCV
Receive.
Definition: sdmmc.h:468
@ SDMMC_CARD_STATE_PRG
Programming.
Definition: sdmmc.h:469
@ SDMMC_CARD_STATE_BTST
Bus Test.
Definition: sdmmc.h:471
@ SDMMC_CARD_STATE_TRAN
Transfer.
Definition: sdmmc.h:466
@ SDMMC_CARD_STATE_IDENT
Identification.
Definition: sdmmc.h:464
@ SDMMC_CARD_STATE_DIS
Disconnect.
Definition: sdmmc.h:470
@ SDMMC_CARD_STATE_STBY
Stand-by.
Definition: sdmmc.h:465
@ SDMMC_BLOCK
Transfer block with size of READ_BL_LEN/WRITE_BL_LEN.
Definition: sdmmc.h:888
@ SDMMC_MULTIBYTE
Transfer 1 to READ_BL_LEN/WRITE_BL_LEN bytes.
Definition: sdmmc.h:887
@ SDMMC_STREAM
Transfer until CMD12 is sent (MMC and 1-bit bus only)
Definition: sdmmc.h:889
@ SDMMC_R4
Fast I/O [48 bit (16 bit RCA, 1 bit status, 7 bit addr, 8 bit reg)].
Definition: sdmmc.h:267
@ SDMMC_R3
OCR Resister [48 bit (32 bit OCR)].
Definition: sdmmc.h:266
@ SDMMC_NO_R
No response expected.
Definition: sdmmc.h:260
@ SDMMC_R1
Normal Response [48 bit (32 bit card status)].
Definition: sdmmc.h:261
@ SDMMC_R6
Published RCA Response [48 bit (16 bit RCA, 16 bit card status)
Definition: sdmmc.h:271
@ SDMMC_R1B
Normal Response [48 bit (R1 with optional busy signal on DAT0)].
Definition: sdmmc.h:262
@ SDMMC_R7
Card Interface Condition 48 bit
Definition: sdmmc.h:273
@ SDMMC_R2
CID/CSD [136 bit (128 bit CID or CSD)].
Definition: sdmmc.h:265
@ SDMMC_R5
Interrupt Request [48 bit (16 bit RCA, 16 bit not defined)
Definition: sdmmc.h:269
@ SDMMC_CLK_20M
MMC Card in Data Transfer Mode (Backward Compatibility)
Definition: sdmmc.h:390
@ SDMMC_CLK_400K
Identification Mode f_OD (400 kHz)
Definition: sdmmc.h:389
@ SDMMC_CLK_52M
MMC/eMMC in Data Transfer Mode (High Speed)
Definition: sdmmc.h:394
@ SDMMC_CLK_26M
MMC/eMMC Card in Data Transfer Mode (Default Speed)
Definition: sdmmc.h:392
@ SDMMC_CLK_25M
SD/SDIO Card in Data Transfer Mode (Default Speed)
Definition: sdmmc.h:391
@ SDMMC_CLK_50M
SD/SDIO Card in Data Transfer Mode (High Speed)
Definition: sdmmc.h:393
@ SDMMC_CARD_TYPE_SDSC_V2_V3
SD Memory Card Standard Capacity (SDSC) Version 2.x+.
Definition: sdmmc.h:346
@ SDMMC_CARD_TYPE_MMC
MultiMedia Card.
Definition: sdmmc.h:350
@ SDMMC_CARD_TYPE_SDIO
SDIO Card.
Definition: sdmmc.h:349
@ SDMMC_CARD_TYPE_SDHC_SDXC
SD Memory Card High or Extended Capacity (SDHC/SDXC)
Definition: sdmmc.h:347
@ SDMMC_CARD_TYPE_SDSC_V1
SD Memory Card Standard Capacity (SDSC) Version 1.x.
Definition: sdmmc.h:345
@ SDMMC_CARD_TYPE_UNKNOWN
Card type unknown.
Definition: sdmmc.h:344
@ SDMMC_CSD_V1
CSD Version 1.0 (SDSC and MMC)
Definition: sdmmc.h:623
@ SDMMC_CSD_V3
CSD Version 3.0 (SDUC) or Version 1.2 (MMC)
Definition: sdmmc.h:625
@ SDMMC_CSD_V2
CSD Version 2.0 (SDHC/SDXC) or Version 1.1 (MMC)
Definition: sdmmc.h:624
@ SDMMC_CSD_Vx
Reserved (SD) or Version in EXT_CSD (MMC)
Definition: sdmmc.h:626
@ SDMMC_BUS_WIDTH_1BIT
Data bus width is 1 bit (default)
Definition: sdmmc.h:373
@ SDMMC_BUS_WIDTH_4BIT
Data bus width is 4 bit.
Definition: sdmmc.h:374
@ SDMMC_BUS_WIDTH_8BIT
Data bus width is 8 bit.
Definition: sdmmc.h:375
event structure
Definition: event.h:148
CID register structure (MMC)
Definition: sdmmc.h:588
be_uint32_t PSN
Product serial number in big-endian order.
Definition: sdmmc.h:593
uint8_t MDT
Manufacturing date.
Definition: sdmmc.h:594
be_uint16_t OID
OEM/Application ID in big-endian order.
Definition: sdmmc.h:590
uint8_t PRV
Product revision.
Definition: sdmmc.h:592
uint8_t CID_CRC
CRC7 checksum including bit 0.
Definition: sdmmc.h:595
uint8_t MID
Manufacturer ID.
Definition: sdmmc.h:589
CID register structure (SD Memory Cards)
Definition: sdmmc.h:571
be_uint32_t PSN
Product serial number in big-endian order.
Definition: sdmmc.h:576
uint8_t CID_CRC
CRC7 checksum including bit 0.
Definition: sdmmc.h:578
uint8_t MID
Manufacturer ID.
Definition: sdmmc.h:572
uint8_t PRV
Product revision.
Definition: sdmmc.h:575
be_uint16_t MDT
Manufacturing date in big-endian order.
Definition: sdmmc.h:577
CSD register structure for MMC.
Definition: sdmmc.h:727
uint32_t R2W_FACTOR
Write speed factor [28:26].
Definition: sdmmc.h:739
uint32_t reserved4
reserved [20:17]
Definition: sdmmc.h:736
uint32_t WP_GRP_SIZE
Write protect group size [36:32].
Definition: sdmmc.h:742
uint32_t TMP_WRITE_PROTECT
Temporary write protection [12].
Definition: sdmmc.h:731
uint32_t DEFAULT_ECC
Manufacturer default ECC [30:29].
Definition: sdmmc.h:740
uint32_t CSD_STRUCTURE
CSD structure [127:126].
Definition: sdmmc.h:763
uint32_t CONTENT_PROT_APP
Content protection application [16].
Definition: sdmmc.h:735
uint32_t WRITE_BL_LEN
Max.
Definition: sdmmc.h:738
uint32_t VDD_W_CURR_MIN
Max.
Definition: sdmmc.h:747
uint32_t FILE_FORMAT
File format [11:10].
Definition: sdmmc.h:730
uint32_t DSR_IMP
DSR implemented [76].
Definition: sdmmc.h:752
uint32_t WP_GRP_ENABLE
write protect group enable [31]
Definition: sdmmc.h:741
uint32_t reserved2
reserved [75:74]
Definition: sdmmc.h:751
uint32_t NSAC
Data read access-time-2 in CLK cycles [111:104].
Definition: sdmmc.h:759
uint32_t VDD_R_CURR_MAX
Max.
Definition: sdmmc.h:748
uint32_t CCC
Card command classes [95:84].
Definition: sdmmc.h:757
uint32_t WRITE_BL_PARTIAL
partial blocks for write allowed [21]
Definition: sdmmc.h:737
uint32_t reserved1
reserved [121:120]
Definition: sdmmc.h:761
uint32_t FILE_FORMAT_GRP
File format group [15].
Definition: sdmmc.h:734
uint32_t TRAN_SPEED
Max.
Definition: sdmmc.h:758
uint32_t ERASE_GRP_MULT
Erase group size multiplier [41:37].
Definition: sdmmc.h:743
uint32_t TAAC
Data read access-time-1 [119:112].
Definition: sdmmc.h:760
uint32_t WRITE_BLK_MISALIGN
Write block misalignment [78].
Definition: sdmmc.h:754
uint32_t CSD_CRC
CRC including End bit 1b [7:0].
Definition: sdmmc.h:728
uint32_t COPY
Copy flag [14].
Definition: sdmmc.h:733
uint32_t SPEC_VERS
Specification version [125:122].
Definition: sdmmc.h:762
uint32_t ERASE_GRP_SIZE
Erase group size [46:42].
Definition: sdmmc.h:744
uint16_t C_SIZE
Device size [73:62].
Definition: sdmmc.h:750
uint32_t VDD_W_CURR_MAX
Max.
Definition: sdmmc.h:746
uint32_t VDD_R_CURR_MIN
Max.
Definition: sdmmc.h:749
uint32_t READ_BL_LEN
Max.
Definition: sdmmc.h:756
uint32_t PERM_WRITE_PROTECT
Permanent write protection [13].
Definition: sdmmc.h:732
uint32_t ECC
ECC code [9:8].
Definition: sdmmc.h:729
uint32_t READ_BLK_MISALIGN
Read block misalignment [77].
Definition: sdmmc.h:753
uint32_t C_SIZE_MULT
Device size multiplier [49:47].
Definition: sdmmc.h:745
uint32_t READ_BL_PARTIAL
Partial blocks for read allowed [79].
Definition: sdmmc.h:755
CSD register structure Version 1.0.
Definition: sdmmc.h:638
uint32_t WRITE_BL_LEN
max.
Definition: sdmmc.h:649
uint32_t FILE_FORMAT_GRP
File format group [15].
Definition: sdmmc.h:646
uint32_t READ_BL_PARTIAL
partial blocks for read allowed [79]
Definition: sdmmc.h:666
uint32_t PERM_WRITE_PROTECT
permanent write protection [13]
Definition: sdmmc.h:644
uint32_t VDD_R_CURR_MIN
max.
Definition: sdmmc.h:660
uint32_t TMP_WRITE_PROTECT
temporary write protection [12]
Definition: sdmmc.h:643
uint32_t WP_GRP_SIZE
write protect group size [38:32]
Definition: sdmmc.h:653
uint32_t R2W_FACTOR
write speed factor [28:26]
Definition: sdmmc.h:650
uint32_t reserved2
reserved [75:74]
Definition: sdmmc.h:662
uint32_t FILE_FORMAT
File format [11:10].
Definition: sdmmc.h:642
uint32_t CSD_CRC
CRC including End bit 1b [7:0].
Definition: sdmmc.h:639
uint32_t TRAN_SPEED
max.
Definition: sdmmc.h:669
uint32_t VDD_W_CURR_MAX
max.
Definition: sdmmc.h:657
uint32_t TAAC
data read access-time-1 [119:112]
Definition: sdmmc.h:671
uint32_t C_SIZE
device size [73:62]
Definition: sdmmc.h:661
uint32_t WRITE_BL_PARTIAL
partial blocks for write allowed [21]
Definition: sdmmc.h:648
uint32_t SECTOR_SIZE
erase sector size [45:39]
Definition: sdmmc.h:654
uint32_t READ_BLK_MISALIGN
read block misalignment [77]
Definition: sdmmc.h:664
uint32_t DSR_IMP
DSR implemented [76].
Definition: sdmmc.h:663
uint32_t VDD_R_CURR_MAX
max.
Definition: sdmmc.h:659
uint32_t WP_GRP_ENABLE
write protect group enable [31]
Definition: sdmmc.h:652
uint32_t CSD_STRUCTURE
CSD structure [127:126].
Definition: sdmmc.h:673
uint32_t reserved4
reserved [20:16]
Definition: sdmmc.h:647
uint32_t reserved3
reserved [30:29]
Definition: sdmmc.h:651
uint32_t reserved1
reserved [125:120]
Definition: sdmmc.h:672
uint32_t READ_BL_LEN
max.
Definition: sdmmc.h:667
uint32_t NSAC
data read access-time-2 in CLK cycles [111:104]
Definition: sdmmc.h:670
uint32_t WP_UPC
write protection until power cycle [9]
Definition: sdmmc.h:641
uint32_t WRITE_BLK_MISALIGN
write block misalignment [78]
Definition: sdmmc.h:665
uint32_t VDD_W_CURR_MIN
max.
Definition: sdmmc.h:658
uint32_t COPY
copy flag [14]
Definition: sdmmc.h:645
uint32_t ERASE_BLK_EN
erase single block enable [46]
Definition: sdmmc.h:655
uint32_t reserved5
reserved [8]
Definition: sdmmc.h:640
uint32_t C_SIZE_MULT
device size multiplier [49:47]
Definition: sdmmc.h:656
uint32_t CCC
card command classes [95:84]
Definition: sdmmc.h:668
CSD register structure Version 2.0 and Version 3.0.
Definition: sdmmc.h:687
uint32_t WRITE_BL_LEN
max.
Definition: sdmmc.h:698
uint32_t reserved2
reserved [47]
Definition: sdmmc.h:705
uint32_t WP_GRP_ENABLE
write protect group enable [31]
Definition: sdmmc.h:701
uint32_t SECTOR_SIZE
erase sector size [45:39]
Definition: sdmmc.h:703
uint32_t TMP_WRITE_PROTECT
temporary write protection [12]
Definition: sdmmc.h:692
uint32_t FILE_FORMAT_GRP
File format group [15].
Definition: sdmmc.h:695
uint32_t reserved4
reserved [20:16]
Definition: sdmmc.h:696
uint32_t READ_BLK_MISALIGN
read block misalignment [77]
Definition: sdmmc.h:708
uint32_t PERM_WRITE_PROTECT
permanent write protection [13]
Definition: sdmmc.h:693
uint32_t WP_UPC
write protection until power cycle [9]
Definition: sdmmc.h:690
uint32_t TAAC
data read access-time-1 [119:112]
Definition: sdmmc.h:715
uint32_t DSR_IMP
DSR implemented [76].
Definition: sdmmc.h:707
uint32_t ERASE_BLK_EN
erase single block enable [46]
Definition: sdmmc.h:704
uint32_t READ_BL_LEN
max.
Definition: sdmmc.h:711
uint32_t CCC
card command classes [95:84]
Definition: sdmmc.h:712
uint32_t WRITE_BL_PARTIAL
partial blocks for write allowed [21]
Definition: sdmmc.h:697
uint32_t FILE_FORMAT
File format [11:10].
Definition: sdmmc.h:691
uint32_t CSD_CRC
CRC including End bit 1b [7:0].
Definition: sdmmc.h:688
uint32_t CSD_STRUCTURE
CSD structure [127:126].
Definition: sdmmc.h:717
uint32_t reserved3
reserved [30:29]
Definition: sdmmc.h:700
uint32_t reserved5
reserved [8]
Definition: sdmmc.h:689
uint32_t reserved1
reserved [125:120]
Definition: sdmmc.h:716
uint32_t WP_GRP_SIZE
write protect group size [38:32]
Definition: sdmmc.h:702
uint32_t COPY
copy flag [14]
Definition: sdmmc.h:694
uint32_t TRAN_SPEED
max.
Definition: sdmmc.h:713
uint32_t C_SIZE
device size v2.0 [69:48], v3.0 [75:48]
Definition: sdmmc.h:706
uint32_t WRITE_BLK_MISALIGN
write block misalignment [78]
Definition: sdmmc.h:709
uint32_t NSAC
data read access-time-2 in CLK cycles [111:104]
Definition: sdmmc.h:714
uint32_t READ_BL_PARTIAL
partial blocks for read allowed [79]
Definition: sdmmc.h:710
uint32_t R2W_FACTOR
write speed factor [28:26]
Definition: sdmmc.h:699
SDIO/SD/MMC device descriptor.
Definition: sdmmc.h:1269
bool init_done
Indicates whether the card is initialized (default false).
Definition: sdmmc.h:1365
uint16_t rca
Relative Card Address (RCA) of the SDIO/SD/MMC Card as determined during the initialization and ident...
Definition: sdmmc.h:1333
sdmmc_scr_t scr
SCR register of the SD Card, read during the initialization and identification procedure in the sdmmc...
Definition: sdmmc.h:1303
sdmmc_cid_t cid
CID register of the SD/MMC Card, read during the initialization and identification procedure in the s...
Definition: sdmmc.h:1295
bool s18v_allowed
Indicates whether the card supports the switching to 1.8V (default false).
Definition: sdmmc.h:1379
bool spi_mode
Indicates whether SPI mode is used by the SDIO/SD/MMC device (default false).
Definition: sdmmc.h:1386
uint32_t status
Last SDIO/SD/MMC Card status reported in R1 response.
Definition: sdmmc.h:1326
sdmmc_card_type_t type
Type of the SDIO/SD/MMC Card as identified during the initialization and identification procedure in ...
Definition: sdmmc.h:1340
const sdmmc_driver_t * driver
Low-level SDIO/SD/MMC peripheral driver.
Definition: sdmmc.h:1274
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:1287
sdmmc_csd_t csd
CSD register of the SD/MMC Card, read during the initialization and identification procedure in the s...
Definition: sdmmc.h:1311
sdmmc_bus_width_t bus_width
Data bus width supported by the SDIO/SD/MMC device (default SDMMC_BUS_WIDTH_1BIT).
Definition: sdmmc.h:1349
bool present
Indicates whether a card is present.
Definition: sdmmc.h:1358
bool s18v_support
Indicates whether the SDIO/SD/MMC peripheral supports the switching to 1.8V (default false).
Definition: sdmmc.h:1372
Low-level SDIO/SD/MMC peripheral driver.
Definition: sdmmc.h:956
void(* init)(sdmmc_dev_t *dev)
Basic initialization of the given SDIO/SD/MMC device.
Definition: sdmmc.h:975
Extended CSD (EXT_CSD) register structure (MMC only)
Definition: sdmmc.h:789
uint32_t SEC_COUNT
Sector Count [215:212].
Definition: sdmmc.h:790
uint8_t CSD_STRUCTURE
CSD Structure Version [194].
Definition: sdmmc.h:792
uint8_t CARD_TYPE
Card Type [196].
Definition: sdmmc.h:791
uint8_t BUS_WIDTH
Bus Width Mode [183].
Definition: sdmmc.h:793
SCR register structure (SD Memory Card only)
Definition: sdmmc.h:815
uint32_t reserved0
Reserved for manufacturer usage [31:0].
Definition: sdmmc.h:817
uint32_t SD_BUS_WIDTHS
DAT Bus widths supported [51:48].
Definition: sdmmc.h:827
uint32_t SCR_STRUCTURE
SCR Structure [63:60].
Definition: sdmmc.h:831
uint32_t SD_SECURITY
CPRM Security Support [54:52].
Definition: sdmmc.h:828
uint32_t SD_SPEC
SD Memory Card - Spec.
Definition: sdmmc.h:830
uint32_t DATA_STAT_AFTER_ERASE
Data status after erases [55].
Definition: sdmmc.h:829
uint32_t SD_SPEC3
Spec.
Definition: sdmmc.h:826
uint32_t SD_SPECX
Spec.
Definition: sdmmc.h:823
uint32_t EX_SECURITY
Extended Security Support [46:43].
Definition: sdmmc.h:825
uint32_t CMD_SUPPORT
Command Support bits [36:32].
Definition: sdmmc.h:821
uint32_t reserved37
Reserved [37].
Definition: sdmmc.h:822
uint32_t SD_SPEC4
Spec.
Definition: sdmmc.h:824
SD Status (SD Memory Card only)
Definition: sdmmc.h:533
uint16_t SD_CARD_TYPE
[495:480] Section 4.10.2, Table 4-44
Definition: sdmmc.h:537
uint8_t AU_SIZE
[431:428] Section 4.10.2.4, Table 4-47
Definition: sdmmc.h:546
uint32_t VSC_AU_SIZE
[377:368] Section 4.10.2.11, Table 4-56
Definition: sdmmc.h:536
uint8_t VIDEO_SPEED_CLASS
[391:384] Section 4.10.2.10, Table 4-54
Definition: sdmmc.h:541
uint32_t SIZE_OF_PROTECTED_AREA
[479:448] Section 4.10.2.1
Definition: sdmmc.h:534
uint8_t ERASE_TIMEOUT
[407:402] Section 4.10.2.6, Table 4-50
Definition: sdmmc.h:542
uint8_t PERFORMANCE_MOVE
[439:432] Section 4.10.2.3, Table 4-46
Definition: sdmmc.h:540
uint8_t ERASE_OFFSET
[401:400] Section 4.10.2.7, Table 4-51
Definition: sdmmc.h:543
uint8_t SECURED_MODE
[509] Section 4.10.2, Table 4-44
Definition: sdmmc.h:548
uint16_t ERASE_SIZE
[423:408] Section 4.10.2.5, Table 4-49
Definition: sdmmc.h:538
uint32_t SUS_ADDR
[367:346] Section 4.10.2.12, Table 4-57
Definition: sdmmc.h:535
uint8_t SPEED_CLASS
[447:440] Section 4.10.2.2, Table 4-45
Definition: sdmmc.h:539
uint8_t DAT_BUS_WIDTH
[511:510] Section 4.10.2, Table 4-44
Definition: sdmmc.h:547
uint8_t UHS_AU_SIZE
[395:392] Section 4.10.2.9, Table 4-3
Definition: sdmmc.h:545
uint8_t UHS_SPEED_GRADE
[399:396] Section 4.10.2.8, Table 4-52
Definition: sdmmc.h:544
Transfer descriptor.
Definition: sdmmc.h:898
sdmmc_xfer_type_t type
Type of the transfer.
Definition: sdmmc.h:899
uint32_t arg
Command argument used for the transfer.
Definition: sdmmc.h:903
uint16_t block_num
Number of blocks to be transferred, 1 for Byte transfer.
Definition: sdmmc.h:905
sdmmc_cmd_t cmd_idx
Command index used for the transfer.
Definition: sdmmc.h:901
uint16_t block_size
Size of a block or number of bytes for Byte transfer.
Definition: sdmmc.h:904
sdmmc_resp_t resp_type
Type of expected response for the transfer.
Definition: sdmmc.h:902
bool write
Indicate a write transfer.
Definition: sdmmc.h:900
A 16 bit integer in big endian aka network byte order.
Definition: byteorder.h:74
A 32 bit integer in big endian aka network byte order.
Definition: byteorder.h:84
SD/MMC Card status as structure.
Definition: sdmmc.h:477
uint32_t BLOCK_LEN_ERROR
[29] SD and MMC
Definition: sdmmc.h:504
uint32_t AKE_SEQ_ERROR
[3] SD only, Reserved in MMC
Definition: sdmmc.h:481
uint32_t SWITCH_ERROR
[7] MMC only, reserved in SD/SDIO
Definition: sdmmc.h:485
uint32_t OVERRUN
[17] MMC only, DEFERRED_RESPONSE in SD
Definition: sdmmc.h:492
uint32_t reserved4
[4] Reserved
Definition: sdmmc.h:482
uint32_t ERASE_SEQ_ERROR
[28] SD and MMC
Definition: sdmmc.h:503
uint32_t ILLEGAL_COMMAND
[22] SD/SDIO and MMC
Definition: sdmmc.h:497
uint32_t OUT_OF_RANGE
[31] SD/SDIO and MMC
Definition: sdmmc.h:506
uint32_t reserved2
[2] Reserved for appl.
Definition: sdmmc.h:480
uint32_t CC_ERROR
[20] SD and MMC
Definition: sdmmc.h:495
uint32_t CURRENT_STATE
[12:9] SD and MMC
Definition: sdmmc.h:487
uint32_t UNDERRUN
[18] MMC only, reserved in SD
Definition: sdmmc.h:493
uint32_t ERASE_RESET
[13] SD and MMC
Definition: sdmmc.h:488
uint32_t LOCK_UNLOCK_FAILED
[24] SD and MMC
Definition: sdmmc.h:499
uint32_t CARD_IS_LOCKED
[25] SD and MMC
Definition: sdmmc.h:500
uint32_t READY_FOR_DATA
[8] SD and MMC
Definition: sdmmc.h:486
uint32_t FX_EVENT
[6] SD only, Reserved in MMC
Definition: sdmmc.h:484
uint32_t COM_CRC_ERROR
[23] SD/SDIO and MMC
Definition: sdmmc.h:498
uint32_t ADDRESS_ERROR
[30] SD and MMC
Definition: sdmmc.h:505
uint32_t ERROR
[19] SD/SDIO and MMC
Definition: sdmmc.h:494
uint32_t ERASE_PARAM
[27] SD and MMC
Definition: sdmmc.h:502
uint32_t CARD_ECC_FAILED
[21] SD and MMC
Definition: sdmmc.h:496
uint32_t CSD_OVERWRITE
[16] SD (CSD), MMC (CSD and CID)
Definition: sdmmc.h:491
uint32_t reserved0
[1:0] Reserved for appl.
Definition: sdmmc.h:479
uint32_t WP_ERASE_SKIP
[15] SD and MMC
Definition: sdmmc.h:490
uint32_t WP_VIOLATION
[26] SD and MMC
Definition: sdmmc.h:501
uint32_t APP_CMD
[5] SD and MMC
Definition: sdmmc.h:483
uint32_t value
SD/MMC Card status as 32 bit value.
Definition: sdmmc.h:508
uint32_t CARD_ECC_DISABLED
[14] SD only, reserved in MMC
Definition: sdmmc.h:489
CID register structure (SD Memory and MMC Cards)
Definition: sdmmc.h:601
sdmmc_cid_mmc_t mmc
CID register of MMC.
Definition: sdmmc.h:603
sdmmc_cid_sd_t sd
CID register of SD Memory Cards.
Definition: sdmmc.h:602
CSD register (SD Memory Card and MMC)
Definition: sdmmc.h:769
sdmmc_csd_v1_t v1
CSD Version 1.0.
Definition: sdmmc.h:770
sdmmc_csd_mmc_t mmc
CSD Version for MMC.
Definition: sdmmc.h:772
sdmmc_csd_v2_t v2
CSD Version 2.0 and 3.0.
Definition: sdmmc.h:771
Unit helper macros.
#define MHZ(x)
A macro to return the Hz in x MHz.
Definition: units.h:49
#define KHZ(x)
A macro to return the Hz in x kHz.
Definition: units.h:44
Cross File Arrays.
#define XFA_USE_CONST(type, name)
Declare an external read-only cross-file array.
Definition: xfa.h:114