Subversion Repositories LedShow

Rev

Rev 2 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 mjames 1
/**
2
  ******************************************************************************
3
  * @file    stm32f1xx_hal_mmc.h
4
  * @author  MCD Application Team
5
  * @brief   Header file of MMC HAL module.
6
  ******************************************************************************
7
  * @attention
8
  *
9 mjames 9
  * <h2><center>&copy; Copyright (c) 2018 STMicroelectronics.
10
  * All rights reserved.</center></h2>
2 mjames 11
  *
9 mjames 12
  * This software component is licensed by ST under BSD 3-Clause license,
13
  * the "License"; You may not use this file except in compliance with the
14
  * License. You may obtain a copy of the License at:
15
  *                       opensource.org/licenses/BSD-3-Clause
2 mjames 16
  *
17
  ******************************************************************************
18
  */
19
 
20
/* Define to prevent recursive inclusion -------------------------------------*/
9 mjames 21
#ifndef STM32F1xx_HAL_MMC_H
22
#define STM32F1xx_HAL_MMC_H
2 mjames 23
 
9 mjames 24
#if defined(SDIO)
25
 
2 mjames 26
#ifdef __cplusplus
27
 extern "C" {
28
#endif
29
 
30
/* Includes ------------------------------------------------------------------*/
31
#include "stm32f1xx_ll_sdmmc.h"
32
 
33
/** @addtogroup STM32F1xx_HAL_Driver
34
  * @{
35
  */
36
 
9 mjames 37
/** @addtogroup MMC
2 mjames 38
  * @{
39
  */
40
 
41
/* Exported types ------------------------------------------------------------*/
42
/** @defgroup MMC_Exported_Types MMC Exported Types
43
  * @{
44
  */
45
 
46
/** @defgroup MMC_Exported_Types_Group1 MMC State enumeration structure
47
  * @{
48
  */  
49
typedef enum
50
{
9 mjames 51
  HAL_MMC_STATE_RESET                  = ((uint32_t)0x00000000U),  /*!< MMC not yet initialized or disabled  */
52
  HAL_MMC_STATE_READY                  = ((uint32_t)0x00000001U),  /*!< MMC initialized and ready for use    */
53
  HAL_MMC_STATE_TIMEOUT                = ((uint32_t)0x00000002U),  /*!< MMC Timeout state                    */
54
  HAL_MMC_STATE_BUSY                   = ((uint32_t)0x00000003U),  /*!< MMC process ongoing                  */
55
  HAL_MMC_STATE_PROGRAMMING            = ((uint32_t)0x00000004U),  /*!< MMC Programming State                */
56
  HAL_MMC_STATE_RECEIVING              = ((uint32_t)0x00000005U),  /*!< MMC Receinving State                 */
57
  HAL_MMC_STATE_TRANSFER               = ((uint32_t)0x00000006U),  /*!< MMC Transfert State                  */
58
  HAL_MMC_STATE_ERROR                  = ((uint32_t)0x0000000FU)   /*!< MMC is in error state                */
2 mjames 59
}HAL_MMC_StateTypeDef;
60
/**
61
  * @}
62
  */
63
 
64
/** @defgroup MMC_Exported_Types_Group2 MMC Card State enumeration structure
65
  * @{
66
  */  
9 mjames 67
typedef uint32_t HAL_MMC_CardStateTypeDef;
68
 
69
#define HAL_MMC_CARD_READY          0x00000001U  /*!< Card state is ready                     */
70
#define HAL_MMC_CARD_IDENTIFICATION 0x00000002U  /*!< Card is in identification state         */
71
#define HAL_MMC_CARD_STANDBY        0x00000003U  /*!< Card is in standby state                */
72
#define HAL_MMC_CARD_TRANSFER       0x00000004U  /*!< Card is in transfer state               */
73
#define HAL_MMC_CARD_SENDING        0x00000005U  /*!< Card is sending an operation            */
74
#define HAL_MMC_CARD_RECEIVING      0x00000006U  /*!< Card is receiving operation information */
75
#define HAL_MMC_CARD_PROGRAMMING    0x00000007U  /*!< Card is in programming state            */
76
#define HAL_MMC_CARD_DISCONNECTED   0x00000008U  /*!< Card is disconnected                    */
77
#define HAL_MMC_CARD_ERROR          0x000000FFU  /*!< Card response Error                     */
2 mjames 78
/**
79
  * @}
80
  */
81
 
82
/** @defgroup MMC_Exported_Types_Group3 MMC Handle Structure definition  
83
  * @{
84
  */
85
#define MMC_InitTypeDef      SDIO_InitTypeDef 
86
#define MMC_TypeDef          SDIO_TypeDef
87
 
88
/**
89
  * @brief  MMC Card Information Structure definition
90
  */
91
typedef struct
92
{
93
  uint32_t CardType;                     /*!< Specifies the card Type                         */
94
 
95
  uint32_t Class;                        /*!< Specifies the class of the card class           */
96
 
97
  uint32_t RelCardAdd;                   /*!< Specifies the Relative Card Address             */
98
 
99
  uint32_t BlockNbr;                     /*!< Specifies the Card Capacity in blocks           */
100
 
101
  uint32_t BlockSize;                    /*!< Specifies one block size in bytes               */
102
 
103
  uint32_t LogBlockNbr;                  /*!< Specifies the Card logical Capacity in blocks   */
104
 
105
  uint32_t LogBlockSize;                 /*!< Specifies logical block size in bytes           */
106
 
107
}HAL_MMC_CardInfoTypeDef;
108
 
109
/**
110
  * @brief  MMC handle Structure definition
111
  */
9 mjames 112
#if defined (USE_HAL_MMC_REGISTER_CALLBACKS) && (USE_HAL_MMC_REGISTER_CALLBACKS == 1U)
113
typedef struct __MMC_HandleTypeDef
114
#else
2 mjames 115
typedef struct
9 mjames 116
#endif /* USE_HAL_MMC_REGISTER_CALLBACKS */
2 mjames 117
{
9 mjames 118
  MMC_TypeDef                  *Instance;        /*!< MMC registers base address           */
2 mjames 119
 
120
  MMC_InitTypeDef              Init;             /*!< MMC required parameters              */
121
 
122
  HAL_LockTypeDef              Lock;             /*!< MMC locking object                   */
123
 
9 mjames 124
  uint8_t                      *pTxBuffPtr;      /*!< Pointer to MMC Tx transfer Buffer    */
2 mjames 125
 
126
  uint32_t                     TxXferSize;       /*!< MMC Tx Transfer size                 */
127
 
9 mjames 128
  uint8_t                      *pRxBuffPtr;      /*!< Pointer to MMC Rx transfer Buffer    */
2 mjames 129
 
130
  uint32_t                     RxXferSize;       /*!< MMC Rx Transfer size                 */
131
 
132
  __IO uint32_t                Context;          /*!< MMC transfer context                 */
133
 
134
  __IO HAL_MMC_StateTypeDef    State;            /*!< MMC card State                       */
135
 
136
  __IO uint32_t                ErrorCode;        /*!< MMC Card Error codes                 */  
137
 
138
  DMA_HandleTypeDef            *hdmarx;          /*!< MMC Rx DMA handle parameters         */
139
 
140
  DMA_HandleTypeDef            *hdmatx;          /*!< MMC Tx DMA handle parameters         */
141
 
142
  HAL_MMC_CardInfoTypeDef      MmcCard;          /*!< MMC Card information                 */
9 mjames 143
 
2 mjames 144
  uint32_t                     CSD[4U];          /*!< MMC card specific data table         */
145
 
146
  uint32_t                     CID[4U];          /*!< MMC card identification number table */
147
 
9 mjames 148
#if defined (USE_HAL_MMC_REGISTER_CALLBACKS) && (USE_HAL_MMC_REGISTER_CALLBACKS == 1U)
149
  void (* TxCpltCallback)                 (struct __MMC_HandleTypeDef *hmmc);
150
  void (* RxCpltCallback)                 (struct __MMC_HandleTypeDef *hmmc);
151
  void (* ErrorCallback)                  (struct __MMC_HandleTypeDef *hmmc);
152
  void (* AbortCpltCallback)              (struct __MMC_HandleTypeDef *hmmc);
153
 
154
  void (* MspInitCallback)                (struct __MMC_HandleTypeDef *hmmc);
155
  void (* MspDeInitCallback)              (struct __MMC_HandleTypeDef *hmmc);
156
#endif  
2 mjames 157
}MMC_HandleTypeDef;
158
 
159
/**
160
  * @}
161
  */
162
 
163
/** @defgroup MMC_Exported_Types_Group4 Card Specific Data: CSD Register
164
  * @{
165
  */
166
typedef struct
167
{
168
  __IO uint8_t  CSDStruct;            /*!< CSD structure                         */
169
  __IO uint8_t  SysSpecVersion;       /*!< System specification version          */
170
  __IO uint8_t  Reserved1;            /*!< Reserved                              */
171
  __IO uint8_t  TAAC;                 /*!< Data read access time 1               */
172
  __IO uint8_t  NSAC;                 /*!< Data read access time 2 in CLK cycles */
173
  __IO uint8_t  MaxBusClkFrec;        /*!< Max. bus clock frequency              */
174
  __IO uint16_t CardComdClasses;      /*!< Card command classes                  */
175
  __IO uint8_t  RdBlockLen;           /*!< Max. read data block length           */
176
  __IO uint8_t  PartBlockRead;        /*!< Partial blocks for read allowed       */
177
  __IO uint8_t  WrBlockMisalign;      /*!< Write block misalignment              */
178
  __IO uint8_t  RdBlockMisalign;      /*!< Read block misalignment               */
179
  __IO uint8_t  DSRImpl;              /*!< DSR implemented                       */
180
  __IO uint8_t  Reserved2;            /*!< Reserved                              */
181
  __IO uint32_t DeviceSize;           /*!< Device Size                           */
182
  __IO uint8_t  MaxRdCurrentVDDMin;   /*!< Max. read current @ VDD min           */
183
  __IO uint8_t  MaxRdCurrentVDDMax;   /*!< Max. read current @ VDD max           */
184
  __IO uint8_t  MaxWrCurrentVDDMin;   /*!< Max. write current @ VDD min          */
185
  __IO uint8_t  MaxWrCurrentVDDMax;   /*!< Max. write current @ VDD max          */
186
  __IO uint8_t  DeviceSizeMul;        /*!< Device size multiplier                */
187
  __IO uint8_t  EraseGrSize;          /*!< Erase group size                      */
188
  __IO uint8_t  EraseGrMul;           /*!< Erase group size multiplier           */
189
  __IO uint8_t  WrProtectGrSize;      /*!< Write protect group size              */
190
  __IO uint8_t  WrProtectGrEnable;    /*!< Write protect group enable            */
191
  __IO uint8_t  ManDeflECC;           /*!< Manufacturer default ECC              */
192
  __IO uint8_t  WrSpeedFact;          /*!< Write speed factor                    */
193
  __IO uint8_t  MaxWrBlockLen;        /*!< Max. write data block length          */
194
  __IO uint8_t  WriteBlockPaPartial;  /*!< Partial blocks for write allowed      */
195
  __IO uint8_t  Reserved3;            /*!< Reserved                              */
196
  __IO uint8_t  ContentProtectAppli;  /*!< Content protection application        */
9 mjames 197
  __IO uint8_t  FileFormatGroup;      /*!< File format group                     */
2 mjames 198
  __IO uint8_t  CopyFlag;             /*!< Copy flag (OTP)                       */
199
  __IO uint8_t  PermWrProtect;        /*!< Permanent write protection            */
200
  __IO uint8_t  TempWrProtect;        /*!< Temporary write protection            */
201
  __IO uint8_t  FileFormat;           /*!< File format                           */
202
  __IO uint8_t  ECC;                  /*!< ECC code                              */
203
  __IO uint8_t  CSD_CRC;              /*!< CSD CRC                               */
204
  __IO uint8_t  Reserved4;            /*!< Always 1                              */
205
 
206
}HAL_MMC_CardCSDTypeDef;
207
/**
208
  * @}
209
  */
210
 
211
/** @defgroup MMC_Exported_Types_Group5 Card Identification Data: CID Register
212
  * @{
213
  */
214
typedef struct
215
{
216
  __IO uint8_t  ManufacturerID;  /*!< Manufacturer ID       */
217
  __IO uint16_t OEM_AppliID;     /*!< OEM/Application ID    */
218
  __IO uint32_t ProdName1;       /*!< Product Name part1    */
219
  __IO uint8_t  ProdName2;       /*!< Product Name part2    */
220
  __IO uint8_t  ProdRev;         /*!< Product Revision      */
221
  __IO uint32_t ProdSN;          /*!< Product Serial Number */
222
  __IO uint8_t  Reserved1;       /*!< Reserved1             */
223
  __IO uint16_t ManufactDate;    /*!< Manufacturing Date    */
224
  __IO uint8_t  CID_CRC;         /*!< CID CRC               */
225
  __IO uint8_t  Reserved2;       /*!< Always 1              */
226
 
227
}HAL_MMC_CardCIDTypeDef;
228
/**
229
  * @}
230
  */
231
 
9 mjames 232
#if defined (USE_HAL_MMC_REGISTER_CALLBACKS) && (USE_HAL_MMC_REGISTER_CALLBACKS == 1U)
233
/** @defgroup MMC_Exported_Types_Group6 MMC Callback ID enumeration definition
2 mjames 234
  * @{
235
  */
9 mjames 236
typedef enum
2 mjames 237
{
9 mjames 238
  HAL_MMC_TX_CPLT_CB_ID                 = 0x00U,  /*!< MMC Tx Complete Callback ID                     */
239
  HAL_MMC_RX_CPLT_CB_ID                 = 0x01U,  /*!< MMC Rx Complete Callback ID                     */
240
  HAL_MMC_ERROR_CB_ID                   = 0x02U,  /*!< MMC Error Callback ID                           */
241
  HAL_MMC_ABORT_CB_ID                   = 0x03U,  /*!< MMC Abort Callback ID                           */
2 mjames 242
 
9 mjames 243
  HAL_MMC_MSP_INIT_CB_ID                = 0x10U,  /*!< MMC MspInit Callback ID                         */
244
  HAL_MMC_MSP_DEINIT_CB_ID              = 0x11U   /*!< MMC MspDeInit Callback ID                       */
245
}HAL_MMC_CallbackIDTypeDef;
2 mjames 246
/**
247
  * @}
248
  */
249
 
9 mjames 250
/** @defgroup MMC_Exported_Types_Group7 MMC Callback pointer definition
251
  * @{
252
  */
253
typedef void (*pMMC_CallbackTypeDef)           (MMC_HandleTypeDef *hmmc);
2 mjames 254
/**
255
  * @}
256
  */
9 mjames 257
#endif
258
/**
259
  * @}
260
  */
2 mjames 261
 
262
/* Exported constants --------------------------------------------------------*/
263
/** @defgroup MMC_Exported_Constants Exported Constants
264
  * @{
265
  */
266
 
9 mjames 267
#define MMC_BLOCKSIZE   ((uint32_t)512U) /*!< Block size is 512 bytes */
2 mjames 268
 
269
/** @defgroup MMC_Exported_Constansts_Group1 MMC Error status enumeration Structure definition
270
  * @{
271
  */  
272
#define HAL_MMC_ERROR_NONE                     SDMMC_ERROR_NONE                    /*!< No error                                                      */
273
#define HAL_MMC_ERROR_CMD_CRC_FAIL             SDMMC_ERROR_CMD_CRC_FAIL            /*!< Command response received (but CRC check failed)              */
274
#define HAL_MMC_ERROR_DATA_CRC_FAIL            SDMMC_ERROR_DATA_CRC_FAIL           /*!< Data block sent/received (CRC check failed)                   */
275
#define HAL_MMC_ERROR_CMD_RSP_TIMEOUT          SDMMC_ERROR_CMD_RSP_TIMEOUT         /*!< Command response timeout                                      */
276
#define HAL_MMC_ERROR_DATA_TIMEOUT             SDMMC_ERROR_DATA_TIMEOUT            /*!< Data timeout                                                  */
277
#define HAL_MMC_ERROR_TX_UNDERRUN              SDMMC_ERROR_TX_UNDERRUN             /*!< Transmit FIFO underrun                                        */
278
#define HAL_MMC_ERROR_RX_OVERRUN               SDMMC_ERROR_RX_OVERRUN              /*!< Receive FIFO overrun                                          */
279
#define HAL_MMC_ERROR_ADDR_MISALIGNED          SDMMC_ERROR_ADDR_MISALIGNED         /*!< Misaligned address                                            */
280
#define HAL_MMC_ERROR_BLOCK_LEN_ERR            SDMMC_ERROR_BLOCK_LEN_ERR           /*!< Transferred block length is not allowed for the card or the 
281
                                                                                       number of transferred bytes does not match the block length   */
282
#define HAL_MMC_ERROR_ERASE_SEQ_ERR            SDMMC_ERROR_ERASE_SEQ_ERR           /*!< An error in the sequence of erase command occurs              */
283
#define HAL_MMC_ERROR_BAD_ERASE_PARAM          SDMMC_ERROR_BAD_ERASE_PARAM         /*!< An invalid selection for erase groups                         */
284
#define HAL_MMC_ERROR_WRITE_PROT_VIOLATION     SDMMC_ERROR_WRITE_PROT_VIOLATION    /*!< Attempt to program a write protect block                      */
285
#define HAL_MMC_ERROR_LOCK_UNLOCK_FAILED       SDMMC_ERROR_LOCK_UNLOCK_FAILED      /*!< Sequence or password error has been detected in unlock 
286
                                                                                       command or if there was an attempt to access a locked card    */
287
#define HAL_MMC_ERROR_COM_CRC_FAILED           SDMMC_ERROR_COM_CRC_FAILED          /*!< CRC check of the previous command failed                      */
288
#define HAL_MMC_ERROR_ILLEGAL_CMD              SDMMC_ERROR_ILLEGAL_CMD             /*!< Command is not legal for the card state                       */
289
#define HAL_MMC_ERROR_CARD_ECC_FAILED          SDMMC_ERROR_CARD_ECC_FAILED         /*!< Card internal ECC was applied but failed to correct the data  */
290
#define HAL_MMC_ERROR_CC_ERR                   SDMMC_ERROR_CC_ERR                  /*!< Internal card controller error                                */
291
#define HAL_MMC_ERROR_GENERAL_UNKNOWN_ERR      SDMMC_ERROR_GENERAL_UNKNOWN_ERR     /*!< General or unknown error                                      */
292
#define HAL_MMC_ERROR_STREAM_READ_UNDERRUN     SDMMC_ERROR_STREAM_READ_UNDERRUN    /*!< The card could not sustain data reading in stream rmode       */
293
#define HAL_MMC_ERROR_STREAM_WRITE_OVERRUN     SDMMC_ERROR_STREAM_WRITE_OVERRUN    /*!< The card could not sustain data programming in stream mode    */
294
#define HAL_MMC_ERROR_CID_CSD_OVERWRITE        SDMMC_ERROR_CID_CSD_OVERWRITE       /*!< CID/CSD overwrite error                                       */
295
#define HAL_MMC_ERROR_WP_ERASE_SKIP            SDMMC_ERROR_WP_ERASE_SKIP           /*!< Only partial address space was erased                         */
296
#define HAL_MMC_ERROR_CARD_ECC_DISABLED        SDMMC_ERROR_CARD_ECC_DISABLED       /*!< Command has been executed without using internal ECC          */
297
#define HAL_MMC_ERROR_ERASE_RESET              SDMMC_ERROR_ERASE_RESET             /*!< Erase sequence was cleared before executing because an out 
298
                                                                                       of erase sequence command was received                        */
299
#define HAL_MMC_ERROR_AKE_SEQ_ERR              SDMMC_ERROR_AKE_SEQ_ERR             /*!< Error in sequence of authentication                           */
300
#define HAL_MMC_ERROR_INVALID_VOLTRANGE        SDMMC_ERROR_INVALID_VOLTRANGE       /*!< Error in case of invalid voltage range                        */        
301
#define HAL_MMC_ERROR_ADDR_OUT_OF_RANGE        SDMMC_ERROR_ADDR_OUT_OF_RANGE       /*!< Error when addressed block is out of range                    */        
302
#define HAL_MMC_ERROR_REQUEST_NOT_APPLICABLE   SDMMC_ERROR_REQUEST_NOT_APPLICABLE  /*!< Error when command request is not applicable                  */  
303
#define HAL_MMC_ERROR_PARAM                    SDMMC_ERROR_INVALID_PARAMETER       /*!< the used parameter is not valid                               */  
304
#define HAL_MMC_ERROR_UNSUPPORTED_FEATURE      SDMMC_ERROR_UNSUPPORTED_FEATURE     /*!< Error when feature is not insupported                         */
305
#define HAL_MMC_ERROR_BUSY                     SDMMC_ERROR_BUSY                    /*!< Error when transfer process is busy                           */ 
306
#define HAL_MMC_ERROR_DMA                      SDMMC_ERROR_DMA                     /*!< Error while DMA transfer                                      */
307
#define HAL_MMC_ERROR_TIMEOUT                  SDMMC_ERROR_TIMEOUT                 /*!< Timeout error                                                 */
9 mjames 308
 
309
#if defined (USE_HAL_MMC_REGISTER_CALLBACKS) && (USE_HAL_MMC_REGISTER_CALLBACKS == 1U)
310
#define HAL_MMC_ERROR_INVALID_CALLBACK         SDMMC_ERROR_INVALID_PARAMETER       /*!< Invalid callback error                                        */
311
#endif
2 mjames 312
/**
313
  * @}
314
  */
315
 
9 mjames 316
/** @defgroup MMC_Exported_Constansts_Group2 MMC context enumeration
2 mjames 317
  * @{
318
  */
9 mjames 319
#define   MMC_CONTEXT_NONE                 ((uint32_t)0x00000000U)  /*!< None                             */
320
#define   MMC_CONTEXT_READ_SINGLE_BLOCK    ((uint32_t)0x00000001U)  /*!< Read single block operation      */
321
#define   MMC_CONTEXT_READ_MULTIPLE_BLOCK  ((uint32_t)0x00000002U)  /*!< Read multiple blocks operation   */
322
#define   MMC_CONTEXT_WRITE_SINGLE_BLOCK   ((uint32_t)0x00000010U)  /*!< Write single block operation     */
323
#define   MMC_CONTEXT_WRITE_MULTIPLE_BLOCK ((uint32_t)0x00000020U)  /*!< Write multiple blocks operation  */
324
#define   MMC_CONTEXT_IT                   ((uint32_t)0x00000008U)  /*!< Process in Interrupt mode        */
325
#define   MMC_CONTEXT_DMA                  ((uint32_t)0x00000080U)  /*!< Process in DMA mode              */
326
 
2 mjames 327
/**
328
  * @}
329
  */
330
 
331
/** @defgroup MMC_Exported_Constansts_Group3 MMC Voltage mode
332
  * @{
333
  */
334
/**
335
  * @brief
336
  */
337
#define MMC_HIGH_VOLTAGE_RANGE         0x80FF8000U  /*!< VALUE OF ARGUMENT            */
338
#define MMC_DUAL_VOLTAGE_RANGE         0x80FF8080U  /*!< VALUE OF ARGUMENT            */
339
#define eMMC_HIGH_VOLTAGE_RANGE        0xC0FF8000U  /*!< for eMMC > 2Gb sector mode   */
340
#define eMMC_DUAL_VOLTAGE_RANGE        0xC0FF8080U  /*!< for eMMC > 2Gb sector mode   */
341
#define MMC_INVALID_VOLTAGE_RANGE      0x0001FF01U 
342
/**
343
  * @}
344
  */
345
 
346
/** @defgroup MMC_Exported_Constansts_Group4 MMC Memory Cards
347
  * @{
348
  */
9 mjames 349
#define  MMC_LOW_CAPACITY_CARD     ((uint32_t)0x00000000U)   /*!< MMC Card Capacity <=2Gbytes   */
350
#define  MMC_HIGH_CAPACITY_CARD    ((uint32_t)0x00000001U)   /*!< MMC Card Capacity >2Gbytes and <2Tbytes   */
351
 
2 mjames 352
/**
353
  * @}
354
  */
355
 
356
/**
357
  * @}
358
  */
359
 
360
/* Exported macro ------------------------------------------------------------*/
361
/** @defgroup MMC_Exported_macros MMC Exported Macros
362
 *  @brief macros to handle interrupts and specific clock configurations
363
 * @{
364
 */
9 mjames 365
/** @brief Reset MMC handle state.
366
  * @param  __HANDLE__ : MMC handle.
367
  * @retval None
368
  */
369
#if defined (USE_HAL_MMC_REGISTER_CALLBACKS) && (USE_HAL_MMC_REGISTER_CALLBACKS == 1U)
370
#define __HAL_MMC_RESET_HANDLE_STATE(__HANDLE__)           do {                                              \
371
                                                               (__HANDLE__)->State = HAL_MMC_STATE_RESET; \
372
                                                               (__HANDLE__)->MspInitCallback = NULL;       \
373
                                                               (__HANDLE__)->MspDeInitCallback = NULL;     \
374
                                                             } while(0)
