mmc.h 7.6 KB

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