mmc.h 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192
  1. /*
  2. * Copyright (c) 2006-2023, RT-Thread Development Team
  3. *
  4. * SPDX-License-Identifier: Apache-2.0
  5. *
  6. * Change Logs:
  7. * Date Author Notes
  8. * 2015-06-15 hichard first version
  9. */
  10. #ifndef __MMC_H__
  11. #define __MMC_H__
  12. #include <rtthread.h>
  13. #include <drivers/mmcsd_host.h>
  14. #ifdef __cplusplus
  15. extern "C" {
  16. #endif
  17. /*
  18. * EXT_CSD fields
  19. */
  20. #define EXT_CSD_FLUSH_CACHE 32 /* W */
  21. #define EXT_CSD_CACHE_CTRL 33 /* R/W */
  22. #define EXT_CSD_POWER_OFF_NOTIFICATION 34 /* R/W */
  23. #define EXT_CSD_PACKED_FAILURE_INDEX 35 /* RO */
  24. #define EXT_CSD_PACKED_CMD_STATUS 36 /* RO */
  25. #define EXT_CSD_EXP_EVENTS_STATUS 54 /* RO, 2 bytes */
  26. #define EXT_CSD_EXP_EVENTS_CTRL 56 /* R/W, 2 bytes */
  27. #define EXT_CSD_DATA_SECTOR_SIZE 61 /* R */
  28. #define EXT_CSD_GP_SIZE_MULT 143 /* R/W */
  29. #define EXT_CSD_PARTITION_ATTRIBUTE 156 /* R/W */
  30. #define EXT_CSD_PARTITION_SUPPORT 160 /* RO */
  31. #define EXT_CSD_HPI_MGMT 161 /* R/W */
  32. #define EXT_CSD_RST_N_FUNCTION 162 /* R/W */
  33. #define EXT_CSD_BKOPS_EN 163 /* R/W */
  34. #define EXT_CSD_BKOPS_START 164 /* W */
  35. #define EXT_CSD_SANITIZE_START 165 /* W */
  36. #define EXT_CSD_WR_REL_PARAM 166 /* RO */
  37. #define EXT_CSD_RPMB_MULT 168 /* RO */
  38. #define EXT_CSD_BOOT_WP 173 /* R/W */
  39. #define EXT_CSD_ERASE_GROUP_DEF 175 /* R/W */
  40. #define EXT_CSD_PART_CONFIG 179 /* R/W */
  41. #define EXT_CSD_ERASED_MEM_CONT 181 /* RO */
  42. #define EXT_CSD_BUS_WIDTH 183 /* R/W */
  43. #define EXT_CSD_HS_TIMING 185 /* R/W */
  44. #define EXT_CSD_POWER_CLASS 187 /* R/W */
  45. #define EXT_CSD_REV 192 /* RO */
  46. #define EXT_CSD_STRUCTURE 194 /* RO */
  47. #define EXT_CSD_CARD_TYPE 196 /* RO */
  48. #define EXT_CSD_OUT_OF_INTERRUPT_TIME 198 /* RO */
  49. #define EXT_CSD_PART_SWITCH_TIME 199 /* RO */
  50. #define EXT_CSD_PWR_CL_52_195 200 /* RO */
  51. #define EXT_CSD_PWR_CL_26_195 201 /* RO */
  52. #define EXT_CSD_PWR_CL_52_360 202 /* RO */
  53. #define EXT_CSD_PWR_CL_26_360 203 /* RO */
  54. #define EXT_CSD_SEC_CNT 212 /* RO, 4 bytes */
  55. #define EXT_CSD_S_A_TIMEOUT 217 /* RO */
  56. #define EXT_CSD_REL_WR_SEC_C 222 /* RO */
  57. #define EXT_CSD_HC_WP_GRP_SIZE 221 /* RO */
  58. #define EXT_CSD_ERASE_TIMEOUT_MULT 223 /* RO */
  59. #define EXT_CSD_HC_ERASE_GRP_SIZE 224 /* RO */
  60. #define EXT_CSD_BOOT_MULT 226 /* RO */
  61. #define EXT_CSD_SEC_TRIM_MULT 229 /* RO */
  62. #define EXT_CSD_SEC_ERASE_MULT 230 /* RO */
  63. #define EXT_CSD_SEC_FEATURE_SUPPORT 231 /* RO */
  64. #define EXT_CSD_TRIM_MULT 232 /* RO */
  65. #define EXT_CSD_PWR_CL_200_195 236 /* RO */
  66. #define EXT_CSD_PWR_CL_200_360 237 /* RO */
  67. #define EXT_CSD_PWR_CL_DDR_52_195 238 /* RO */
  68. #define EXT_CSD_PWR_CL_DDR_52_360 239 /* RO */
  69. #define EXT_CSD_BKOPS_STATUS 246 /* RO */
  70. #define EXT_CSD_POWER_OFF_LONG_TIME 247 /* RO */
  71. #define EXT_CSD_GENERIC_CMD6_TIME 248 /* RO */
  72. #define EXT_CSD_CACHE_SIZE 249 /* RO, 4 bytes */
  73. #define EXT_CSD_PWR_CL_DDR_200_360 253 /* RO */
  74. #define EXT_CSD_TAG_UNIT_SIZE 498 /* RO */
  75. #define EXT_CSD_DATA_TAG_SUPPORT 499 /* RO */
  76. #define EXT_CSD_MAX_PACKED_WRITES 500 /* RO */
  77. #define EXT_CSD_MAX_PACKED_READS 501 /* RO */
  78. #define EXT_CSD_BKOPS_SUPPORT 502 /* RO */
  79. #define EXT_CSD_HPI_FEATURES 503 /* RO */
  80. /*
  81. * EXT_CSD field definitions
  82. */
  83. #define EXT_CSD_WR_REL_PARAM_EN (1<<2)
  84. #define EXT_CSD_BOOT_WP_B_PWR_WP_DIS (0x40)
  85. #define EXT_CSD_BOOT_WP_B_PERM_WP_DIS (0x10)
  86. #define EXT_CSD_BOOT_WP_B_PERM_WP_EN (0x04)
  87. #define EXT_CSD_BOOT_WP_B_PWR_WP_EN (0x01)
  88. #define EXT_CSD_PART_CONFIG_ACC_MASK (0x7)
  89. #define EXT_CSD_PART_CONFIG_ACC_BOOT0 (0x1)
  90. #define EXT_CSD_PART_CONFIG_ACC_RPMB (0x3)
  91. #define EXT_CSD_PART_CONFIG_ACC_GP0 (0x4)
  92. #define EXT_CSD_PART_SUPPORT_PART_EN (0x1)
  93. #define EXT_CSD_CMD_SET_NORMAL (1<<0)
  94. #define EXT_CSD_CMD_SET_SECURE (1<<1)
  95. #define EXT_CSD_CMD_SET_CPSECURE (1<<2)
  96. #define EXT_CSD_CARD_TYPE_HS_26 (1<<0) /* Card can run at 26MHz */
  97. #define EXT_CSD_CARD_TYPE_HS_52 (1<<1) /* Card can run at 52MHz */
  98. #define EXT_CSD_CARD_TYPE_HS (EXT_CSD_CARD_TYPE_HS_26 | \
  99. EXT_CSD_CARD_TYPE_HS_52)
  100. #define EXT_CSD_CARD_TYPE_DDR_1_8V (1<<2) /* Card can run at 52MHz */
  101. /* DDR mode @1.8V or 3V I/O */
  102. #define EXT_CSD_CARD_TYPE_DDR_1_2V (1<<3) /* Card can run at 52MHz */
  103. /* DDR mode @1.2V I/O */
  104. #define EXT_CSD_CARD_TYPE_DDR_52 (EXT_CSD_CARD_TYPE_DDR_1_8V \
  105. | EXT_CSD_CARD_TYPE_DDR_1_2V)
  106. #define EXT_CSD_CARD_TYPE_HS200_1_8V (1<<4) /* Card can run at 200MHz */
  107. #define EXT_CSD_CARD_TYPE_HS200_1_2V (1<<5) /* Card can run at 200MHz */
  108. /* SDR mode @1.2V I/O */
  109. #define EXT_CSD_CARD_TYPE_HS200 (EXT_CSD_CARD_TYPE_HS200_1_8V | \
  110. EXT_CSD_CARD_TYPE_HS200_1_2V)
  111. #define EXT_CSD_CARD_TYPE_HS400_1_8V (1<<6) /* Card can run at 200MHz DDR, 1.8V */
  112. #define EXT_CSD_CARD_TYPE_HS400_1_2V (1<<7) /* Card can run at 200MHz DDR, 1.2V */
  113. #define EXT_CSD_CARD_TYPE_HS400 (EXT_CSD_CARD_TYPE_HS400_1_8V | \
  114. EXT_CSD_CARD_TYPE_HS400_1_2V)
  115. #define EXT_CSD_BUS_WIDTH_1 0 /* Card is in 1 bit mode */
  116. #define EXT_CSD_BUS_WIDTH_4 1 /* Card is in 4 bit mode */
  117. #define EXT_CSD_BUS_WIDTH_8 2 /* Card is in 8 bit mode */
  118. #define EXT_CSD_DDR_BUS_WIDTH_4 5 /* Card is in 4 bit DDR mode */
  119. #define EXT_CSD_DDR_BUS_WIDTH_8 6 /* Card is in 8 bit DDR mode */
  120. #define EXT_CSD_TIMING_BC 0 /* Backwards compatility */
  121. #define EXT_CSD_TIMING_HS 1 /* High speed */
  122. #define EXT_CSD_TIMING_HS200 2 /* HS200 */
  123. #define EXT_CSD_TIMING_HS400 3 /* HS400 */
  124. #define EXT_CSD_SEC_ER_EN BIT(0)
  125. #define EXT_CSD_SEC_BD_BLK_EN BIT(2)
  126. #define EXT_CSD_SEC_GB_CL_EN BIT(4)
  127. #define EXT_CSD_SEC_SANITIZE BIT(6) /* v4.5 only */
  128. #define EXT_CSD_RST_N_EN_MASK 0x3
  129. #define EXT_CSD_RST_N_ENABLED 1 /* RST_n is enabled on card */
  130. #define EXT_CSD_NO_POWER_NOTIFICATION 0
  131. #define EXT_CSD_POWER_ON 1
  132. #define EXT_CSD_POWER_OFF_SHORT 2
  133. #define EXT_CSD_POWER_OFF_LONG 3
  134. #define EXT_CSD_PWR_CL_8BIT_MASK 0xF0 /* 8 bit PWR CLS */
  135. #define EXT_CSD_PWR_CL_4BIT_MASK 0x0F /* 8 bit PWR CLS */
  136. #define EXT_CSD_PWR_CL_8BIT_SHIFT 4
  137. #define EXT_CSD_PWR_CL_4BIT_SHIFT 0
  138. #define EXT_CSD_PACKED_EVENT_EN BIT(3)
  139. /*
  140. * EXCEPTION_EVENT_STATUS field
  141. */
  142. #define EXT_CSD_URGENT_BKOPS BIT(0)
  143. #define EXT_CSD_DYNCAP_NEEDED BIT(1)
  144. #define EXT_CSD_SYSPOOL_EXHAUSTED BIT(2)
  145. #define EXT_CSD_PACKED_FAILURE BIT(3)
  146. #define EXT_CSD_PACKED_GENERIC_ERROR BIT(0)
  147. #define EXT_CSD_PACKED_INDEXED_ERROR BIT(1)
  148. /*
  149. * BKOPS status level
  150. */
  151. #define EXT_CSD_BKOPS_LEVEL_2 0x2
  152. /*
  153. * MMC_SWITCH access modes
  154. */
  155. #define MMC_SWITCH_MODE_CMD_SET 0x00 /* Change the command set */
  156. #define MMC_SWITCH_MODE_SET_BITS 0x01 /* Set bits which are 1 in value */
  157. #define MMC_SWITCH_MODE_CLEAR_BITS 0x02 /* Clear bits which are 1 in value */
  158. #define MMC_SWITCH_MODE_WRITE_BYTE 0x03 /* Set target to value */
  159. /*
  160. * extern function
  161. */
  162. rt_err_t mmc_send_op_cond(struct rt_mmcsd_host *host, rt_uint32_t ocr, rt_uint32_t *rocr);
  163. rt_int32_t init_mmc(struct rt_mmcsd_host *host, rt_uint32_t ocr);
  164. #ifdef __cplusplus
  165. }
  166. #endif
  167. #endif