375
#else
376
#define __HAL_MMC_RESET_HANDLE_STATE(__HANDLE__)           ((__HANDLE__)->State = HAL_MMC_STATE_RESET)
377
#endif
2 mjames 378
 
379
/**
380
  * @brief  Enable the MMC device.
381
  * @retval None
382
  */
383
#define __HAL_MMC_ENABLE(__HANDLE__) __SDIO_ENABLE((__HANDLE__)->Instance)
384
 
385
/**
386
  * @brief  Disable the MMC device.
387
  * @retval None
388
  */
389
#define __HAL_MMC_DISABLE(__HANDLE__) __SDIO_DISABLE((__HANDLE__)->Instance)
390
 
391
/**
392
  * @brief  Enable the SDMMC DMA transfer.
393
  * @retval None
394
  */
395
#define __HAL_MMC_DMA_ENABLE(__HANDLE__) __SDIO_DMA_ENABLE((__HANDLE__)->Instance)
396
 
397
/**
398
  * @brief  Disable the SDMMC DMA transfer.
399
  * @retval None
400
  */
401
#define __HAL_MMC_DMA_DISABLE(__HANDLE__)  __SDIO_DMA_DISABLE((__HANDLE__)->Instance)
402
 
403
/**
404
  * @brief  Enable the MMC device interrupt.
405
  * @param  __HANDLE__: MMC Handle  
406
  * @param  __INTERRUPT__: specifies the SDMMC interrupt sources to be enabled.
407
  *         This parameter can be one or a combination of the following values:
408
  *            @arg SDIO_IT_CCRCFAIL: Command response received (CRC check failed) interrupt
409
  *            @arg SDIO_IT_DCRCFAIL: Data block sent/received (CRC check failed) interrupt
410
  *            @arg SDIO_IT_CTIMEOUT: Command response timeout interrupt
411
  *            @arg SDIO_IT_DTIMEOUT: Data timeout interrupt
412
  *            @arg SDIO_IT_TXUNDERR: Transmit FIFO underrun error interrupt
413
  *            @arg SDIO_IT_RXOVERR:  Received FIFO overrun error interrupt
414
  *            @arg SDIO_IT_CMDREND:  Command response received (CRC check passed) interrupt
415
  *            @arg SDIO_IT_CMDSENT:  Command sent (no response required) interrupt
9 mjames 416
  *            @arg SDIO_IT_DATAEND:  Data end (data counter, DATACOUNT, is zero) interrupt
2 mjames 417
  *            @arg SDIO_IT_DBCKEND:  Data block sent/received (CRC check passed) interrupt
418
  *            @arg SDIO_IT_CMDACT:   Command transfer in progress interrupt
419
  *            @arg SDIO_IT_TXACT:    Data transmit in progress interrupt
420
  *            @arg SDIO_IT_RXACT:    Data receive in progress interrupt
421
  *            @arg SDIO_IT_TXFIFOHE: Transmit FIFO Half Empty interrupt
422
  *            @arg SDIO_IT_RXFIFOHF: Receive FIFO Half Full interrupt
423
  *            @arg SDIO_IT_TXFIFOF:  Transmit FIFO full interrupt
424
  *            @arg SDIO_IT_RXFIFOF:  Receive FIFO full interrupt
425
  *            @arg SDIO_IT_TXFIFOE:  Transmit FIFO empty interrupt
426
  *            @arg SDIO_IT_RXFIFOE:  Receive FIFO empty interrupt
427
  *            @arg SDIO_IT_TXDAVL:   Data available in transmit FIFO interrupt
428
  *            @arg SDIO_IT_RXDAVL:   Data available in receive FIFO interrupt
429
  *            @arg SDIO_IT_SDIOIT:   SD I/O interrupt received interrupt
430
  * @retval None
431
  */
