1 /**
2   ******************************************************************************
3   * @file    stm32f1xx_hal_sd.h
4   * @author  MCD Application Team
5   * @brief   Header file of SD HAL module.
6   ******************************************************************************
7   * @attention
8   *
9   * <h2><center>&copy; Copyright (c) 2018 STMicroelectronics.
10   * All rights reserved.</center></h2>
11   *
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
16   *
17   ******************************************************************************
18   */
19 
20 /* Define to prevent recursive inclusion -------------------------------------*/
21 #ifndef STM32F1xx_HAL_SD_H
22 #define STM32F1xx_HAL_SD_H
23 
24 #ifdef __cplusplus
25  extern "C" {
26 #endif
27 
28 #if defined(SDIO)
29 
30 /* Includes ------------------------------------------------------------------*/
31 #include "stm32f1xx_ll_sdmmc.h"
32 
33 /** @addtogroup STM32F1xx_HAL_Driver
34   * @{
35   */
36 
37 /** @defgroup SD SD
38   * @brief SD HAL module driver
39   * @{
40   */
41 
42 /* Exported types ------------------------------------------------------------*/
43 /** @defgroup SD_Exported_Types SD Exported Types
44   * @{
45   */
46 
47 /** @defgroup SD_Exported_Types_Group1 SD State enumeration structure
48   * @{
49   */
50 typedef enum
51 {
52   HAL_SD_STATE_RESET                  = 0x00000000U,  /*!< SD not yet initialized or disabled  */
53   HAL_SD_STATE_READY                  = 0x00000001U,  /*!< SD initialized and ready for use    */
54   HAL_SD_STATE_TIMEOUT                = 0x00000002U,  /*!< SD Timeout state                    */
55   HAL_SD_STATE_BUSY                   = 0x00000003U,  /*!< SD process ongoing                  */
56   HAL_SD_STATE_PROGRAMMING            = 0x00000004U,  /*!< SD Programming State                */
57   HAL_SD_STATE_RECEIVING              = 0x00000005U,  /*!< SD Receiving State                  */
58   HAL_SD_STATE_TRANSFER               = 0x00000006U,  /*!< SD Transfer State                  */
59   HAL_SD_STATE_ERROR                  = 0x0000000FU   /*!< SD is in error state                */
60 }HAL_SD_StateTypeDef;
61 /**
62   * @}
63   */
64 
65 /** @defgroup SD_Exported_Types_Group2 SD Card State enumeration structure
66   * @{
67   */
68 typedef uint32_t HAL_SD_CardStateTypeDef;
69 
70 #define HAL_SD_CARD_READY          0x00000001U  /*!< Card state is ready                     */
71 #define HAL_SD_CARD_IDENTIFICATION 0x00000002U  /*!< Card is in identification state         */
72 #define HAL_SD_CARD_STANDBY        0x00000003U  /*!< Card is in standby state                */
73 #define HAL_SD_CARD_TRANSFER       0x00000004U  /*!< Card is in transfer state               */
74 #define HAL_SD_CARD_SENDING        0x00000005U  /*!< Card is sending an operation            */
75 #define HAL_SD_CARD_RECEIVING      0x00000006U  /*!< Card is receiving operation information */
76 #define HAL_SD_CARD_PROGRAMMING    0x00000007U  /*!< Card is in programming state            */
77 #define HAL_SD_CARD_DISCONNECTED   0x00000008U  /*!< Card is disconnected                    */
78 #define HAL_SD_CARD_ERROR          0x000000FFU  /*!< Card response Error                     */
79 /**
80   * @}
81   */
82 
83 /** @defgroup SD_Exported_Types_Group3 SD Handle Structure definition
84   * @{
85   */
86 #define SD_InitTypeDef      SDIO_InitTypeDef
87 #define SD_TypeDef          SDIO_TypeDef
88 
89 /**
90   * @brief  SD Card Information Structure definition
91   */
92 typedef struct
93 {
94   uint32_t CardType;                     /*!< Specifies the card Type                         */
95 
96   uint32_t CardVersion;                  /*!< Specifies the card version                      */
97 
98   uint32_t Class;                        /*!< Specifies the class of the card class           */
99 
100   uint32_t RelCardAdd;                   /*!< Specifies the Relative Card Address             */
101 
102   uint32_t BlockNbr;                     /*!< Specifies the Card Capacity in blocks           */
103 
104   uint32_t BlockSize;                    /*!< Specifies one block size in bytes               */
105 
106   uint32_t LogBlockNbr;                  /*!< Specifies the Card logical Capacity in blocks   */
107 
108   uint32_t LogBlockSize;                 /*!< Specifies logical block size in bytes           */
109 
110 }HAL_SD_CardInfoTypeDef;
111 
112 /**
113   * @brief  SD handle Structure definition
114   */
115 #if defined (USE_HAL_SD_REGISTER_CALLBACKS) && (USE_HAL_SD_REGISTER_CALLBACKS == 1U)
116 typedef struct __SD_HandleTypeDef
117 #else
118 typedef struct
119 #endif /* USE_HAL_SD_REGISTER_CALLBACKS */
120 {
121   SD_TypeDef                   *Instance;        /*!< SD registers base address           */
122 
123   SD_InitTypeDef               Init;             /*!< SD required parameters              */
124 
125   HAL_LockTypeDef              Lock;             /*!< SD locking object                   */
126 
127   uint8_t                      *pTxBuffPtr;      /*!< Pointer to SD Tx transfer Buffer    */
128 
129   uint32_t                     TxXferSize;       /*!< SD Tx Transfer size                 */
130 
131   uint8_t                      *pRxBuffPtr;      /*!< Pointer to SD Rx transfer Buffer    */
132 
133   uint32_t                     RxXferSize;       /*!< SD Rx Transfer size                 */
134 
135   __IO uint32_t                Context;          /*!< SD transfer context                 */
136 
137   __IO HAL_SD_StateTypeDef     State;            /*!< SD card State                       */
138 
139   __IO uint32_t                ErrorCode;        /*!< SD Card Error codes                 */
140 
141   DMA_HandleTypeDef            *hdmatx;          /*!< SD Tx DMA handle parameters         */
142 
143   DMA_HandleTypeDef            *hdmarx;          /*!< SD Rx DMA handle parameters         */
144 
145   HAL_SD_CardInfoTypeDef       SdCard;           /*!< SD Card information                 */
146 
147   uint32_t                     CSD[4];           /*!< SD card specific data table         */
148 
149   uint32_t                     CID[4];           /*!< SD card identification number table */
150 
151 #if defined (USE_HAL_SD_REGISTER_CALLBACKS) && (USE_HAL_SD_REGISTER_CALLBACKS == 1U)
152   void (* TxCpltCallback)                 (struct __SD_HandleTypeDef *hsd);
153   void (* RxCpltCallback)                 (struct __SD_HandleTypeDef *hsd);
154   void (* ErrorCallback)                  (struct __SD_HandleTypeDef *hsd);
155   void (* AbortCpltCallback)              (struct __SD_HandleTypeDef *hsd);
156 
157   void (* MspInitCallback)                (struct __SD_HandleTypeDef *hsd);
158   void (* MspDeInitCallback)              (struct __SD_HandleTypeDef *hsd);
159 #endif /* USE_HAL_SD_REGISTER_CALLBACKS */
160 }SD_HandleTypeDef;
161 
162 /**
163   * @}
164   */
165 
166 /** @defgroup SD_Exported_Types_Group4 Card Specific Data: CSD Register
167   * @{
168   */
169 typedef struct
170 {
171   __IO uint8_t  CSDStruct;            /*!< CSD structure                         */
172   __IO uint8_t  SysSpecVersion;       /*!< System specification version          */
173   __IO uint8_t  Reserved1;            /*!< Reserved                              */
174   __IO uint8_t  TAAC;                 /*!< Data read access time 1               */
175   __IO uint8_t  NSAC;                 /*!< Data read access time 2 in CLK cycles */
176   __IO uint8_t  MaxBusClkFrec;        /*!< Max. bus clock frequency              */
177   __IO uint16_t CardComdClasses;      /*!< Card command classes                  */
178   __IO uint8_t  RdBlockLen;           /*!< Max. read data block length           */
179   __IO uint8_t  PartBlockRead;        /*!< Partial blocks for read allowed       */
180   __IO uint8_t  WrBlockMisalign;      /*!< Write block misalignment              */
181   __IO uint8_t  RdBlockMisalign;      /*!< Read block misalignment               */
182   __IO uint8_t  DSRImpl;              /*!< DSR implemented                       */
183   __IO uint8_t  Reserved2;            /*!< Reserved                              */
184   __IO uint32_t DeviceSize;           /*!< Device Size                           */
185   __IO uint8_t  MaxRdCurrentVDDMin;   /*!< Max. read current @ VDD min           */
186   __IO uint8_t  MaxRdCurrentVDDMax;   /*!< Max. read current @ VDD max           */
187   __IO uint8_t  MaxWrCurrentVDDMin;   /*!< Max. write current @ VDD min          */
188   __IO uint8_t  MaxWrCurrentVDDMax;   /*!< Max. write current @ VDD max          */
189   __IO uint8_t  DeviceSizeMul;        /*!< Device size multiplier                */
190   __IO uint8_t  EraseGrSize;          /*!< Erase group size                      */
191   __IO uint8_t  EraseGrMul;           /*!< Erase group size multiplier           */
192   __IO uint8_t  WrProtectGrSize;      /*!< Write protect group size              */
193   __IO uint8_t  WrProtectGrEnable;    /*!< Write protect group enable            */
194   __IO uint8_t  ManDeflECC;           /*!< Manufacturer default ECC              */
195   __IO uint8_t  WrSpeedFact;          /*!< Write speed factor                    */
196   __IO uint8_t  MaxWrBlockLen;        /*!< Max. write data block length          */
197   __IO uint8_t  WriteBlockPaPartial;  /*!< Partial blocks for write allowed      */
198   __IO uint8_t  Reserved3;            /*!< Reserved                              */
199   __IO uint8_t  ContentProtectAppli;  /*!< Content protection application        */
200   __IO uint8_t  FileFormatGroup;      /*!< File format group                     */
201   __IO uint8_t  CopyFlag;             /*!< Copy flag (OTP)                       */
202   __IO uint8_t  PermWrProtect;        /*!< Permanent write protection            */
203   __IO uint8_t  TempWrProtect;        /*!< Temporary write protection            */
204   __IO uint8_t  FileFormat;           /*!< File format                           */
205   __IO uint8_t  ECC;                  /*!< ECC code                              */
206   __IO uint8_t  CSD_CRC;              /*!< CSD CRC                               */
207   __IO uint8_t  Reserved4;            /*!< Always 1                              */
208 }HAL_SD_CardCSDTypeDef;
209 /**
210   * @}
211   */
212 
213 /** @defgroup SD_Exported_Types_Group5 Card Identification Data: CID Register
214   * @{
215   */
216 typedef struct
217 {
218   __IO uint8_t  ManufacturerID;  /*!< Manufacturer ID       */
219   __IO uint16_t OEM_AppliID;     /*!< OEM/Application ID    */
220   __IO uint32_t ProdName1;       /*!< Product Name part1    */
221   __IO uint8_t  ProdName2;       /*!< Product Name part2    */
222   __IO uint8_t  ProdRev;         /*!< Product Revision      */
223   __IO uint32_t ProdSN;          /*!< Product Serial Number */
224   __IO uint8_t  Reserved1;       /*!< Reserved1             */
225   __IO uint16_t ManufactDate;    /*!< Manufacturing Date    */
226   __IO uint8_t  CID_CRC;         /*!< CID CRC               */
227   __IO uint8_t  Reserved2;       /*!< Always 1              */
228 
229 }HAL_SD_CardCIDTypeDef;
230 /**
231   * @}
232   */
233 
234 /** @defgroup SD_Exported_Types_Group6 SD Card Status returned by ACMD13
235   * @{
236   */
237 typedef struct
238 {
239   __IO uint8_t  DataBusWidth;           /*!< Shows the currently defined data bus width                 */
240   __IO uint8_t  SecuredMode;            /*!< Card is in secured mode of operation                       */
241   __IO uint16_t CardType;               /*!< Carries information about card type                        */
242   __IO uint32_t ProtectedAreaSize;      /*!< Carries information about the capacity of protected area   */
243   __IO uint8_t  SpeedClass;             /*!< Carries information about the speed class of the card      */
244   __IO uint8_t  PerformanceMove;        /*!< Carries information about the card's performance move      */
245   __IO uint8_t  AllocationUnitSize;     /*!< Carries information about the card's allocation unit size  */
246   __IO uint16_t EraseSize;              /*!< Determines the number of AUs to be erased in one operation */
247   __IO uint8_t  EraseTimeout;           /*!< Determines the timeout for any number of AU erase          */
248   __IO uint8_t  EraseOffset;            /*!< Carries information about the erase offset                 */
249 
250 }HAL_SD_CardStatusTypeDef;
251 /**
252   * @}
253   */
254 
255 #if defined (USE_HAL_SD_REGISTER_CALLBACKS) && (USE_HAL_SD_REGISTER_CALLBACKS == 1U)
256 /** @defgroup SD_Exported_Types_Group7 SD Callback ID enumeration definition
257   * @{
258   */
259 typedef enum
260 {
261   HAL_SD_TX_CPLT_CB_ID                 = 0x00U,  /*!< SD Tx Complete Callback ID                     */
262   HAL_SD_RX_CPLT_CB_ID                 = 0x01U,  /*!< SD Rx Complete Callback ID                     */
263   HAL_SD_ERROR_CB_ID                   = 0x02U,  /*!< SD Error Callback ID                           */
264   HAL_SD_ABORT_CB_ID                   = 0x03U,  /*!< SD Abort Callback ID                           */
265 
266   HAL_SD_MSP_INIT_CB_ID                = 0x10U,  /*!< SD MspInit Callback ID                         */
267   HAL_SD_MSP_DEINIT_CB_ID              = 0x11U   /*!< SD MspDeInit Callback ID                       */
268 }HAL_SD_CallbackIDTypeDef;
269 /**
270   * @}
271   */
272 
273 /** @defgroup SD_Exported_Types_Group8 SD Callback pointer definition
274   * @{
275   */
276 typedef void (*pSD_CallbackTypeDef)           (SD_HandleTypeDef *hsd);
277 /**
278   * @}
279   */
280 #endif /* USE_HAL_SD_REGISTER_CALLBACKS */
281 /**
282   * @}
283   */
284 
285 /* Exported constants --------------------------------------------------------*/
286 /** @defgroup SD_Exported_Constants Exported Constants
287   * @{
288   */
289 
290 #define BLOCKSIZE   512U /*!< Block size is 512 bytes */
291 
292 /** @defgroup SD_Exported_Constansts_Group1 SD Error status enumeration Structure definition
293   * @{
294   */
295 #define HAL_SD_ERROR_NONE                     SDMMC_ERROR_NONE                    /*!< No error                                                      */
296 #define HAL_SD_ERROR_CMD_CRC_FAIL             SDMMC_ERROR_CMD_CRC_FAIL            /*!< Command response received (but CRC check failed)              */
297 #define HAL_SD_ERROR_DATA_CRC_FAIL            SDMMC_ERROR_DATA_CRC_FAIL           /*!< Data block sent/received (CRC check failed)                   */
298 #define HAL_SD_ERROR_CMD_RSP_TIMEOUT          SDMMC_ERROR_CMD_RSP_TIMEOUT         /*!< Command response timeout                                      */
299 #define HAL_SD_ERROR_DATA_TIMEOUT             SDMMC_ERROR_DATA_TIMEOUT            /*!< Data timeout                                                  */
300 #define HAL_SD_ERROR_TX_UNDERRUN              SDMMC_ERROR_TX_UNDERRUN             /*!< Transmit FIFO underrun                                        */
301 #define HAL_SD_ERROR_RX_OVERRUN               SDMMC_ERROR_RX_OVERRUN              /*!< Receive FIFO overrun                                          */
302 #define HAL_SD_ERROR_ADDR_MISALIGNED          SDMMC_ERROR_ADDR_MISALIGNED         /*!< Misaligned address                                            */
303 #define HAL_SD_ERROR_BLOCK_LEN_ERR            SDMMC_ERROR_BLOCK_LEN_ERR           /*!< Transferred block length is not allowed for the card or the
304                                                                                        number of transferred bytes does not match the block length   */
305 #define HAL_SD_ERROR_ERASE_SEQ_ERR            SDMMC_ERROR_ERASE_SEQ_ERR           /*!< An error in the sequence of erase command occurs              */
306 #define HAL_SD_ERROR_BAD_ERASE_PARAM          SDMMC_ERROR_BAD_ERASE_PARAM         /*!< An invalid selection for erase groups                         */
307 #define HAL_SD_ERROR_WRITE_PROT_VIOLATION     SDMMC_ERROR_WRITE_PROT_VIOLATION    /*!< Attempt to program a write protect block                      */
308 #define HAL_SD_ERROR_LOCK_UNLOCK_FAILED       SDMMC_ERROR_LOCK_UNLOCK_FAILED      /*!< Sequence or password error has been detected in unlock
309                                                                                        command or if there was an attempt to access a locked card    */
310 #define HAL_SD_ERROR_COM_CRC_FAILED           SDMMC_ERROR_COM_CRC_FAILED          /*!< CRC check of the previous command failed                      */
311 #define HAL_SD_ERROR_ILLEGAL_CMD              SDMMC_ERROR_ILLEGAL_CMD             /*!< Command is not legal for the card state                       */
312 #define HAL_SD_ERROR_CARD_ECC_FAILED          SDMMC_ERROR_CARD_ECC_FAILED         /*!< Card internal ECC was applied but failed to correct the data  */
313 #define HAL_SD_ERROR_CC_ERR                   SDMMC_ERROR_CC_ERR                  /*!< Internal card controller error                                */
314 #define HAL_SD_ERROR_GENERAL_UNKNOWN_ERR      SDMMC_ERROR_GENERAL_UNKNOWN_ERR     /*!< General or unknown error                                      */
315 #define HAL_SD_ERROR_STREAM_READ_UNDERRUN     SDMMC_ERROR_STREAM_READ_UNDERRUN    /*!< The card could not sustain data reading in stream rmode       */
316 #define HAL_SD_ERROR_STREAM_WRITE_OVERRUN     SDMMC_ERROR_STREAM_WRITE_OVERRUN    /*!< The card could not sustain data programming in stream mode    */
317 #define HAL_SD_ERROR_CID_CSD_OVERWRITE        SDMMC_ERROR_CID_CSD_OVERWRITE       /*!< CID/CSD overwrite error                                       */
318 #define HAL_SD_ERROR_WP_ERASE_SKIP            SDMMC_ERROR_WP_ERASE_SKIP           /*!< Only partial address space was erased                         */
319 #define HAL_SD_ERROR_CARD_ECC_DISABLED        SDMMC_ERROR_CARD_ECC_DISABLED       /*!< Command has been executed without using internal ECC          */
320 #define HAL_SD_ERROR_ERASE_RESET              SDMMC_ERROR_ERASE_RESET             /*!< Erase sequence was cleared before executing because an out
321                                                                                        of erase sequence command was received                        */
322 #define HAL_SD_ERROR_AKE_SEQ_ERR              SDMMC_ERROR_AKE_SEQ_ERR             /*!< Error in sequence of authentication                           */
323 #define HAL_SD_ERROR_INVALID_VOLTRANGE        SDMMC_ERROR_INVALID_VOLTRANGE       /*!< Error in case of invalid voltage range                        */
324 #define HAL_SD_ERROR_ADDR_OUT_OF_RANGE        SDMMC_ERROR_ADDR_OUT_OF_RANGE       /*!< Error when addressed block is out of range                    */
325 #define HAL_SD_ERROR_REQUEST_NOT_APPLICABLE   SDMMC_ERROR_REQUEST_NOT_APPLICABLE  /*!< Error when command request is not applicable                  */
326 #define HAL_SD_ERROR_PARAM                    SDMMC_ERROR_INVALID_PARAMETER       /*!< the used parameter is not valid                               */
327 #define HAL_SD_ERROR_UNSUPPORTED_FEATURE      SDMMC_ERROR_UNSUPPORTED_FEATURE     /*!< Error when feature is not insupported                         */
328 #define HAL_SD_ERROR_BUSY                     SDMMC_ERROR_BUSY                    /*!< Error when transfer process is busy                           */
329 #define HAL_SD_ERROR_DMA                      SDMMC_ERROR_DMA                     /*!< Error while DMA transfer                                      */
330 #define HAL_SD_ERROR_TIMEOUT                  SDMMC_ERROR_TIMEOUT                 /*!< Timeout error                                                 */
331 
332 #if defined (USE_HAL_SD_REGISTER_CALLBACKS) && (USE_HAL_SD_REGISTER_CALLBACKS == 1U)
333 #define HAL_SD_ERROR_INVALID_CALLBACK         SDMMC_ERROR_INVALID_PARAMETER       /*!< Invalid callback error                                        */
334 #endif /* USE_HAL_SD_REGISTER_CALLBACKS */
335 /**
336   * @}
337   */
338 
339 /** @defgroup SD_Exported_Constansts_Group2 SD context enumeration
340   * @{
341   */
342 #define SD_CONTEXT_NONE                            0x00000000U   /*!< None                             */
343 #define SD_CONTEXT_READ_SINGLE_BLOCK               0x00000001U   /*!< Read single block operation      */
344 #define SD_CONTEXT_READ_MULTIPLE_BLOCK             0x00000002U   /*!< Read multiple blocks operation   */
345 #define SD_CONTEXT_WRITE_SINGLE_BLOCK              0x00000010U   /*!< Write single block operation     */
346 #define SD_CONTEXT_WRITE_MULTIPLE_BLOCK            0x00000020U   /*!< Write multiple blocks operation  */
347 #define SD_CONTEXT_IT                              0x00000008U   /*!< Process in Interrupt mode        */
348 #define SD_CONTEXT_DMA                             0x00000080U   /*!< Process in DMA mode              */
349 
350 /**
351   * @}
352   */
353 
354 /** @defgroup SD_Exported_Constansts_Group3 SD Supported Memory Cards
355   * @{
356   */
357 #define CARD_SDSC                  0x00000000U  /*!< SD Standard Capacity <2Go                          */
358 #define CARD_SDHC_SDXC             0x00000001U  /*!< SD High Capacity <32Go, SD Extended Capacity <2To  */
359 #define CARD_SECURED               0x00000003U
360 
361 /**
362   * @}
363   */
364 
365 /** @defgroup SD_Exported_Constansts_Group4 SD Supported Version
366   * @{
367   */
368 #define CARD_V1_X                  0x00000000U
369 #define CARD_V2_X                  0x00000001U
370 /**
371   * @}
372   */
373 
374 /**
375   * @}
376   */
377 
378 /* Exported macro ------------------------------------------------------------*/
379 /** @defgroup SD_Exported_macros SD Exported Macros
380  *  @brief macros to handle interrupts and specific clock configurations
381  * @{
382  */
383 /** @brief Reset SD handle state.
384   * @param  __HANDLE__ : SD handle.
385   * @retval None
386   */
387 #if defined (USE_HAL_SD_REGISTER_CALLBACKS) && (USE_HAL_SD_REGISTER_CALLBACKS == 1U)
388 #define __HAL_SD_RESET_HANDLE_STATE(__HANDLE__)           do {                                              \
389                                                                (__HANDLE__)->State = HAL_SD_STATE_RESET; \
390                                                                (__HANDLE__)->MspInitCallback = NULL;       \
391                                                                (__HANDLE__)->MspDeInitCallback = NULL;     \
392                                                              } while(0)
393 #else
394 #define __HAL_SD_RESET_HANDLE_STATE(__HANDLE__)           ((__HANDLE__)->State = HAL_SD_STATE_RESET)
395 #endif /* USE_HAL_SD_REGISTER_CALLBACKS */
396 
397 /**
398   * @brief  Enable the SD device.
399   * @retval None
400   */
401 #define __HAL_SD_ENABLE(__HANDLE__) __SDIO_ENABLE((__HANDLE__)->Instance)
402 
403 /**
404   * @brief  Disable the SD device.
405   * @retval None
406   */
407 #define __HAL_SD_DISABLE(__HANDLE__) __SDIO_DISABLE((__HANDLE__)->Instance)
408 
409 /**
410   * @brief  Enable the SDMMC DMA transfer.
411   * @retval None
412   */
413 #define __HAL_SD_DMA_ENABLE(__HANDLE__) __SDIO_DMA_ENABLE((__HANDLE__)->Instance)
414 
415 /**
416   * @brief  Disable the SDMMC DMA transfer.
417   * @retval None
418   */
419 #define __HAL_SD_DMA_DISABLE(__HANDLE__)  __SDIO_DMA_DISABLE((__HANDLE__)->Instance)
420 
421 /**
422   * @brief  Enable the SD device interrupt.
423   * @param  __HANDLE__: SD Handle
424   * @param  __INTERRUPT__: specifies the SDMMC interrupt sources to be enabled.
425   *         This parameter can be one or a combination of the following values:
426   *            @arg SDIO_IT_CCRCFAIL: Command response received (CRC check failed) interrupt
427   *            @arg SDIO_IT_DCRCFAIL: Data block sent/received (CRC check failed) interrupt
428   *            @arg SDIO_IT_CTIMEOUT: Command response timeout interrupt
429   *            @arg SDIO_IT_DTIMEOUT: Data timeout interrupt
430   *            @arg SDIO_IT_TXUNDERR: Transmit FIFO underrun error interrupt
431   *            @arg SDIO_IT_RXOVERR:  Received FIFO overrun error interrupt
432   *            @arg SDIO_IT_CMDREND:  Command response received (CRC check passed) interrupt
433   *            @arg SDIO_IT_CMDSENT:  Command sent (no response required) interrupt
434   *            @arg SDIO_IT_DATAEND:  Data end (data counter, DATACOUNT, is zero) interrupt
435   *            @arg SDIO_IT_DBCKEND:  Data block sent/received (CRC check passed) interrupt
436   *            @arg SDIO_IT_CMDACT:   Command transfer in progress interrupt
437   *            @arg SDIO_IT_TXACT:    Data transmit in progress interrupt
438   *            @arg SDIO_IT_RXACT:    Data receive in progress interrupt
439   *            @arg SDIO_IT_TXFIFOHE: Transmit FIFO Half Empty interrupt
440   *            @arg SDIO_IT_RXFIFOHF: Receive FIFO Half Full interrupt
441   *            @arg SDIO_IT_TXFIFOF:  Transmit FIFO full interrupt
442   *            @arg SDIO_IT_RXFIFOF:  Receive FIFO full interrupt
443   *            @arg SDIO_IT_TXFIFOE:  Transmit FIFO empty interrupt
444   *            @arg SDIO_IT_RXFIFOE:  Receive FIFO empty interrupt
445   *            @arg SDIO_IT_TXDAVL:   Data available in transmit FIFO interrupt
446   *            @arg SDIO_IT_RXDAVL:   Data available in receive FIFO interrupt
447   *            @arg SDIO_IT_SDIOIT:   SDIO interrupt received interrupt
448   * @retval None
449   */
450 #define __HAL_SD_ENABLE_IT(__HANDLE__, __INTERRUPT__) __SDIO_ENABLE_IT((__HANDLE__)->Instance, (__INTERRUPT__))
451 
452 /**
453   * @brief  Disable the SD device interrupt.
454   * @param  __HANDLE__: SD Handle
455   * @param  __INTERRUPT__: specifies the SDMMC interrupt sources to be disabled.
456   *          This parameter can be one or a combination of the following values:
457   *            @arg SDIO_IT_CCRCFAIL: Command response received (CRC check failed) interrupt
458   *            @arg SDIO_IT_DCRCFAIL: Data block sent/received (CRC check failed) interrupt
459   *            @arg SDIO_IT_CTIMEOUT: Command response timeout interrupt
460   *            @arg SDIO_IT_DTIMEOUT: Data timeout interrupt
461   *            @arg SDIO_IT_TXUNDERR: Transmit FIFO underrun error interrupt
462   *            @arg SDIO_IT_RXOVERR:  Received FIFO overrun error interrupt
463   *            @arg SDIO_IT_CMDREND:  Command response received (CRC check passed) interrupt
464   *            @arg SDIO_IT_CMDSENT:  Command sent (no response required) interrupt
465   *            @arg SDIO_IT_DATAEND:  Data end (data counter, DATACOUNT, is zero) interrupt
466   *            @arg SDIO_IT_DBCKEND:  Data block sent/received (CRC check passed) interrupt
467   *            @arg SDIO_IT_CMDACT:   Command transfer in progress interrupt
468   *            @arg SDIO_IT_TXACT:    Data transmit in progress interrupt
469   *            @arg SDIO_IT_RXACT:    Data receive in progress interrupt
470   *            @arg SDIO_IT_TXFIFOHE: Transmit FIFO Half Empty interrupt
471   *            @arg SDIO_IT_RXFIFOHF: Receive FIFO Half Full interrupt
472   *            @arg SDIO_IT_TXFIFOF:  Transmit FIFO full interrupt
473   *            @arg SDIO_IT_RXFIFOF:  Receive FIFO full interrupt
474   *            @arg SDIO_IT_TXFIFOE:  Transmit FIFO empty interrupt
475   *            @arg SDIO_IT_RXFIFOE:  Receive FIFO empty interrupt
476   *            @arg SDIO_IT_TXDAVL:   Data available in transmit FIFO interrupt
477   *            @arg SDIO_IT_RXDAVL:   Data available in receive FIFO interrupt
478   *            @arg SDIO_IT_SDIOIT:   SDIO interrupt received interrupt
479   * @retval None
480   */
481 #define __HAL_SD_DISABLE_IT(__HANDLE__, __INTERRUPT__) __SDIO_DISABLE_IT((__HANDLE__)->Instance, (__INTERRUPT__))
482 
483 /**
484   * @brief  Check whether the specified SD flag is set or not.
485   * @param  __HANDLE__: SD Handle
486   * @param  __FLAG__: specifies the flag to check.
487   *          This parameter can be one of the following values:
488   *            @arg SDIO_FLAG_CCRCFAIL: Command response received (CRC check failed)
489   *            @arg SDIO_FLAG_DCRCFAIL: Data block sent/received (CRC check failed)
490   *            @arg SDIO_FLAG_CTIMEOUT: Command response timeout
491   *            @arg SDIO_FLAG_DTIMEOUT: Data timeout
492   *            @arg SDIO_FLAG_TXUNDERR: Transmit FIFO underrun error
493   *            @arg SDIO_FLAG_RXOVERR:  Received FIFO overrun error
494   *            @arg SDIO_FLAG_CMDREND:  Command response received (CRC check passed)
495   *            @arg SDIO_FLAG_CMDSENT:  Command sent (no response required)
496   *            @arg SDIO_FLAG_DATAEND:  Data end (data counter, DATACOUNT, is zero)
497   *            @arg SDIO_FLAG_DBCKEND:  Data block sent/received (CRC check passed)
498   *            @arg SDIO_FLAG_CMDACT:   Command transfer in progress
499   *            @arg SDIO_FLAG_TXACT:    Data transmit in progress
500   *            @arg SDIO_FLAG_RXACT:    Data receive in progress
501   *            @arg SDIO_FLAG_TXFIFOHE: Transmit FIFO Half Empty
502   *            @arg SDIO_FLAG_RXFIFOHF: Receive FIFO Half Full
503   *            @arg SDIO_FLAG_TXFIFOF:  Transmit FIFO full
504   *            @arg SDIO_FLAG_RXFIFOF:  Receive FIFO full
505   *            @arg SDIO_FLAG_TXFIFOE:  Transmit FIFO empty
506   *            @arg SDIO_FLAG_RXFIFOE:  Receive FIFO empty
507   *            @arg SDIO_FLAG_TXDAVL:   Data available in transmit FIFO
508   *            @arg SDIO_FLAG_RXDAVL:   Data available in receive FIFO
509   *            @arg SDIO_FLAG_SDIOIT:   SDIO interrupt received
510   * @retval The new state of SD FLAG (SET or RESET).
511   */
512 #define __HAL_SD_GET_FLAG(__HANDLE__, __FLAG__) __SDIO_GET_FLAG((__HANDLE__)->Instance, (__FLAG__))
513 
514 /**
515   * @brief  Clear the SD's pending flags.
516   * @param  __HANDLE__: SD Handle
517   * @param  __FLAG__: specifies the flag to clear.
518   *          This parameter can be one or a combination of the following values:
519   *            @arg SDIO_FLAG_CCRCFAIL: Command response received (CRC check failed)
520   *            @arg SDIO_FLAG_DCRCFAIL: Data block sent/received (CRC check failed)
521   *            @arg SDIO_FLAG_CTIMEOUT: Command response timeout
522   *            @arg SDIO_FLAG_DTIMEOUT: Data timeout
523   *            @arg SDIO_FLAG_TXUNDERR: Transmit FIFO underrun error
524   *            @arg SDIO_FLAG_RXOVERR:  Received FIFO overrun error
525   *            @arg SDIO_FLAG_CMDREND:  Command response received (CRC check passed)
526   *            @arg SDIO_FLAG_CMDSENT:  Command sent (no response required)
527   *            @arg SDIO_FLAG_DATAEND:  Data end (data counter, DATACOUNT, is zero)
528   *            @arg SDIO_FLAG_DBCKEND:  Data block sent/received (CRC check passed)
529   *            @arg SDIO_FLAG_SDIOIT:   SDIO interrupt received
530   * @retval None
531   */
532 #define __HAL_SD_CLEAR_FLAG(__HANDLE__, __FLAG__) __SDIO_CLEAR_FLAG((__HANDLE__)->Instance, (__FLAG__))
533 
534 /**
535   * @brief  Check whether the specified SD interrupt has occurred or not.
536   * @param  __HANDLE__: SD Handle
537   * @param  __INTERRUPT__: specifies the SDMMC interrupt source to check.
538   *          This parameter can be one of the following values:
539   *            @arg SDIO_IT_CCRCFAIL: Command response received (CRC check failed) interrupt
540   *            @arg SDIO_IT_DCRCFAIL: Data block sent/received (CRC check failed) interrupt
541   *            @arg SDIO_IT_CTIMEOUT: Command response timeout interrupt
542   *            @arg SDIO_IT_DTIMEOUT: Data timeout interrupt
543   *            @arg SDIO_IT_TXUNDERR: Transmit FIFO underrun error interrupt
544   *            @arg SDIO_IT_RXOVERR:  Received FIFO overrun error interrupt
545   *            @arg SDIO_IT_CMDREND:  Command response received (CRC check passed) interrupt
546   *            @arg SDIO_IT_CMDSENT:  Command sent (no response required) interrupt
547   *            @arg SDIO_IT_DATAEND:  Data end (data counter, DATACOUNT, is zero) interrupt
548   *            @arg SDIO_IT_DBCKEND:  Data block sent/received (CRC check passed) interrupt
549   *            @arg SDIO_IT_CMDACT:   Command transfer in progress interrupt
550   *            @arg SDIO_IT_TXACT:    Data transmit in progress interrupt
551   *            @arg SDIO_IT_RXACT:    Data receive in progress interrupt
552   *            @arg SDIO_IT_TXFIFOHE: Transmit FIFO Half Empty interrupt
553   *            @arg SDIO_IT_RXFIFOHF: Receive FIFO Half Full interrupt
554   *            @arg SDIO_IT_TXFIFOF:  Transmit FIFO full interrupt
555   *            @arg SDIO_IT_RXFIFOF:  Receive FIFO full interrupt
556   *            @arg SDIO_IT_TXFIFOE:  Transmit FIFO empty interrupt
557   *            @arg SDIO_IT_RXFIFOE:  Receive FIFO empty interrupt
558   *            @arg SDIO_IT_TXDAVL:   Data available in transmit FIFO interrupt
559   *            @arg SDIO_IT_RXDAVL:   Data available in receive FIFO interrupt
560   *            @arg SDIO_IT_SDIOIT:   SDIO interrupt received interrupt
561   * @retval The new state of SD IT (SET or RESET).
562   */
563 #define __HAL_SD_GET_IT(__HANDLE__, __INTERRUPT__) __SDIO_GET_IT((__HANDLE__)->Instance, (__INTERRUPT__))
564 
565 /**
566   * @brief  Clear the SD's interrupt pending bits.
567   * @param  __HANDLE__: SD Handle
568   * @param  __INTERRUPT__: specifies the interrupt pending bit to clear.
569   *          This parameter can be one or a combination of the following values:
570   *            @arg SDIO_IT_CCRCFAIL: Command response received (CRC check failed) interrupt
571   *            @arg SDIO_IT_DCRCFAIL: Data block sent/received (CRC check failed) interrupt
572   *            @arg SDIO_IT_CTIMEOUT: Command response timeout interrupt
573   *            @arg SDIO_IT_DTIMEOUT: Data timeout interrupt
574   *            @arg SDIO_IT_TXUNDERR: Transmit FIFO underrun error interrupt
575   *            @arg SDIO_IT_RXOVERR:  Received FIFO overrun error interrupt
576   *            @arg SDIO_IT_CMDREND:  Command response received (CRC check passed) interrupt
577   *            @arg SDIO_IT_CMDSENT:  Command sent (no response required) interrupt
578   *            @arg SDIO_IT_DATAEND:  Data end (data counter, DATACOUNT, is zero) interrupt
579   *            @arg SDIO_IT_SDIOIT:   SDIO interrupt received interrupt
580   * @retval None
581   */
582 #define __HAL_SD_CLEAR_IT(__HANDLE__, __INTERRUPT__) __SDIO_CLEAR_IT((__HANDLE__)->Instance, (__INTERRUPT__))
583 
584 /**
585   * @}
586   */
587 
588 /* Exported functions --------------------------------------------------------*/
589 /** @defgroup SD_Exported_Functions SD Exported Functions
590   * @{
591   */
592 
593 /** @defgroup SD_Exported_Functions_Group1 Initialization and de-initialization functions
594   * @{
595   */
596 HAL_StatusTypeDef HAL_SD_Init(SD_HandleTypeDef *hsd);
597 HAL_StatusTypeDef HAL_SD_InitCard(SD_HandleTypeDef *hsd);
598 HAL_StatusTypeDef HAL_SD_DeInit (SD_HandleTypeDef *hsd);
599 void HAL_SD_MspInit(SD_HandleTypeDef *hsd);
600 void HAL_SD_MspDeInit(SD_HandleTypeDef *hsd);
601 /**
602   * @}
603   */
604 
605 /** @defgroup SD_Exported_Functions_Group2 Input and Output operation functions
606   * @{
607   */
608 /* Blocking mode: Polling */
609 HAL_StatusTypeDef HAL_SD_ReadBlocks(SD_HandleTypeDef *hsd, uint8_t *pData, uint32_t BlockAdd, uint32_t NumberOfBlocks, uint32_t Timeout);
610 HAL_StatusTypeDef HAL_SD_WriteBlocks(SD_HandleTypeDef *hsd, uint8_t *pData, uint32_t BlockAdd, uint32_t NumberOfBlocks, uint32_t Timeout);
611 HAL_StatusTypeDef HAL_SD_Erase(SD_HandleTypeDef *hsd, uint32_t BlockStartAdd, uint32_t BlockEndAdd);
612 /* Non-Blocking mode: IT */
613 HAL_StatusTypeDef HAL_SD_ReadBlocks_IT(SD_HandleTypeDef *hsd, uint8_t *pData, uint32_t BlockAdd, uint32_t NumberOfBlocks);
614 HAL_StatusTypeDef HAL_SD_WriteBlocks_IT(SD_HandleTypeDef *hsd, uint8_t *pData, uint32_t BlockAdd, uint32_t NumberOfBlocks);
615 /* Non-Blocking mode: DMA */
616 HAL_StatusTypeDef HAL_SD_ReadBlocks_DMA(SD_HandleTypeDef *hsd, uint8_t *pData, uint32_t BlockAdd, uint32_t NumberOfBlocks);
617 HAL_StatusTypeDef HAL_SD_WriteBlocks_DMA(SD_HandleTypeDef *hsd, uint8_t *pData, uint32_t BlockAdd, uint32_t NumberOfBlocks);
618 
619 void HAL_SD_IRQHandler(SD_HandleTypeDef *hsd);
620 
621 /* Callback in non blocking modes (DMA) */
622 void HAL_SD_TxCpltCallback(SD_HandleTypeDef *hsd);
623 void HAL_SD_RxCpltCallback(SD_HandleTypeDef *hsd);
624 void HAL_SD_ErrorCallback(SD_HandleTypeDef *hsd);
625 void HAL_SD_AbortCallback(SD_HandleTypeDef *hsd);
626 
627 #if defined (USE_HAL_SD_REGISTER_CALLBACKS) && (USE_HAL_SD_REGISTER_CALLBACKS == 1U)
628 /* SD callback registering/unregistering */
629 HAL_StatusTypeDef HAL_SD_RegisterCallback  (SD_HandleTypeDef *hsd, HAL_SD_CallbackIDTypeDef CallbackId, pSD_CallbackTypeDef pCallback);
630 HAL_StatusTypeDef HAL_SD_UnRegisterCallback(SD_HandleTypeDef *hsd, HAL_SD_CallbackIDTypeDef CallbackId);
631 #endif /* USE_HAL_SD_REGISTER_CALLBACKS */
632 
633 /**
634   * @}
635   */
636 
637 /** @defgroup SD_Exported_Functions_Group3 Peripheral Control functions
638   * @{
639   */
640 HAL_StatusTypeDef HAL_SD_ConfigWideBusOperation(SD_HandleTypeDef *hsd, uint32_t WideMode);
641 /**
642   * @}
643   */
644 
645 /** @defgroup SD_Exported_Functions_Group4 SD card related functions
646   * @{
647   */
648 HAL_StatusTypeDef       HAL_SD_SendSDStatus(SD_HandleTypeDef *hsd, uint32_t *pSDstatus);
649 HAL_SD_CardStateTypeDef HAL_SD_GetCardState(SD_HandleTypeDef *hsd);
650 HAL_StatusTypeDef       HAL_SD_GetCardCID(SD_HandleTypeDef *hsd, HAL_SD_CardCIDTypeDef *pCID);
651 HAL_StatusTypeDef       HAL_SD_GetCardCSD(SD_HandleTypeDef *hsd, HAL_SD_CardCSDTypeDef *pCSD);
652 HAL_StatusTypeDef       HAL_SD_GetCardStatus(SD_HandleTypeDef *hsd, HAL_SD_CardStatusTypeDef *pStatus);
653 HAL_StatusTypeDef       HAL_SD_GetCardInfo(SD_HandleTypeDef *hsd, HAL_SD_CardInfoTypeDef *pCardInfo);
654 /**
655   * @}
656   */
657 
658 /** @defgroup SD_Exported_Functions_Group5 Peripheral State and Errors functions
659   * @{
660   */
661 HAL_SD_StateTypeDef HAL_SD_GetState(SD_HandleTypeDef *hsd);
662 uint32_t HAL_SD_GetError(SD_HandleTypeDef *hsd);
663 /**
664   * @}
665   */
666 
667 /** @defgroup SD_Exported_Functions_Group6 Perioheral Abort management
668   * @{
669   */
670 HAL_StatusTypeDef HAL_SD_Abort(SD_HandleTypeDef *hsd);
671 HAL_StatusTypeDef HAL_SD_Abort_IT(SD_HandleTypeDef *hsd);
672 /**
673   * @}
674   */
675 
676 /* Private types -------------------------------------------------------------*/
677 /** @defgroup SD_Private_Types SD Private Types
678   * @{
679   */
680 
681 /**
682   * @}
683   */
684 
685 /* Private defines -----------------------------------------------------------*/
686 /** @defgroup SD_Private_Defines SD Private Defines
687   * @{
688   */
689 
690 /**
691   * @}
692   */
693 
694 /* Private variables ---------------------------------------------------------*/
695 /** @defgroup SD_Private_Variables SD Private Variables
696   * @{
697   */
698 
699 /**
700   * @}
701   */
702 
703 /* Private constants ---------------------------------------------------------*/
704 /** @defgroup SD_Private_Constants SD Private Constants
705   * @{
706   */
707 
708 /**
709   * @}
710   */
711 
712 /* Private macros ------------------------------------------------------------*/
713 /** @defgroup SD_Private_Macros SD Private Macros
714   * @{
715   */
716 
717 /**
718   * @}
719   */
720 
721 /* Private functions prototypes ----------------------------------------------*/
722 /** @defgroup SD_Private_Functions_Prototypes SD Private Functions Prototypes
723   * @{
724   */
725 
726 /**
727   * @}
728   */
729 
730 /* Private functions ---------------------------------------------------------*/
731 /** @defgroup SD_Private_Functions SD Private Functions
732   * @{
733   */
734 
735 /**
736   * @}
737   */
738 
739 
740 /**
741   * @}
742   */
743 
744 /**
745   * @}
746   */
747 
748 /**
749   * @}
750   */
751 
752 #endif /* SDIO */
753 
754 #ifdef __cplusplus
755 }
756 #endif
757 
758 
759 #endif /* STM32F1xx_HAL_SD_H */
760 
761 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
762