blob: 4e6942fafdfe19d88a5ea5027fee4e7a70e089a5 [file] [log] [blame]
Jorge Ramirez-Ortiz766263c2018-09-23 09:39:56 +02001/*
Biju Das08d33082020-12-13 19:41:27 +00002 * Copyright (c) 2015-2020, Renesas Electronics Corporation. All rights reserved.
Jorge Ramirez-Ortiz766263c2018-09-23 09:39:56 +02003 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 */
6
Antonio Nino Diaz5eb88372018-11-08 10:20:19 +00007#ifndef EMMC_HAL_H
8#define EMMC_HAL_H
Jorge Ramirez-Ortiz766263c2018-09-23 09:39:56 +02009
Biju Das08d33082020-12-13 19:41:27 +000010/* memory card error/status types */
11#define HAL_MEMCARD_OUT_OF_RANGE 0x80000000L
12#define HAL_MEMCARD_ADDRESS_ERROR 0x40000000L
13#define HAL_MEMCARD_BLOCK_LEN_ERROR 0x20000000L
14#define HAL_MEMCARD_ERASE_SEQ_ERROR 0x10000000L
15#define HAL_MEMCARD_ERASE_PARAM 0x08000000L
16#define HAL_MEMCARD_WP_VIOLATION 0x04000000L
17#define HAL_MEMCARD_CARD_IS_LOCKED 0x02000000L
18#define HAL_MEMCARD_LOCK_UNLOCK_FAILED 0x01000000L
19#define HAL_MEMCARD_COM_CRC_ERROR 0x00800000L
20#define HAL_MEMCARD_ILEGAL_COMMAND 0x00400000L
21#define HAL_MEMCARD_CARD_ECC_FAILED 0x00200000L
22#define HAL_MEMCARD_CC_ERROR 0x00100000L
23#define HAL_MEMCARD_ERROR 0x00080000L
24#define HAL_MEMCARD_UNDERRUN 0x00040000L
25#define HAL_MEMCARD_OVERRUN 0x00020000L
26#define HAL_MEMCARD_CIDCSD_OVERWRITE 0x00010000L
27#define HAL_MEMCARD_WP_ERASE_SKIP 0x00008000L
28#define HAL_MEMCARD_CARD_ECC_DISABLED 0x00004000L
29#define HAL_MEMCARD_ERASE_RESET 0x00002000L
30#define HAL_MEMCARD_CARD_STATE 0x00001E00L
31#define HAL_MEMCARD_CARD_READY_FOR_DATA 0x00000100L
32#define HAL_MEMCARD_APP_CMD 0x00000020L
33#define HAL_MEMCARD_SWITCH_ERROR 0x00000080L
34#define HAL_MEMCARD_AKE_SEQ_ERROR 0x00000008L
35#define HAL_MEMCARD_NO_ERRORS 0x00000000L
Jorge Ramirez-Ortiz766263c2018-09-23 09:39:56 +020036
Biju Das08d33082020-12-13 19:41:27 +000037/* Memory card response types */
38#define HAL_MEMCARD_COMMAND_INDEX_MASK 0x0003f
Jorge Ramirez-Ortiz766263c2018-09-23 09:39:56 +020039
Biju Das08d33082020-12-13 19:41:27 +000040/* Type of the return value. */
Jorge Ramirez-Ortiz766263c2018-09-23 09:39:56 +020041typedef enum {
42 HAL_MEMCARD_FAIL = 0U,
43 HAL_MEMCARD_OK = 1U,
Biju Das08d33082020-12-13 19:41:27 +000044 HAL_MEMCARD_DMA_ALLOC_FAIL = 2U, /* DMA channel allocation failed */
45 HAL_MEMCARD_DMA_TRANSFER_FAIL = 3U, /* DMA transfer failed */
46 HAL_MEMCARD_CARD_STATUS_ERROR = 4U, /* card status non-masked error */
47 HAL_MEMCARD_CMD_TIMEOUT = 5U, /* Command timeout occurred */
48 HAL_MEMCARD_DATA_TIMEOUT = 6U, /* Data timeout occurred */
49 HAL_MEMCARD_CMD_CRC_ERROR = 7U, /* Command CRC error occurred */
50 HAL_MEMCARD_DATA_CRC_ERROR = 8U /* Data CRC error occurred */
Jorge Ramirez-Ortiz766263c2018-09-23 09:39:56 +020051} HAL_MEMCARD_RETURN;
52
Biju Das08d33082020-12-13 19:41:27 +000053/* memory access operation */
Jorge Ramirez-Ortiz766263c2018-09-23 09:39:56 +020054typedef enum {
Biju Das08d33082020-12-13 19:41:27 +000055 HAL_MEMCARD_READ = 0U, /* read */
56 HAL_MEMCARD_WRITE = 1U /* write */
Jorge Ramirez-Ortiz766263c2018-09-23 09:39:56 +020057} HAL_MEMCARD_OPERATION;
58
Biju Das08d33082020-12-13 19:41:27 +000059/* Type of data width on memorycard bus */
Jorge Ramirez-Ortiz766263c2018-09-23 09:39:56 +020060typedef enum {
61 HAL_MEMCARD_DATA_WIDTH_1_BIT = 0U,
62 HAL_MEMCARD_DATA_WIDTH_4_BIT = 1U,
63 HAL_MEMCARD_DATA_WIDTH_8_BIT = 2U
Biju Das08d33082020-12-13 19:41:27 +000064} HAL_MEMCARD_DATA_WIDTH; /* data (bus) width types */
Jorge Ramirez-Ortiz766263c2018-09-23 09:39:56 +020065
Biju Das08d33082020-12-13 19:41:27 +000066/* Presence of the memory card */
Jorge Ramirez-Ortiz766263c2018-09-23 09:39:56 +020067typedef enum {
68 HAL_MEMCARD_CARD_IS_IN = 0U,
69 HAL_MEMCARD_CARD_IS_OUT = 1U
70} HAL_MEMCARD_PRESENCE_STATUS; /* presence status of the memory card */
71
Biju Das08d33082020-12-13 19:41:27 +000072/* mode of data transfer */
Jorge Ramirez-Ortiz766263c2018-09-23 09:39:56 +020073typedef enum {
74 HAL_MEMCARD_DMA = 0U,
75 HAL_MEMCARD_NOT_DMA = 1U
76} HAL_MEMCARD_DATA_TRANSFER_MODE;
77
Biju Das08d33082020-12-13 19:41:27 +000078/* Memory card response types. */
Jorge Ramirez-Ortiz766263c2018-09-23 09:39:56 +020079typedef enum hal_memcard_response_type {
80 HAL_MEMCARD_RESPONSE_NONE = 0x00000U,
81 HAL_MEMCARD_RESPONSE_R1 = 0x00100U,
82 HAL_MEMCARD_RESPONSE_R1b = 0x00200U,
83 HAL_MEMCARD_RESPONSE_R2 = 0x00300U,
84 HAL_MEMCARD_RESPONSE_R3 = 0x00400U,
85 HAL_MEMCARD_RESPONSE_R4 = 0x00500U,
86 HAL_MEMCARD_RESPONSE_R5 = 0x00600U,
87 HAL_MEMCARD_RESPONSE_R6 = 0x00700U,
88 HAL_MEMCARD_RESPONSE_R7 = 0x00800U,
89 HAL_MEMCARD_RESPONSE_TYPE_MASK = 0x00f00U
90} HAL_MEMCARD_RESPONSE_TYPE;
91
Biju Das08d33082020-12-13 19:41:27 +000092/* Memory card command types. */
Jorge Ramirez-Ortiz766263c2018-09-23 09:39:56 +020093typedef enum hal_memcard_command_type {
94 HAL_MEMCARD_COMMAND_TYPE_BC = 0x00000U,
95 HAL_MEMCARD_COMMAND_TYPE_BCR = 0x01000U,
96 HAL_MEMCARD_COMMAND_TYPE_AC = 0x02000U,
97 HAL_MEMCARD_COMMAND_TYPE_ADTC_WRITE = 0x03000U,
98 HAL_MEMCARD_COMMAND_TYPE_ADTC_READ = 0x04000U,
99 HAL_MEMCARD_COMMAND_TYPE_MASK = 0x07000U
100} HAL_MEMCARD_COMMAND_TYPE;
101
Biju Das08d33082020-12-13 19:41:27 +0000102/* Type of memory card */
Jorge Ramirez-Ortiz766263c2018-09-23 09:39:56 +0200103typedef enum hal_memcard_command_card_type {
104 HAL_MEMCARD_COMMAND_CARD_TYPE_COMMON = 0x00000U,
105 HAL_MEMCARD_COMMAND_CARD_TYPE_MMC = 0x08000U,
106 HAL_MEMCARD_COMMAND_CARD_TYPE_SD = 0x10000U,
107 HAL_MEMCARD_COMMAND_CARD_TYPE_MASK = 0x18000U
108} HAL_MEMCARD_COMMAND_CARD_TYPE;
109
Biju Das08d33082020-12-13 19:41:27 +0000110/* Memory card application command. */
Jorge Ramirez-Ortiz766263c2018-09-23 09:39:56 +0200111typedef enum hal_memcard_command_app_norm {
112 HAL_MEMCARD_COMMAND_NORMAL = 0x00000U,
113 HAL_MEMCARD_COMMAND_APP = 0x20000U,
114 HAL_MEMCARD_COMMAND_APP_NORM_MASK = 0x20000U
115} HAL_MEMCARD_COMMAND_APP_NORM;
116
Biju Das08d33082020-12-13 19:41:27 +0000117/* Memory card command codes. */
Jorge Ramirez-Ortiz766263c2018-09-23 09:39:56 +0200118typedef enum {
119/* class 0 and class 1 */
Biju Das08d33082020-12-13 19:41:27 +0000120 /* CMD0 */
121 CMD0_GO_IDLE_STATE =
122 0U | (uint32_t)HAL_MEMCARD_RESPONSE_NONE |
123 (uint32_t)HAL_MEMCARD_COMMAND_TYPE_BC |
124 (uint32_t) HAL_MEMCARD_COMMAND_CARD_TYPE_COMMON |
125 (uint32_t)HAL_MEMCARD_COMMAND_NORMAL,
126 /* CMD1 */
127 CMD1_SEND_OP_COND =
128 1U | (uint32_t)HAL_MEMCARD_RESPONSE_R3 |
129 (uint32_t)HAL_MEMCARD_COMMAND_TYPE_BCR |
130 (uint32_t)HAL_MEMCARD_COMMAND_CARD_TYPE_MMC |
131 (uint32_t)HAL_MEMCARD_COMMAND_NORMAL,
132 /* CMD2 */
133 CMD2_ALL_SEND_CID_MMC =
134 2U | (uint32_t)HAL_MEMCARD_RESPONSE_R2 |
135 (uint32_t)HAL_MEMCARD_COMMAND_TYPE_BCR |
136 (uint32_t)HAL_MEMCARD_COMMAND_CARD_TYPE_MMC |
137 (uint32_t)HAL_MEMCARD_COMMAND_NORMAL,
Jorge Ramirez-Ortiz766263c2018-09-23 09:39:56 +0200138 CMD2_ALL_SEND_CID_SD =
Biju Das08d33082020-12-13 19:41:27 +0000139 2U | (uint32_t)HAL_MEMCARD_RESPONSE_R2 |
140 (uint32_t)HAL_MEMCARD_COMMAND_TYPE_BCR |
141 (uint32_t)HAL_MEMCARD_COMMAND_CARD_TYPE_SD |
142 (uint32_t)HAL_MEMCARD_COMMAND_NORMAL,
143 /* CMD3 */
144 CMD3_SET_RELATIVE_ADDR =
145 3U | (uint32_t)HAL_MEMCARD_RESPONSE_R1 |
146 (uint32_t)HAL_MEMCARD_COMMAND_TYPE_AC |
147 (uint32_t)HAL_MEMCARD_COMMAND_CARD_TYPE_MMC |
148 (uint32_t)HAL_MEMCARD_COMMAND_NORMAL,
Jorge Ramirez-Ortiz766263c2018-09-23 09:39:56 +0200149 CMD3_SEND_RELATIVE_ADDR =
Biju Das08d33082020-12-13 19:41:27 +0000150 3U | (uint32_t)HAL_MEMCARD_RESPONSE_R6 |
151 (uint32_t)HAL_MEMCARD_COMMAND_TYPE_AC |
152 (uint32_t)HAL_MEMCARD_COMMAND_CARD_TYPE_SD |
153 (uint32_t)HAL_MEMCARD_COMMAND_NORMAL,
154 /* CMD4 */
155 CMD4_SET_DSR =
156 4U | (uint32_t)HAL_MEMCARD_RESPONSE_NONE |
157 (uint32_t)HAL_MEMCARD_COMMAND_TYPE_BC |
158 (uint32_t)HAL_MEMCARD_COMMAND_CARD_TYPE_COMMON |
159 (uint32_t)HAL_MEMCARD_COMMAND_NORMAL,
160 /* CMD5 */
161 CMD5_SLEEP_AWAKE =
162 5U | (uint32_t)HAL_MEMCARD_RESPONSE_R1b |
163 (uint32_t)HAL_MEMCARD_COMMAND_TYPE_AC |
164 (uint32_t)HAL_MEMCARD_COMMAND_CARD_TYPE_MMC |
165 (uint32_t)HAL_MEMCARD_COMMAND_NORMAL,
166 /* CMD6 */
167 CMD6_SWITCH =
168 6U | (uint32_t)HAL_MEMCARD_RESPONSE_R1b |
169 (uint32_t)HAL_MEMCARD_COMMAND_TYPE_AC |
170 (uint32_t)HAL_MEMCARD_COMMAND_CARD_TYPE_MMC |
171 (uint32_t)HAL_MEMCARD_COMMAND_NORMAL,
Jorge Ramirez-Ortiz766263c2018-09-23 09:39:56 +0200172 CMD6_SWITCH_FUNC =
Biju Das08d33082020-12-13 19:41:27 +0000173 6U | (uint32_t)HAL_MEMCARD_RESPONSE_R1 |
174 (uint32_t)HAL_MEMCARD_COMMAND_TYPE_AC |
175 (uint32_t)HAL_MEMCARD_COMMAND_CARD_TYPE_SD |
176 (uint32_t)HAL_MEMCARD_COMMAND_NORMAL,
Jorge Ramirez-Ortiz766263c2018-09-23 09:39:56 +0200177 ACMD6_SET_BUS_WIDTH =
Biju Das08d33082020-12-13 19:41:27 +0000178 6U | (uint32_t)HAL_MEMCARD_RESPONSE_R1 |
179 (uint32_t)HAL_MEMCARD_COMMAND_TYPE_AC |
180 (uint32_t)HAL_MEMCARD_COMMAND_CARD_TYPE_SD |
181 (uint32_t)HAL_MEMCARD_COMMAND_APP,
182 /* CMD7 */
183 CMD7_SELECT_CARD =
184 7U | (uint32_t)HAL_MEMCARD_RESPONSE_R1 |
185 (uint32_t)HAL_MEMCARD_COMMAND_TYPE_AC |
186 (uint32_t)HAL_MEMCARD_COMMAND_CARD_TYPE_COMMON |
187 (uint32_t)HAL_MEMCARD_COMMAND_NORMAL,
188 /* CMD7(from Disconnected State to Programming State) */
189 CMD7_SELECT_CARD_PROG =
190 7U | (uint32_t)HAL_MEMCARD_RESPONSE_R1b |
191 (uint32_t)HAL_MEMCARD_COMMAND_TYPE_AC |
192 (uint32_t)HAL_MEMCARD_COMMAND_CARD_TYPE_COMMON |
193 (uint32_t)HAL_MEMCARD_COMMAND_NORMAL,
Jorge Ramirez-Ortiz766263c2018-09-23 09:39:56 +0200194 CMD7_DESELECT_CARD =
Biju Das08d33082020-12-13 19:41:27 +0000195 7U | (uint32_t)HAL_MEMCARD_RESPONSE_R1 |
196 (uint32_t)HAL_MEMCARD_COMMAND_TYPE_AC |
197 (uint32_t)HAL_MEMCARD_COMMAND_CARD_TYPE_COMMON |
198 (uint32_t)HAL_MEMCARD_COMMAND_NORMAL,
199 /* CMD8 */
200 CMD8_SEND_EXT_CSD =
201 8U | (uint32_t)HAL_MEMCARD_RESPONSE_R1 |
202 (uint32_t)HAL_MEMCARD_COMMAND_TYPE_ADTC_READ |
203 (uint32_t)HAL_MEMCARD_COMMAND_CARD_TYPE_MMC |
204 (uint32_t)HAL_MEMCARD_COMMAND_NORMAL,
Jorge Ramirez-Ortiz766263c2018-09-23 09:39:56 +0200205 CMD8_SEND_IF_COND =
Biju Das08d33082020-12-13 19:41:27 +0000206 8U | (uint32_t)HAL_MEMCARD_RESPONSE_R7 |
207 (uint32_t)HAL_MEMCARD_COMMAND_TYPE_BCR |
208 (uint32_t)HAL_MEMCARD_COMMAND_CARD_TYPE_SD |
209 (uint32_t)HAL_MEMCARD_COMMAND_NORMAL,
210 /* CMD9 */
211 CMD9_SEND_CSD =
212 9U | (uint32_t)HAL_MEMCARD_RESPONSE_R2 |
213 (uint32_t)HAL_MEMCARD_COMMAND_TYPE_AC |
214 (uint32_t)HAL_MEMCARD_COMMAND_CARD_TYPE_COMMON |
215 (uint32_t)HAL_MEMCARD_COMMAND_NORMAL,
216 /* CMD10 */
217 CMD10_SEND_CID =
218 10U | (uint32_t)HAL_MEMCARD_RESPONSE_R2 |
219 (uint32_t)HAL_MEMCARD_COMMAND_TYPE_AC |
220 (uint32_t)HAL_MEMCARD_COMMAND_CARD_TYPE_COMMON |
221 (uint32_t)HAL_MEMCARD_COMMAND_NORMAL,
222 /* CMD11 */
223 CMD11_READ_DAT_UNTIL_STOP =
224 11U | (uint32_t)HAL_MEMCARD_RESPONSE_R1 |
225 (uint32_t)HAL_MEMCARD_COMMAND_TYPE_ADTC_READ |
226 (uint32_t)HAL_MEMCARD_COMMAND_CARD_TYPE_SD |
227 (uint32_t)HAL_MEMCARD_COMMAND_NORMAL,
228 /* CMD12 */
229 CMD12_STOP_TRANSMISSION =
230 12U | (uint32_t)HAL_MEMCARD_RESPONSE_R1 |
231 (uint32_t)HAL_MEMCARD_COMMAND_TYPE_AC |
232 (uint32_t)HAL_MEMCARD_COMMAND_CARD_TYPE_COMMON |
233 (uint32_t)HAL_MEMCARD_COMMAND_NORMAL,
234 /* CMD12(R1b : write case) */
235 CMD12_STOP_TRANSMISSION_WRITE =
236 12U | (uint32_t)HAL_MEMCARD_RESPONSE_R1b |
237 (uint32_t)HAL_MEMCARD_COMMAND_TYPE_AC |
238 (uint32_t)HAL_MEMCARD_COMMAND_CARD_TYPE_COMMON |
239 (uint32_t)HAL_MEMCARD_COMMAND_NORMAL,
240 /* CMD13 */
241 CMD13_SEND_STATUS =
242 13U | (uint32_t)HAL_MEMCARD_RESPONSE_R1 |
243 (uint32_t)HAL_MEMCARD_COMMAND_TYPE_AC |
244 (uint32_t)HAL_MEMCARD_COMMAND_CARD_TYPE_COMMON |
245 (uint32_t)HAL_MEMCARD_COMMAND_NORMAL,
Jorge Ramirez-Ortiz766263c2018-09-23 09:39:56 +0200246 ACMD13_SD_STATUS =
Biju Das08d33082020-12-13 19:41:27 +0000247 13U | (uint32_t)HAL_MEMCARD_RESPONSE_R1 |
248 (uint32_t)HAL_MEMCARD_COMMAND_TYPE_ADTC_READ |
249 (uint32_t)HAL_MEMCARD_COMMAND_CARD_TYPE_SD |
250 (uint32_t)HAL_MEMCARD_COMMAND_APP,
251 /* CMD14 */
252 CMD14_BUSTEST_R =
253 14U | (uint32_t)HAL_MEMCARD_RESPONSE_R1 |
254 (uint32_t)HAL_MEMCARD_COMMAND_TYPE_ADTC_READ |
255 (uint32_t)HAL_MEMCARD_COMMAND_CARD_TYPE_MMC |
256 (uint32_t)HAL_MEMCARD_COMMAND_NORMAL,
257 /* CMD15 */
258 CMD15_GO_INACTIVE_STATE =
259 15U | (uint32_t)HAL_MEMCARD_RESPONSE_NONE |
260 (uint32_t)HAL_MEMCARD_COMMAND_TYPE_AC |
261 (uint32_t)HAL_MEMCARD_COMMAND_CARD_TYPE_COMMON |
262 (uint32_t)HAL_MEMCARD_COMMAND_NORMAL,
Jorge Ramirez-Ortiz766263c2018-09-23 09:39:56 +0200263
264/* class 2 */
Biju Das08d33082020-12-13 19:41:27 +0000265 /* CMD16 */
266 CMD16_SET_BLOCKLEN =
267 16U | (uint32_t)HAL_MEMCARD_RESPONSE_R1 |
268 (uint32_t)HAL_MEMCARD_COMMAND_TYPE_AC |
269 (uint32_t)HAL_MEMCARD_COMMAND_CARD_TYPE_COMMON |
270 (uint32_t)HAL_MEMCARD_COMMAND_NORMAL,
271 /* CMD17 */
272 CMD17_READ_SINGLE_BLOCK =
273 17U | (uint32_t)HAL_MEMCARD_RESPONSE_R1 |
274 (uint32_t)HAL_MEMCARD_COMMAND_TYPE_ADTC_READ |
275 (uint32_t)HAL_MEMCARD_COMMAND_CARD_TYPE_COMMON |
276 (uint32_t)HAL_MEMCARD_COMMAND_NORMAL,
277 /* CMD18 */
278 CMD18_READ_MULTIPLE_BLOCK =
279 18U | (uint32_t)HAL_MEMCARD_RESPONSE_R1 |
280 (uint32_t)HAL_MEMCARD_COMMAND_TYPE_ADTC_READ |
281 (uint32_t)HAL_MEMCARD_COMMAND_CARD_TYPE_COMMON |
282 (uint32_t)HAL_MEMCARD_COMMAND_NORMAL,
283 /* CMD19 */
284 CMD19_BUS_TEST_W =
285 19U | (uint32_t)HAL_MEMCARD_RESPONSE_R1 |
286 (uint32_t)HAL_MEMCARD_COMMAND_TYPE_ADTC_WRITE |
287 (uint32_t)HAL_MEMCARD_COMMAND_CARD_TYPE_MMC |
288 (uint32_t)HAL_MEMCARD_COMMAND_NORMAL,
Jorge Ramirez-Ortiz766263c2018-09-23 09:39:56 +0200289
290/* class 3 */
Biju Das08d33082020-12-13 19:41:27 +0000291 /* CMD20 */
292 CMD20_WRITE_DAT_UNTIL_STOP =
293 20U | (uint32_t)HAL_MEMCARD_RESPONSE_R1 |
294 (uint32_t)HAL_MEMCARD_COMMAND_TYPE_ADTC_WRITE |
295 (uint32_t)HAL_MEMCARD_COMMAND_CARD_TYPE_MMC |
296 (uint32_t)HAL_MEMCARD_COMMAND_NORMAL,
297 /* CMD21 */
298 CMD21 = 21U,
299 /* CMD22 */
300 CMD22 = 22U,
Jorge Ramirez-Ortiz766263c2018-09-23 09:39:56 +0200301 ACMD22_SEND_NUM_WR_BLOCKS =
Biju Das08d33082020-12-13 19:41:27 +0000302 22U | (uint32_t)HAL_MEMCARD_RESPONSE_R1 |
303 (uint32_t)HAL_MEMCARD_COMMAND_TYPE_AC |
304 (uint32_t)HAL_MEMCARD_COMMAND_CARD_TYPE_SD |
305 (uint32_t)HAL_MEMCARD_COMMAND_APP,
Jorge Ramirez-Ortiz766263c2018-09-23 09:39:56 +0200306
307/* class 4 */
Biju Das08d33082020-12-13 19:41:27 +0000308 /* CMD23 */
309 CMD23_SET_BLOCK_COUNT =
310 23U | (uint32_t)HAL_MEMCARD_RESPONSE_R1 |
311 (uint32_t)HAL_MEMCARD_COMMAND_TYPE_AC |
312 (uint32_t)HAL_MEMCARD_COMMAND_CARD_TYPE_MMC |
313 (uint32_t)HAL_MEMCARD_COMMAND_NORMAL,
Jorge Ramirez-Ortiz766263c2018-09-23 09:39:56 +0200314 ACMD23_SET_WR_BLK_ERASE_COUNT =
Biju Das08d33082020-12-13 19:41:27 +0000315 23U | (uint32_t)HAL_MEMCARD_RESPONSE_R1 |
316 (uint32_t)HAL_MEMCARD_COMMAND_TYPE_AC |
317 (uint32_t)HAL_MEMCARD_COMMAND_CARD_TYPE_SD |
318 (uint32_t)HAL_MEMCARD_COMMAND_APP,
319 /* CMD24 */
320 CMD24_WRITE_BLOCK =
321 24U | (uint32_t)HAL_MEMCARD_RESPONSE_R1 |
322 (uint32_t)HAL_MEMCARD_COMMAND_TYPE_ADTC_WRITE |
323 (uint32_t)HAL_MEMCARD_COMMAND_CARD_TYPE_COMMON |
324 (uint32_t)HAL_MEMCARD_COMMAND_NORMAL,
325 /* CMD25 */
326 CMD25_WRITE_MULTIPLE_BLOCK =
327 25U | (uint32_t)HAL_MEMCARD_RESPONSE_R1 |
328 (uint32_t)HAL_MEMCARD_COMMAND_TYPE_ADTC_WRITE |
329 (uint32_t)HAL_MEMCARD_COMMAND_CARD_TYPE_COMMON |
330 (uint32_t)HAL_MEMCARD_COMMAND_NORMAL,
331 /* CMD26 */
332 CMD26_PROGRAM_CID =
333 26U | (uint32_t)HAL_MEMCARD_RESPONSE_R1 |
334 (uint32_t)HAL_MEMCARD_COMMAND_TYPE_ADTC_WRITE |
335 (uint32_t)HAL_MEMCARD_COMMAND_CARD_TYPE_MMC |
336 (uint32_t)HAL_MEMCARD_COMMAND_NORMAL,
337 /* CMD27 */
338 CMD27_PROGRAM_CSD =
339 27U | (uint32_t)HAL_MEMCARD_RESPONSE_R1 |
340 (uint32_t)HAL_MEMCARD_COMMAND_TYPE_ADTC_WRITE |
341 (uint32_t)HAL_MEMCARD_COMMAND_CARD_TYPE_COMMON |
342 (uint32_t)HAL_MEMCARD_COMMAND_NORMAL,
Jorge Ramirez-Ortiz766263c2018-09-23 09:39:56 +0200343
344/* class 6 */
Biju Das08d33082020-12-13 19:41:27 +0000345 /* CMD28 */
346 CMD28_SET_WRITE_PROT =
347 28U | (uint32_t)HAL_MEMCARD_RESPONSE_R1b |
348 (uint32_t)HAL_MEMCARD_COMMAND_TYPE_AC |
349 (uint32_t)HAL_MEMCARD_COMMAND_CARD_TYPE_COMMON |
350 (uint32_t)HAL_MEMCARD_COMMAND_NORMAL,
351 /* CMD29 */
352 CMD29_CLR_WRITE_PROT =
353 29U | (uint32_t)HAL_MEMCARD_RESPONSE_R1b |
354 (uint32_t)HAL_MEMCARD_COMMAND_TYPE_AC |
355 (uint32_t)HAL_MEMCARD_COMMAND_CARD_TYPE_COMMON |
356 (uint32_t)HAL_MEMCARD_COMMAND_NORMAL,
357 /* CMD30 */
358 CMD30_SEND_WRITE_PROT =
359 30U | (uint32_t)HAL_MEMCARD_RESPONSE_R1 |
360 (uint32_t)HAL_MEMCARD_COMMAND_TYPE_ADTC_READ |
361 (uint32_t)HAL_MEMCARD_COMMAND_CARD_TYPE_COMMON |
362 (uint32_t)HAL_MEMCARD_COMMAND_NORMAL,
363 /* CMD31 */
364 CMD30_SEND_WRITE_PROT_TYPE =
365 31U | (uint32_t)HAL_MEMCARD_RESPONSE_R1 |
366 (uint32_t)HAL_MEMCARD_COMMAND_TYPE_ADTC_READ |
367 (uint32_t)HAL_MEMCARD_COMMAND_CARD_TYPE_COMMON |
368 (uint32_t)HAL_MEMCARD_COMMAND_NORMAL,
Jorge Ramirez-Ortiz766263c2018-09-23 09:39:56 +0200369
370/* class 5 */
Biju Das08d33082020-12-13 19:41:27 +0000371 /* CMD32 */
372 CMD32_ERASE_WR_BLK_START =
373 32U | (uint32_t)HAL_MEMCARD_RESPONSE_R1 |
374 (uint32_t)HAL_MEMCARD_COMMAND_TYPE_AC |
375 (uint32_t)HAL_MEMCARD_COMMAND_CARD_TYPE_SD |
376 (uint32_t)HAL_MEMCARD_COMMAND_NORMAL,
377 /* CMD33 */
378 CMD33_ERASE_WR_BLK_END =
379 33U | (uint32_t)HAL_MEMCARD_RESPONSE_R1 |
380 (uint32_t)HAL_MEMCARD_COMMAND_TYPE_AC |
381 (uint32_t)HAL_MEMCARD_COMMAND_CARD_TYPE_SD |
382 (uint32_t)HAL_MEMCARD_COMMAND_NORMAL,
383 /* CMD34 */
384 CMD34 = 34U,
385 /* CMD35 */
386 CMD35_ERASE_GROUP_START =
387 35U | (uint32_t)HAL_MEMCARD_RESPONSE_R1 |
388 (uint32_t)HAL_MEMCARD_COMMAND_TYPE_AC |
389 (uint32_t)HAL_MEMCARD_COMMAND_CARD_TYPE_MMC |
390 (uint32_t)HAL_MEMCARD_COMMAND_NORMAL,
391 /* CMD36 */
392 CMD36_ERASE_GROUP_END =
393 36U | (uint32_t)HAL_MEMCARD_RESPONSE_R1 |
394 (uint32_t)HAL_MEMCARD_COMMAND_TYPE_AC |
395 (uint32_t)HAL_MEMCARD_COMMAND_CARD_TYPE_MMC |
396 (uint32_t)HAL_MEMCARD_COMMAND_NORMAL,
397 /* CMD37 */
398 CMD37 = 37U,
399 /* CMD38 */
400 CMD38_ERASE =
401 38U | (uint32_t)HAL_MEMCARD_RESPONSE_R1b |
402 (uint32_t)HAL_MEMCARD_COMMAND_TYPE_AC |
403 (uint32_t)HAL_MEMCARD_COMMAND_CARD_TYPE_COMMON |
404 (uint32_t)HAL_MEMCARD_COMMAND_NORMAL,
Jorge Ramirez-Ortiz766263c2018-09-23 09:39:56 +0200405
406/* class 9 */
Biju Das08d33082020-12-13 19:41:27 +0000407 /* CMD39 */
408 CMD39_FASTIO =
409 39U | (uint32_t)HAL_MEMCARD_RESPONSE_R4 |
410 (uint32_t)HAL_MEMCARD_COMMAND_TYPE_AC |
411 (uint32_t)HAL_MEMCARD_COMMAND_CARD_TYPE_MMC |
412 (uint32_t)HAL_MEMCARD_COMMAND_NORMAL,
413 /* CMD40 */
414 CMD40_GO_IRQSTATE =
415 40U | (uint32_t)HAL_MEMCARD_RESPONSE_R5 |
416 (uint32_t)HAL_MEMCARD_COMMAND_TYPE_BCR |
417 (uint32_t)HAL_MEMCARD_COMMAND_CARD_TYPE_MMC |
418 (uint32_t)HAL_MEMCARD_COMMAND_NORMAL,
419 /* CMD41 */
420 CMD41 = 41,
Jorge Ramirez-Ortiz766263c2018-09-23 09:39:56 +0200421 ACMD41_SD_SEND_OP_COND =
Biju Das08d33082020-12-13 19:41:27 +0000422 41U | (uint32_t)HAL_MEMCARD_RESPONSE_R3 |
423 (uint32_t)HAL_MEMCARD_COMMAND_TYPE_BCR |
424 (uint32_t)HAL_MEMCARD_COMMAND_CARD_TYPE_SD |
425 (uint32_t)HAL_MEMCARD_COMMAND_APP,
Jorge Ramirez-Ortiz766263c2018-09-23 09:39:56 +0200426
427/* class 7 */
Biju Das08d33082020-12-13 19:41:27 +0000428 /* CMD42 */
429 CMD42_LOCK_UNLOCK =
430 42U | (uint32_t)HAL_MEMCARD_RESPONSE_R1 |
431 (uint32_t)HAL_MEMCARD_COMMAND_TYPE_ADTC_WRITE |
432 (uint32_t)HAL_MEMCARD_COMMAND_CARD_TYPE_COMMON |
433 (uint32_t)HAL_MEMCARD_COMMAND_NORMAL,
Jorge Ramirez-Ortiz766263c2018-09-23 09:39:56 +0200434 ACMD42_SET_CLR_CARD_DETECT =
Biju Das08d33082020-12-13 19:41:27 +0000435 42U | (uint32_t)HAL_MEMCARD_RESPONSE_R1 |
436 (uint32_t)HAL_MEMCARD_COMMAND_TYPE_AC |
437 (uint32_t)HAL_MEMCARD_COMMAND_CARD_TYPE_SD |
438 (uint32_t)HAL_MEMCARD_COMMAND_APP,
439 CMD43 = 43U, /* CMD43 */
440 CMD44 = 44U, /* CMD44 */
441 CMD45 = 45U, /* CMD45 */
442 CMD46 = 46U, /* CMD46 */
443 CMD47 = 47U, /* CMD47 */
444 CMD48 = 48U, /* CMD48 */
445 CMD49 = 49U, /* CMD49 */
446 CMD50 = 50U, /* CMD50 */
447 CMD51 = 51U, /* CMD51 */
Jorge Ramirez-Ortiz766263c2018-09-23 09:39:56 +0200448 ACMD51_SEND_SCR =
Biju Das08d33082020-12-13 19:41:27 +0000449 51U | (uint32_t)HAL_MEMCARD_RESPONSE_R1 |
450 (uint32_t)HAL_MEMCARD_COMMAND_TYPE_ADTC_READ |
451 (uint32_t)HAL_MEMCARD_COMMAND_CARD_TYPE_SD |
452 (uint32_t)HAL_MEMCARD_COMMAND_APP,
453 CMD52 = 52U, /* CMD52 */
454 CMD53 = 53U, /* CMD53 */
455 CMD54 = 54U, /* CMD54 */
Jorge Ramirez-Ortiz766263c2018-09-23 09:39:56 +0200456
457/* class 8 */
Biju Das08d33082020-12-13 19:41:27 +0000458 /* CMD55 */
459 CMD55_APP_CMD =
460 55U | (uint32_t)HAL_MEMCARD_RESPONSE_R1 |
461 (uint32_t)HAL_MEMCARD_COMMAND_TYPE_AC |
462 (uint32_t)HAL_MEMCARD_COMMAND_CARD_TYPE_COMMON |
463 (uint32_t)HAL_MEMCARD_COMMAND_NORMAL,
464 /* CMD56 */
465 CMD56_GEN_CMD =
466 56U | (uint32_t)HAL_MEMCARD_RESPONSE_R1 |
467 (uint32_t)HAL_MEMCARD_COMMAND_TYPE_ADTC_WRITE |
468 (uint32_t)HAL_MEMCARD_COMMAND_CARD_TYPE_COMMON |
469 (uint32_t)HAL_MEMCARD_COMMAND_NORMAL,
470 CMD57 = 57U, /* CMD57 */
471 CMD58 = 58U, /* CMD58 */
472 CMD59 = 59U, /* CMD59 */
473 CMD60 = 60U, /* CMD60 */
474 CMD61 = 61U, /* CMD61 */
475 CMD62 = 62U, /* CMD62 */
476 CMD63 = 63U /* CMD63 */
Jorge Ramirez-Ortiz766263c2018-09-23 09:39:56 +0200477} HAL_MEMCARD_COMMAND;
478
Biju Das08d33082020-12-13 19:41:27 +0000479/*
480 * Configuration structure from HAL layer.
Jorge Ramirez-Ortiz766263c2018-09-23 09:39:56 +0200481 *
482 * If some field is not available it should be filled with 0xFF.
Biju Das08d33082020-12-13 19:41:27 +0000483 * The API version is 32-bit unsigned integer telling the version of the API.
484 * The integer is divided to four sections which each can be treated as a 8-bit
485 * unsigned number:
486 * Bits 31-24 make the most significant part of the version number. This number
487 * starts from 1 i.e. the second version of the API will be 0x02xxxxxx. This
488 * number changes only, if the API itself changes so much that it is not
489 * compatible anymore with older releases.
490 * Bits 23-16 API minor version number. For example API version 2.1 would be
491 * 0x0201xxxx.
492 * Bits 15-8 are the number of the year when release is done. The 0 is year
493 * 2000, 1 is year 2001 and so on
494 * Bits 7- are the week number when release is done. First full week of the
495 * year is 1
Jorge Ramirez-Ortiz766263c2018-09-23 09:39:56 +0200496 *
Biju Das08d33082020-12-13 19:41:27 +0000497 * Example: let's assume that release 2.1 is done on week 10 year 2008
498 * the version will get the value 0x0201080A
Jorge Ramirez-Ortiz766263c2018-09-23 09:39:56 +0200499 */
500typedef struct {
Biju Das08d33082020-12-13 19:41:27 +0000501 /*
502 * Version of the chipset API implementation
503 *
504 * bits [31:24] API specification major version number.<br>
505 * bits [23:16] API specification minor version number.<br>
506 * bits [15:8] API implementation year. (2000 = 0, 2001 = 1, ...)
507 * bits [7:0] API implementation week.
508 * Example: API spec version 4.0, implementation w46 2008 => 0x0400082E
509 */
Jorge Ramirez-Ortiz766263c2018-09-23 09:39:56 +0200510 uint32_t api_version;
511
Biju Das08d33082020-12-13 19:41:27 +0000512 /* maximum block count which can be transferred at once */
Jorge Ramirez-Ortiz766263c2018-09-23 09:39:56 +0200513 uint32_t max_block_count;
514
Elyes Haouas2be03c02023-02-13 09:14:48 +0100515 /* maximum clock frequency in Hz supported by HW */
Jorge Ramirez-Ortiz766263c2018-09-23 09:39:56 +0200516 uint32_t max_clock_freq;
517
Biju Das08d33082020-12-13 19:41:27 +0000518 /* maximum data bus width supported by HW */
Jorge Ramirez-Ortiz766263c2018-09-23 09:39:56 +0200519 uint16_t max_data_width;
520
Biju Das08d33082020-12-13 19:41:27 +0000521 /* Is high-speed mode supported by HW (yes=1, no=0) */
Jorge Ramirez-Ortiz766263c2018-09-23 09:39:56 +0200522 uint8_t hs_mode_supported;
523
Biju Das08d33082020-12-13 19:41:27 +0000524 /* Is memory card removable (yes=1, no=0) */
Jorge Ramirez-Ortiz766263c2018-09-23 09:39:56 +0200525 uint8_t card_removable;
526
527} HAL_MEMCARD_HW_CONF;
528
Biju Das08d33082020-12-13 19:41:27 +0000529/* Configuration structure to HAL layer. */
Jorge Ramirez-Ortiz766263c2018-09-23 09:39:56 +0200530typedef struct {
Biju Das08d33082020-12-13 19:41:27 +0000531 /* how many times to try after fail, for instance sending command */
Jorge Ramirez-Ortiz766263c2018-09-23 09:39:56 +0200532 uint32_t retries_after_fail;
533} HAL_MEMCARD_INIT_CONF;
534
Antonio Nino Diaz5eb88372018-11-08 10:20:19 +0000535#endif /* EMMC_HAL_H */