432
#define __HAL_MMC_ENABLE_IT(__HANDLE__, __INTERRUPT__) __SDIO_ENABLE_IT((__HANDLE__)->Instance, (__INTERRUPT__))
433
 
434
/**
435
  * @brief  Disable the MMC device interrupt.
436
  * @param  __HANDLE__: MMC Handle  
437
  * @param  __INTERRUPT__: specifies the SDMMC interrupt sources to be disabled.
438
  *          This parameter can be one or a combination of the following values:
439
  *            @arg SDIO_IT_CCRCFAIL: Command response received (CRC check failed) interrupt
440
  *            @arg SDIO_IT_DCRCFAIL: Data block sent/received (CRC check failed) interrupt
441
  *            @arg SDIO_IT_CTIMEOUT: Command response timeout interrupt
442
  *            @arg SDIO_IT_DTIMEOUT: Data timeout interrupt
443
  *            @arg SDIO_IT_TXUNDERR: Transmit FIFO underrun error interrupt
444
  *            @arg SDIO_IT_RXOVERR:  Received FIFO overrun error interrupt
445
  *            @arg SDIO_IT_CMDREND:  Command response received (CRC check passed) interrupt
446
  *            @arg SDIO_IT_CMDSENT:  Command sent (no response required) interrupt
9 mjames 447
  *            @arg SDIO_IT_DATAEND:  Data end (data counter, DATACOUNT, is zero) interrupt
2 mjames 448
  *            @arg SDIO_IT_DBCKEND:  Data block sent/received (CRC check passed) interrupt
449
  *            @arg SDIO_IT_CMDACT:   Command transfer in progress interrupt
450
  *            @arg SDIO_IT_TXACT:    Data transmit in progress interrupt
451
  *            @arg SDIO_IT_RXACT:    Data receive in progress interrupt
452
  *            @arg SDIO_IT_TXFIFOHE: Transmit FIFO Half Empty interrupt
453
  *            @arg SDIO_IT_RXFIFOHF: Receive FIFO Half Full interrupt
454
  *            @arg SDIO_IT_TXFIFOF:  Transmit FIFO full interrupt
455
  *            @arg SDIO_IT_RXFIFOF:  Receive FIFO full interrupt
456
  *            @arg SDIO_IT_TXFIFOE:  Transmit FIFO empty interrupt
457
  *            @arg SDIO_IT_RXFIFOE:  Receive FIFO empty interrupt
458
  *            @arg SDIO_IT_TXDAVL:   Data available in transmit FIFO interrupt
459
  *            @arg SDIO_IT_RXDAVL:   Data available in receive FIFO interrupt
460
  *            @arg SDIO_IT_SDIOIT:   SD I/O interrupt received interrupt  
461
  * @retval None
462
  */
463
#define __HAL_MMC_DISABLE_IT(__HANDLE__, __INTERRUPT__) __SDIO_DISABLE_IT((__HANDLE__)->Instance, (__INTERRUPT__))
464
 
465
/**
466
  * @brief  Check whether the specified MMC flag is set or not.
467
  * @param  __HANDLE__: MMC Handle  
468
  * @param  __FLAG__: specifies the flag to check.
469
  *          This parameter can be one of the following values:
470
  *            @arg SDIO_FLAG_CCRCFAIL: Command response received (CRC check failed)
471
  *            @arg SDIO_FLAG_DCRCFAIL: Data block sent/received (CRC check failed)
472
  *            @arg SDIO_FLAG_CTIMEOUT: Command response timeout
473
  *            @arg SDIO_FLAG_DTIMEOUT: Data timeout
474
  *            @arg SDIO_FLAG_TXUNDERR: Transmit FIFO underrun error
475
  *            @arg SDIO_FLAG_RXOVERR:  Received FIFO overrun error
476
  *            @arg SDIO_FLAG_CMDREND:  Command response received (CRC check passed)
477
  *            @arg SDIO_FLAG_CMDSENT:  Command sent (no response required)
9 mjames 478
  *            @arg SDIO_FLAG_DATAEND:  Data end (data counter, DATACOUNT, is zero)
2 mjames 479
  *            @arg SDIO_FLAG_DBCKEND:  Data block sent/received (CRC check passed)
480
  *            @arg SDIO_FLAG_CMDACT:   Command transfer in progress
481
  *            @arg SDIO_FLAG_TXACT:    Data transmit in progress
482
  *            @arg SDIO_FLAG_RXACT:    Data receive in progress
483
  *            @arg SDIO_FLAG_TXFIFOHE: Transmit FIFO Half Empty
484
  *            @arg SDIO_FLAG_RXFIFOHF: Receive FIFO Half Full
485
  *            @arg SDIO_FLAG_TXFIFOF:  Transmit FIFO full
486
  *            @arg SDIO_FLAG_RXFIFOF:  Receive FIFO full
487
  *            @arg SDIO_FLAG_TXFIFOE:  Transmit FIFO empty
488
  *            @arg SDIO_FLAG_RXFIFOE:  Receive FIFO empty
489
  *            @arg SDIO_FLAG_TXDAVL:   Data available in transmit FIFO
490
  *            @arg SDIO_FLAG_RXDAVL:   Data available in receive FIFO
491
  *            @arg SDIO_FLAG_SDIOIT:   SD I/O interrupt received
492
  * @retval The new state of MMC FLAG (SET or RESET).
493
  */
494
#define __HAL_MMC_GET_FLAG(__HANDLE__, __FLAG__) __SDIO_GET_FLAG((__HANDLE__)->Instance, (__FLAG__))
495
 
496
/**
497
  * @brief  Clear the MMC's pending flags.
498
  * @param  __HANDLE__: MMC Handle  
499
  * @param  __FLAG__: specifies the flag to clear.  
500
  *          This parameter can be one or a combination of the following values:
501
  *            @arg SDIO_FLAG_CCRCFAIL: Command response received (CRC check failed)
502
  *            @arg SDIO_FLAG_DCRCFAIL: Data block sent/received (CRC check failed)
503
  *            @arg SDIO_FLAG_CTIMEOUT: Command response timeout
504
  *            @arg SDIO_FLAG_DTIMEOUT: Data timeout
505
  *            @arg SDIO_FLAG_TXUNDERR: Transmit FIFO underrun error
506
  *            @arg SDIO_FLAG_RXOVERR:  Received FIFO overrun error
507
  *            @arg SDIO_FLAG_CMDREND:  Command response received (CRC check passed)
508
  *            @arg SDIO_FLAG_CMDSENT:  Command sent (no response required)
9 mjames 509
  *            @arg SDIO_FLAG_DATAEND:  Data end (data counter, DATACOUNT, is zero)
2 mjames 510
  *            @arg SDIO_FLAG_DBCKEND:  Data block sent/received (CRC check passed)
511
  *            @arg SDIO_FLAG_SDIOIT:   SD I/O interrupt received
512
  * @retval None
513
  */
514
#define __HAL_MMC_CLEAR_FLAG(__HANDLE__, __FLAG__) __SDIO_CLEAR_FLAG((__HANDLE__)->Instance, (__FLAG__))
515
 
516
/**
517
  * @brief  Check whether the specified MMC interrupt has occurred or not.
518
  * @param  __HANDLE__: MMC Handle  
519
  * @param  __INTERRUPT__: specifies the SDMMC interrupt source to check.
520
  *          This parameter can be one of the following values:
521
  *            @arg SDIO_IT_CCRCFAIL: Command response received (CRC check failed) interrupt
522
  *            @arg SDIO_IT_DCRCFAIL: Data block sent/received (CRC check failed) interrupt
523
  *            @arg SDIO_IT_CTIMEOUT: Command response timeout interrupt
524
  *            @arg SDIO_IT_DTIMEOUT: Data timeout interrupt
525
  *            @arg SDIO_IT_TXUNDERR: Transmit FIFO underrun error interrupt
526
  *            @arg SDIO_IT_RXOVERR:  Received FIFO overrun error interrupt
527
  *            @arg SDIO_IT_CMDREND:  Command response received (CRC check passed) interrupt
528
  *            @arg SDIO_IT_CMDSENT:  Command sent (no response required) interrupt
9 mjames 529
  *            @arg SDIO_IT_DATAEND:  Data end (data counter, DATACOUNT, is zero) interrupt
2 mjames 530
  *            @arg SDIO_IT_DBCKEND:  Data block sent/received (CRC check passed) interrupt
531
  *            @arg SDIO_IT_CMDACT:   Command transfer in progress interrupt
532
  *            @arg SDIO_IT_TXACT:    Data transmit in progress interrupt
533
  *            @arg SDIO_IT_RXACT:    Data receive in progress interrupt
534
  *            @arg SDIO_IT_TXFIFOHE: Transmit FIFO Half Empty interrupt
535
  *            @arg SDIO_IT_RXFIFOHF: Receive FIFO Half Full interrupt
536
  *            @arg SDIO_IT_TXFIFOF:  Transmit FIFO full interrupt
537
  *            @arg SDIO_IT_RXFIFOF:  Receive FIFO full interrupt
538
  *            @arg SDIO_IT_TXFIFOE:  Transmit FIFO empty interrupt
539
  *            @arg SDIO_IT_RXFIFOE:  Receive FIFO empty interrupt
540
  *            @arg SDIO_IT_TXDAVL:   Data available in transmit FIFO interrupt
541
  *            @arg SDIO_IT_RXDAVL:   Data available in receive FIFO interrupt
542
  *            @arg SDIO_IT_SDIOIT:   SD I/O interrupt received interrupt
543
  * @retval The new state of MMC IT (SET or RESET).
544
  */
545
#define __HAL_MMC_GET_IT(__HANDLE__, __INTERRUPT__) __SDIO_GET_IT((__HANDLE__)->Instance, (__INTERRUPT__))
546
 
547
/**
548
  * @brief  Clear the MMC's interrupt pending bits.
549
  * @param  __HANDLE__: MMC Handle
550
  * @param  __INTERRUPT__: specifies the interrupt pending bit to clear.
551
  *          This parameter can be one or a combination of the following values:
552
  *            @arg SDIO_IT_CCRCFAIL: Command response received (CRC check failed) interrupt
553
  *            @arg SDIO_IT_DCRCFAIL: Data block sent/received (CRC check failed) interrupt
554
  *            @arg SDIO_IT_CTIMEOUT: Command response timeout interrupt
555
  *            @arg SDIO_IT_DTIMEOUT: Data timeout interrupt
556
  *            @arg SDIO_IT_TXUNDERR: Transmit FIFO underrun error interrupt
557
  *            @arg SDIO_IT_RXOVERR:  Received FIFO overrun error interrupt
558
  *            @arg SDIO_IT_CMDREND:  Command response received (CRC check passed) interrupt
559
  *            @arg SDIO_IT_CMDSENT:  Command sent (no response required) interrupt
9 mjames 560
  *            @arg SDIO_IT_DATAEND:  Data end (data counter, DATACOUNT, is zero) interrupt
561
  *            @arg SDIO_IT_DBCKEND:    Data block sent/received (CRC check passed) interrupt
562
  *            @arg SDIO_IT_TXFIFOHE:   Transmit FIFO Half Empty interrupt
563
  *            @arg SDIO_IT_RXFIFOHF:   Receive FIFO Half Full interrupt
564
  *            @arg SDIO_IT_RXFIFOF:    Receive FIFO full interrupt
565
  *            @arg SDIO_IT_TXFIFOE:    Transmit FIFO empty interrupt
2 mjames 566
  *            @arg SDIO_IT_SDIOIT:   SD I/O interrupt received interrupt
567
  * @retval None
568
  */
569
#define __HAL_MMC_CLEAR_IT(__HANDLE__, __INTERRUPT__) __SDIO_CLEAR_IT((__HANDLE__)->Instance, (__INTERRUPT__))
570
 
571
/**
572
  * @}
573
  */
574
 
575
/* Exported functions --------------------------------------------------------*/
576
/** @defgroup MMC_Exported_Functions MMC Exported Functions
577
  * @{
578
  */
579
 
580
/** @defgroup MMC_Exported_Functions_Group1 Initialization and de-initialization functions
581
  * @{
582
  */
583
HAL_StatusTypeDef HAL_MMC_Init(MMC_HandleTypeDef *hmmc);
584
HAL_StatusTypeDef HAL_MMC_InitCard(MMC_HandleTypeDef *hmmc);
585
HAL_StatusTypeDef HAL_MMC_DeInit (MMC_HandleTypeDef *hmmc);
586
void HAL_MMC_MspInit(MMC_HandleTypeDef *hmmc);
587
void HAL_MMC_MspDeInit(MMC_HandleTypeDef *hmmc);
9 mjames 588
 
2 mjames 589
/**
590
  * @}
591
  */
592
 
593
/** @defgroup MMC_Exported_Functions_Group2 Input and Output operation functions
594
  * @{
595
  */
596
/* Blocking mode: Polling */
597
HAL_StatusTypeDef HAL_MMC_ReadBlocks(MMC_HandleTypeDef *hmmc, uint8_t *pData, uint32_t BlockAdd, uint32_t NumberOfBlocks, uint32_t Timeout);
598
HAL_StatusTypeDef HAL_MMC_WriteBlocks(MMC_HandleTypeDef *hmmc, uint8_t *pData, uint32_t BlockAdd, uint32_t NumberOfBlocks, uint32_t Timeout);
599
HAL_StatusTypeDef HAL_MMC_Erase(MMC_HandleTypeDef *hmmc, uint32_t BlockStartAdd, uint32_t BlockEndAdd);
600
/* Non-Blocking mode: IT */
601
HAL_StatusTypeDef HAL_MMC_ReadBlocks_IT(MMC_HandleTypeDef *hmmc, uint8_t *pData, uint32_t BlockAdd, uint32_t NumberOfBlocks);
602
HAL_StatusTypeDef HAL_MMC_WriteBlocks_IT(MMC_HandleTypeDef *hmmc, uint8_t *pData, uint32_t BlockAdd, uint32_t NumberOfBlocks);
603
/* Non-Blocking mode: DMA */
604
HAL_StatusTypeDef HAL_MMC_ReadBlocks_DMA(MMC_HandleTypeDef *hmmc, uint8_t *pData, uint32_t BlockAdd, uint32_t NumberOfBlocks);
605
HAL_StatusTypeDef HAL_MMC_WriteBlocks_DMA(MMC_HandleTypeDef *hmmc, uint8_t *pData, uint32_t BlockAdd, uint32_t NumberOfBlocks);
606
 
607
void HAL_MMC_IRQHandler(MMC_HandleTypeDef *hmmc);
608
 
609
/* Callback in non blocking modes (DMA) */
610
void HAL_MMC_TxCpltCallback(MMC_HandleTypeDef *hmmc);
611
void HAL_MMC_RxCpltCallback(MMC_HandleTypeDef *hmmc);
612
void HAL_MMC_ErrorCallback(MMC_HandleTypeDef *hmmc);
613
void HAL_MMC_AbortCallback(MMC_HandleTypeDef *hmmc);
9 mjames 614
 
615
#if defined (USE_HAL_MMC_REGISTER_CALLBACKS) && (USE_HAL_MMC_REGISTER_CALLBACKS == 1U)
616
/* MMC callback registering/unregistering */
617
HAL_StatusTypeDef HAL_MMC_RegisterCallback  (MMC_HandleTypeDef *hmmc, HAL_MMC_CallbackIDTypeDef CallbackId, pMMC_CallbackTypeDef pCallback);
618
HAL_StatusTypeDef HAL_MMC_UnRegisterCallback(MMC_HandleTypeDef *hmmc, HAL_MMC_CallbackIDTypeDef CallbackId);
619
#endif
2 mjames 620
/**
621
  * @}
622
  */
623
 
624
/** @defgroup MMC_Exported_Functions_Group3 Peripheral Control functions
625
  * @{
626
  */
627
HAL_StatusTypeDef HAL_MMC_ConfigWideBusOperation(MMC_HandleTypeDef *hmmc, uint32_t WideMode);
628
/**
629
  * @}
630
  */
631
 
632
/** @defgroup MMC_Exported_Functions_Group4 MMC card related functions
633
  * @{
634
  */
635
HAL_MMC_CardStateTypeDef HAL_MMC_GetCardState(MMC_HandleTypeDef *hmmc);
9 mjames 636
HAL_StatusTypeDef HAL_MMC_GetCardCID(MMC_HandleTypeDef *hmmc, HAL_MMC_CardCIDTypeDef *pCID);
637
HAL_StatusTypeDef HAL_MMC_GetCardCSD(MMC_HandleTypeDef *hmmc, HAL_MMC_CardCSDTypeDef *pCSD);
638
HAL_StatusTypeDef HAL_MMC_GetCardInfo(MMC_HandleTypeDef *hmmc, HAL_MMC_CardInfoTypeDef *pCardInfo);
2 mjames 639
/**
640
  * @}
641
  */
642
 
643
/** @defgroup MMC_Exported_Functions_Group5 Peripheral State and Errors functions
644
  * @{
645
  */
646
HAL_MMC_StateTypeDef HAL_MMC_GetState(MMC_HandleTypeDef *hmmc);
647
uint32_t HAL_MMC_GetError(MMC_HandleTypeDef *hmmc);
648
/**
649
  * @}
650
  */
651
 
652
/** @defgroup MMC_Exported_Functions_Group6 Perioheral Abort management
653
  * @{
654
  */
655
HAL_StatusTypeDef HAL_MMC_Abort(MMC_HandleTypeDef *hmmc);
656
HAL_StatusTypeDef HAL_MMC_Abort_IT(MMC_HandleTypeDef *hmmc);
657
/**
658
  * @}
659
  */
660
 
661
/* Private types -------------------------------------------------------------*/
662
/** @defgroup MMC_Private_Types MMC Private Types
663
  * @{
664
  */
665
 
666
/**
667
  * @}
668
  */
669
 
670
/* Private defines -----------------------------------------------------------*/
671
/** @defgroup MMC_Private_Defines MMC Private Defines
672
  * @{
673
  */
674
 
675
/**
676
  * @}
677
  */
678
 
679
/* Private variables ---------------------------------------------------------*/
680
/** @defgroup MMC_Private_Variables MMC Private Variables
681
  * @{
682
  */
683
 
684
/**
685
  * @}
686
  */
687
 
688
/* Private constants ---------------------------------------------------------*/
689
/** @defgroup MMC_Private_Constants MMC Private Constants
690
  * @{
691
  */
692
 
693
/**
694
  * @}
695
  */
696
 
697
/* Private macros ------------------------------------------------------------*/
698
/** @defgroup MMC_Private_Macros MMC Private Macros
699
  * @{
700
  */
701
 
702
/**
703
  * @}
704
  */
705
 
706
/* Private functions prototypes ----------------------------------------------*/
707
/** @defgroup MMC_Private_Functions_Prototypes MMC Private Functions Prototypes
708
  * @{
709
  */
710
 
711
/**
712
  * @}
713
  */
714
 
715
/* Private functions ---------------------------------------------------------*/
716
/** @defgroup MMC_Private_Functions MMC Private Functions
717
  * @{
718
  */
719
 
720
/**
721
  * @}
722
  */
723
 
9 mjames 724
 
2 mjames 725
/**
726
  * @}
727
  */
728
 
729
/**
730
  * @}
731
  */
732
 
733
/**
734
  * @}
735
  */
736
 
737
#ifdef __cplusplus
738
}
739
#endif
740
 
9 mjames 741
#endif /* SDIO */
2 mjames 742
 
9 mjames 743
#endif /* STM32F1xx_HAL_MMC_H */ 
2 mjames 744
 
745
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/