1 /**
2   **********************************************************************************************************************
3   * @file    stm32h7xx_hal_sdio.h
4   * @author  MCD Application Team
5   * @brief   Header file of SDIO HAL module.
6   **********************************************************************************************************************
7   * @attention
8   *
9   * Copyright (c) 2017 STMicroelectronics.
10   * All rights reserved.
11   *
12   * This software is licensed under terms that can be found in the LICENSE file
13   * in the root directory of this software component.
14   * If no LICENSE file comes with this software, it is provided AS-IS.
15   *
16   **********************************************************************************************************************
17   */
18 
19 /* Define to prevent recursive inclusion -----------------------------------------------------------------------------*/
20 #ifndef STM32H7xx_HAL_SDIO_H
21 #define STM32H7xx_HAL_SDIO_H
22 
23 #ifdef __cplusplus
24 extern "C" {
25 #endif
26 
27 /* Includes ----------------------------------------------------------------------------------------------------------*/
28 #include "stm32h7xx_ll_sdmmc.h"
29 
30 /** @addtogroup STM32U5xx_HAL_Driver
31   * @{
32   */
33 #if defined (SDMMC1) || defined (SDMMC2)
34 
35 /** @defgroup SDIO SDIO
36   * @brief SDIO HAL module driver
37   * @{
38   */
39 
40 /* Exported types ----------------------------------------------------------------------------------------------------*/
41 /** @defgroup SDIO_Exported_Types SDIO Exported Types
42   * @{
43   */
44 
45 /** @defgroup SDIO_Exported_Types_Group1 SDIO State enumeration structure
46   * @{
47 
48   */
49 typedef enum
50 {
51   HAL_SDIO_STATE_RESET = 0x00U, /*!< SDIO not yet initialized or disabled */
52   HAL_SDIO_STATE_READY = 0x01U, /*!< SDIO initialized and ready for us    */
53   HAL_SDIO_STATE_BUSY  = 0x02U, /*!< SDIO process ongoing                 */
54 } HAL_SDIO_StateTypeDef;
55 
56 /**
57   * @}
58   */
59 
60 /** @defgroup SDIO_Exported_Types_Group2 SDIO Handle and Structure definition
61   * @{
62   */
63 /**
64   * @brief  SDIO Card Common Control Register Structure definition
65   */
66 typedef struct
67 {
68   uint8_t sdio_revision;     /*!< SDIO revision                */
69   uint8_t cccr_revision;     /*!< CCCR version                 */
70   uint8_t sd_spec_revision;  /*!< SD revision                  */
71   uint8_t bus_width_8Bit;    /*!< SDIO bus width 8 bit support */
72   uint32_t card_capability;  /*!< SDIO card capability         */
73   uint32_t commonCISPointer; /*!< point to common CIS          */
74 } HAL_SDIO_CCCR_TypeDef;
75 
76 /**
77   * @brief sdio card FBR register(Function Basic Register)
78   */
79 typedef struct
80 {
81   uint8_t flags;             /*!< SDIO current IO flags                  */
82   uint8_t ioStdFunctionCode; /*!< SDIO current IO standard function code */
83   uint8_t ioExtFunctionCode; /*!< SDIO current IO extended function code */
84   uint32_t ioPointerToCIS;   /*!< SDIO current IO pointer to CIS         */
85   uint32_t ioPointerToCSA;   /*!< SDIO current IO pointer to CSA         */
86 } HAL_SDIO_FBR_t;
87 
88 /**
89   * @brief  SDIO CMD52 Structure definition
90   */
91 typedef struct
92 {
93   uint32_t Reg_Addr;       /*!< This is the address of the byte of data inside of the selected function to read or write */
94   uint8_t  ReadAfterWrite; /*!< This is the read after write flag, it is used for write access only.                     */
95   uint8_t  IOFunctionNbr;  /*!< The number of the function within the IO card you wish to read or write                  */
96 } HAL_SDIO_DirectCmd_TypeDef;
97 
98 /**
99   * @brief  SDIO CMD53 Structure definition
100   */
101 typedef struct
102 {
103   uint32_t Reg_Addr;      /*!< This is the address of the byte of data inside of the selected function to read or write */
104   uint32_t OpCode;        /*!< Read/Write operation mode                                                                */
105   uint32_t Block_Mode;    /*!< Bytes or Blocks mode                                                                     */
106   uint32_t IOFunctionNbr; /*!< The number of the function within the IO card you wish to read or write                  */
107 } HAL_SDIO_ExtendedCmd_TypeDef;
108 
109 #define SDIO_InitTypeDef      SDMMC_InitTypeDef
110 #define SDIO_TypeDef          SDMMC_TypeDef
111 
112 /**
113   * @brief  SDIO handle Structure definition
114   */
115 typedef struct __SDIO_HandleTypeDef
116 {
117   SDIO_TypeDef                   *Instance;        /*!< SDIO registers base address                             */
118 
119   SDIO_InitTypeDef               Init;              /*!< SDIO required parameters                               */
120 
121   HAL_LockTypeDef                Lock;              /*!< SDIO locking object                                    */
122 
123   uint8_t                        *pTxBuffPtr;       /*!< Pointer to SDIO Tx transfer Buffer                     */
124 
125   uint32_t                       TxXferSize;        /*!< SDIO Tx Transfer size                                  */
126 
127   uint8_t                        *pRxBuffPtr;       /*!< Pointer to SDIO Rx transfer Buffer                     */
128 
129   uint32_t                       RxXferSize;        /*!< SDIO Rx Transfer size                                  */
130 
131   uint32_t                       remaining_data;    /*!< Remaining data to transfer                             */
132 
133   uint32_t                       next_data_addr;    /*!< SDIO Next data address                                 */
134 
135   __IO uint32_t                  next_reg_addr;     /*!< SDIO Next register address                             */
136 
137   uint16_t                       block_size;        /*!< SDIO Block size                                        */
138 
139   __IO uint32_t                  Context;           /*!< SDIO transfer context                                  */
140 
141   __IO HAL_SDIO_StateTypeDef     State;             /*!< SDIO card State                                        */
142 
143   __IO uint32_t                  ErrorCode;         /*!< SDIO Card Error codes                                  */
144 
145   uint8_t                        IOFunctionMask;    /*!< SDIO used to record current enabled io interrupt       */
146 
147   volatile uint8_t               IOInterruptNbr;    /*!< SDIO used to record total enabled io interrupt numbers */
148 
149   void (* SDIO_IOFunction_Callback[SDIO_MAX_IO_NUMBER])(struct __SDIO_HandleTypeDef *hsdio, uint32_t func);
150 
151 #if defined (USE_HAL_SDIO_REGISTER_CALLBACKS) && (USE_HAL_SDIO_REGISTER_CALLBACKS == 1U)
152   void (* TxCpltCallback)(struct __SDIO_HandleTypeDef *hsdio);
153   void (* RxCpltCallback)(struct __SDIO_HandleTypeDef *hsdio);
154   void (* ErrorCallback)(struct __SDIO_HandleTypeDef *hsdio);
155   void (* MspInitCallback)(struct __SDIO_HandleTypeDef *hsdio);
156   void (* MspDeInitCallback)(struct __SDIO_HandleTypeDef *hsdio);
157 #endif /* USE_HAL_SDIO_REGISTER_CALLBACKS */
158 
159 #if (USE_SDIO_TRANSCEIVER != 0U)
160   void (* DriveTransceiver_1_8V_Callback)(struct __SDIO_HandleTypeDef *hsdio, FlagStatus status);
161 #endif /* USE_SDIO_TRANSCEIVER */
162 
163   HAL_StatusTypeDef(* SDIO_IdentifyCard)(struct __SDIO_HandleTypeDef *hsdio);
164 
165 } SDIO_HandleTypeDef;
166 
167 /**
168   * @}
169   */
170 #if defined (USE_HAL_SDIO_REGISTER_CALLBACKS) && (USE_HAL_SDIO_REGISTER_CALLBACKS == 1U)
171 /** @defgroup SDIO_Exported_Types_Group3 SDIO Callback ID enumeration definition
172   * @{
173   */
174 typedef enum
175 {
176   HAL_SDIO_TX_CPLT_CB_ID    = 0x00U,  /*!< SDIO Tx Complete Callback ID */
177   HAL_SDIO_RX_CPLT_CB_ID    = 0x01U,  /*!< SDIO Rx Complete Callback ID */
178   HAL_SDIO_ERROR_CB_ID      = 0x02U,  /*!< SDIO Error Callback ID       */
179   HAL_SDIO_MSP_INIT_CB_ID   = 0x10U,  /*!< SDIO MspInit Callback ID     */
180   HAL_SDIO_MSP_DEINIT_CB_ID = 0x11U   /*!< SDIO MspDeInit Callback ID   */
181 } HAL_SDIO_CallbackIDTypeDef;
182 /**
183   * @}
184   */
185 
186 /** @defgroup SDIO_Exported_Types_Group4 SDIO Callback pointer definition
187   * @{
188   */
189 typedef void (*pSDIO_CallbackTypeDef)(SDIO_HandleTypeDef *hsdio);
190 /**
191   * @}
192   */
193 #endif /* USE_HAL_SDIO_REGISTER_CALLBACKS */
194 
195 #if (USE_SDIO_TRANSCEIVER != 0U)
196 typedef void (*pSDIO_TransceiverCallbackTypeDef)(SDIO_HandleTypeDef *hsdio, FlagStatus status);
197 #endif /* USE_SDIO_TRANSCEIVER */
198 
199 typedef HAL_StatusTypeDef(*pSDIO_IdentifyCardCallbackTypeDef)(SDIO_HandleTypeDef *hsdio);
200 typedef void (*HAL_SDIO_IOFunction_CallbackTypeDef)(SDIO_HandleTypeDef *hsdio, uint32_t func);
201 /**
202   * @}
203   */
204 
205 /* Exported constants ------------------------------------------------------------------------------------------------*/
206 /** @defgroup SDIO_Exported_Constants SDIO Exported Constants
207   * @{
208   */
209 
210 /** @defgroup SDIO_Exported_Constansts_Group1 SDIO Error status Structure definition
211   * @{
212   */
213 #define HAL_SDIO_ERROR_NONE             SDMMC_ERROR_NONE              /*!< No error                                    */
214 #define HAL_SDIO_ERROR_DATA_CRC_FAIL    SDMMC_ERROR_DATA_CRC_FAIL     /*!< Data block sent/received (CRC check failed) */
215 #define HAL_SDIO_ERROR_DATA_TIMEOUT     SDMMC_ERROR_DATA_TIMEOUT      /*!< Data timeout                                */
216 #define HAL_SDIO_ERROR_TX_UNDERRUN      SDMMC_ERROR_TX_UNDERRUN       /*!< Transmit FIFO underrun                      */
217 #define HAL_SDIO_ERROR_RX_OVERRUN       SDMMC_ERROR_RX_OVERRUN        /*!< Receive FIFO overrun                        */
218 #define HAL_SDIO_ERROR_TIMEOUT          SDMMC_ERROR_TIMEOUT           /*!< Timeout error                               */
219 #define HAL_SDIO_ERROR_INVALID_CALLBACK SDMMC_ERROR_INVALID_PARAMETER /*!< Invalid callback error                      */
220 /**
221   * @}
222   */
223 
224 /** @defgroup SDIO_Exported_Constansts_Group2 SDIO context enumeration
225   * @{
226   */
227 #define SDIO_CONTEXT_NONE                 0x00U /*!< None                             */
228 #define SDIO_CONTEXT_READ_SINGLE_BLOCK    0x01U /*!< Read single block operation      */
229 #define SDIO_CONTEXT_READ_MULTIPLE_BLOCK  0x02U /*!< Read multiple blocks operation   */
230 #define SDIO_CONTEXT_WRITE_SINGLE_BLOCK   0x10U /*!< Write single block operation     */
231 #define SDIO_CONTEXT_WRITE_MULTIPLE_BLOCK 0x20U /*!< Write multiple blocks operation  */
232 #define SDIO_CONTEXT_IT                   0x08U /*!< Process in Interrupt mode        */
233 #define SDIO_CONTEXT_DMA                  0x80U /*!< Process in DMA mode              */
234 /**
235   * @}
236   */
237 
238 /** @defgroup SDIO_Exported_Constansts_Group3 SDIO Block mode enumeration
239   * @{
240   */
241 #define HAL_SDIO_MODE_BYTE   SDMMC_SDIO_MODE_BYTE
242 #define HAL_SDIO_MODE_BLOCK  SDMMC_SDIO_MODE_BLOCK
243 /**
244   * @}
245   */
246 
247 /** @defgroup SDIO_Exported_Constansts_Group4 SDIO operation code enumeration
248   * @{
249   */
250 #define HAL_SDIO_OP_CODE_NO_INC    SDMMC_SDIO_NO_INC
251 #define HAL_SDIO_OP_CODE_AUTO_INC  SDMMC_SDIO_AUTO_INC
252 /**
253   * @}
254   */
255 
256 /** @defgroup SDIO_Exported_Constansts_Group5 SDIO Read After Write(RAW) enumeration
257   * @{
258   */
259 #define HAL_SDIO_WRITE_ONLY       SDMMC_SDIO_WO  /*!< SDIO Write only       */
260 #define HAL_SDIO_READ_AFTER_WRITE SDMMC_SDIO_RAW /*!< SDIO Read after write */
261 /**
262   * @}
263   */
264 
265 /** @defgroup SDIO_Exported_Constansts_Group6 SDIO wire mode enumeration
266   * @{
267   */
268 #define HAL_SDIO_1_WIRE_MODE   0U /*!< SDIO wire support 1 wire  */
269 #define HAL_SDIO_4_WIRES_MODE  1U /*!< SDIO wire support 4 wires */
270 /**
271   * @}
272   */
273 
274 /** @defgroup SDIO_Exported_Constansts_Group7 SDIO Data block size enumeration
275   * @{
276   */
277 #define HAL_SDIO_DATA_BLOCK_SIZE_1BYTE     1U    /*!< SDIO data block size 1 byte    */
278 #define HAL_SDIO_DATA_BLOCK_SIZE_2BYTE     2U    /*!< SDIO data block size 2 byte    */
279 #define HAL_SDIO_DATA_BLOCK_SIZE_4BYTE     4U    /*!< SDIO data block size 4 byte    */
280 #define HAL_SDIO_DATA_BLOCK_SIZE_8BYTE     8U    /*!< SDIO data block size 8 byte    */
281 #define HAL_SDIO_DATA_BLOCK_SIZE_16BYTE    16U   /*!< SDIO data block size 16 byte   */
282 #define HAL_SDIO_DATA_BLOCK_SIZE_32BYTE    32U   /*!< SDIO data block size 32 byte   */
283 #define HAL_SDIO_DATA_BLOCK_SIZE_64BYTE    64U   /*!< SDIO data block size 64 byte   */
284 #define HAL_SDIO_DATA_BLOCK_SIZE_128BYTE   128U  /*!< SDIO data block size 128 byte  */
285 #define HAL_SDIO_DATA_BLOCK_SIZE_256BYTE   256U  /*!< SDIO data block size 256 byte  */
286 #define HAL_SDIO_DATA_BLOCK_SIZE_512BYTE   512U  /*!< SDIO data block size 512 byte  */
287 #define HAL_SDIO_DATA_BLOCK_SIZE_1024BYTE  1024U /*!< SDIO data block size 1024 byte */
288 #define HAL_SDIO_DATA_BLOCK_SIZE_2048BYTE  2048U /*!< SDIO data block size 2048 byte */
289 /**
290   * @}
291   */
292 
293 /** @defgroup SDIO_Exported_Constansts_Group8 SDIO Bus Width enumeration
294   * @{
295   */
296 #define HAL_SDIO_BUS_WIDTH_8BIT_NOT_SUPPORTED 0U /*!< SDIO bus width 8 bit is not supported */
297 #define HAL_SDIO_BUS_WIDTH_8BIT_SUPPORTED     1U /*!< SDIO bus width 8 bit is supported     */
298 /**
299   * @}
300   */
301 
302 /** @defgroup SDIO_Exported_Constansts_Group9 SDIO Data rate definitions
303   * @{
304   */
305 #define HAL_SDIOS_DATA_RATE_SDR12  0U /*!< SDIO Data rate SDR12 */
306 #define HAL_SDIOS_DATA_RATE_SDR25  1U /*!< SDIO Data rate SDR25 */
307 #define HAL_SDIOS_DATA_RATE_SDR50  2U /*!< SDIO Data rate SDR50 */
308 #define HAL_SDIOS_DATA_RATE_DDR50  3U /*!< SDIO Data rate DDR50 */
309 /**
310   * @}
311   */
312 
313 /** @defgroup SDIO_Exported_Constansts_Group10 SDIO Functions definitions
314   * @{
315   */
316 #define HAL_SDIO_FUNCTION_0  0U /*!< SDIO function 0 */
317 #define HAL_SDIO_FUNCTION_1  1U /*!< SDIO function 1 */
318 #define HAL_SDIO_FUNCTION_2  2U /*!< SDIO function 2 */
319 #define HAL_SDIO_FUNCTION_3  3U /*!< SDIO function 3 */
320 #define HAL_SDIO_FUNCTION_4  4U /*!< SDIO function 4 */
321 #define HAL_SDIO_FUNCTION_5  5U /*!< SDIO function 5 */
322 #define HAL_SDIO_FUNCTION_6  6U /*!< SDIO function 6 */
323 #define HAL_SDIO_FUNCTION_7  7U /*!< SDIO function 7 */
324 /**
325   * @}
326   */
327 
328 /** @defgroup SDIO_Exported_Constansts_Group11 SDIO FBR definitions
329   * @{
330   */
331 #define HAL_SDIO_FBR_SUPPORT_CSA             1U /*!< SDIO function support CSA             */
332 #define HAL_SDIO_FBR_SUPPORT_POWER_SELECTION 1U /*!< SDIO function support power selection */
333 /**
334   * @}
335   */
336 
337 /**
338   * @}
339   */
340 /* Exported macro ----------------------------------------------------------------------------------------------------*/
341 /** @defgroup SDIO_Exported_macros SDIO Exported Macros
342   *  @brief macros to handle interrupts and specific clock configurations
343   * @{
344   */
345 /**
346   * @brief  Enable the SDIO device interrupt.
347   * @param  __HANDLE__ SDIO Handle.
348   * @param  __INTERRUPT__ specifies the SDMMC interrupt sources to be enabled.
349   *         This parameter can be one or a combination of @ref SDMMC_LL_Interrupt_sources.
350   * @retval None
351   */
352 #define __HAL_SDIO_ENABLE_IT(__HANDLE__, __INTERRUPT__) __SDMMC_ENABLE_IT((__HANDLE__)->Instance, (__INTERRUPT__))
353 
354 /**
355   * @brief  Disable the SDIO device interrupt.
356   * @param  __HANDLE__ SDIO Handle.
357   * @param  __INTERRUPT__ specifies the SDMMC interrupt sources to be disabled.
358   *          This parameter can be one or a combination of @ref SDMMC_LL_Interrupt_sources.
359   * @retval None
360   */
361 #define __HAL_SDIO_DISABLE_IT(__HANDLE__, __INTERRUPT__) __SDMMC_DISABLE_IT((__HANDLE__)->Instance, (__INTERRUPT__))
362 
363 /**
364   * @brief  Check whether the specified SDIO flag is set or not.
365   * @param  __HANDLE__ SDIO Handle.
366   * @param  __FLAG__ specifies the flag to check.
367   *          This parameter can be one of @ref SDMMC_LL_Flags.
368   * @retval The new state of SDIO FLAG (SET or RESET).
369   */
370 #define __HAL_SDIO_GET_FLAG(__HANDLE__, __FLAG__) __SDMMC_GET_FLAG((__HANDLE__)->Instance, (__FLAG__))
371 
372 /**
373   * @brief  Clear the SDIO's pending flags.
374   * @param  __HANDLE__ SDIO Handle.
375   * @param  __FLAG__ specifies the flag to clear.
376   *          This parameter can be one or a combination of @ref SDMMC_LL_Flags.
377   * @retval None
378   */
379 #define __HAL_SDIO_CLEAR_FLAG(__HANDLE__, __FLAG__) __SDMMC_CLEAR_FLAG((__HANDLE__)->Instance, (__FLAG__))
380 
381 /**
382   * @brief  Check whether the specified SDIO interrupt has occurred or not.
383   * @param  __HANDLE__ SDIO Handle.
384   * @param  __INTERRUPT__ specifies the SDMMC interrupt source to check.
385   *          This parameter can be one of @ref SDMMC_LL_Interrupt_sources.
386   * @retval The new state of SDIO IT (SET or RESET).
387   */
388 #define __HAL_SDIO_GET_IT(__HANDLE__, __INTERRUPT__) __SDMMC_GET_IT((__HANDLE__)->Instance, (__INTERRUPT__))
389 
390 /**
391   * @brief  Checks whether the specified SDIO interrupt is enabled or not.
392   * @param  __HANDLE__    : SDIO handle.
393   * @param  __INTERRUPT__ : specifies the SDMMC interrupt source to check.
394   * @retval The state of SDIO IT (SET or RESET).
395   */
396 #define __HAL_SDIO_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) \
397   __SDMMC_GET_IT_SOURCE((__HANDLE__)->Instance, (__INTERRUPT__))
398 /**
399   * @}
400   */
401 
402 /* Exported functions ------------------------------------------------------------------------------------------------*/
403 /** @defgroup SDIO_Exported_Functions SDIO Exported Functions
404   * @{
405   */
406 /** @defgroup SDIO_Exported_Functions_Group1 Initialization and de-initialization functions
407   * @{
408   */
409 HAL_StatusTypeDef HAL_SDIO_Init(SDIO_HandleTypeDef *hsdio);
410 HAL_StatusTypeDef HAL_SDIO_DeInit(SDIO_HandleTypeDef *hsdio);
411 
412 void HAL_SDIO_MspInit(SDIO_HandleTypeDef *hsdio);
413 void HAL_SDIO_MspDeInit(SDIO_HandleTypeDef *hsdio);
414 /**
415   * @}
416   */
417 
418 /** @defgroup SDIO_Exported_Functions_Group2 Peripheral Control functions
419   * @{
420   */
421 HAL_StatusTypeDef HAL_SDIO_SetDataBusWidth(SDIO_HandleTypeDef *hsdio, uint32_t BusWide);
422 HAL_StatusTypeDef HAL_SDIO_ConfigFrequency(SDIO_HandleTypeDef *hsdio, uint32_t ClockSpeed);
423 
424 HAL_StatusTypeDef HAL_SDIO_SetBlockSize(SDIO_HandleTypeDef *hsdio, uint8_t function_nbr, uint16_t BlockSize);
425 HAL_StatusTypeDef HAL_SDIO_SetSpeedMode(SDIO_HandleTypeDef *hsdio, uint32_t DataRate);
426 
427 HAL_StatusTypeDef HAL_SDIO_CardReset(SDIO_HandleTypeDef *hsdio);
428 HAL_StatusTypeDef HAL_SDIO_GetCardCommonControlRegister(SDIO_HandleTypeDef *hsdio, HAL_SDIO_CCCR_TypeDef *pCccr);
429 HAL_StatusTypeDef HAL_SDIO_GetCardFBRRegister(SDIO_HandleTypeDef *hsdio, HAL_SDIO_FBR_t *pFbr);
430 /**
431   * @}
432   */
433 
434 /** @defgroup SDIO_Exported_Functions_Group3 Process functions
435   * @{
436   */
437 HAL_StatusTypeDef HAL_SDIO_ReadDirect(SDIO_HandleTypeDef *hsdio, HAL_SDIO_DirectCmd_TypeDef *Argument, uint8_t *pData);
438 HAL_StatusTypeDef HAL_SDIO_WriteDirect(SDIO_HandleTypeDef *hsdio, HAL_SDIO_DirectCmd_TypeDef *Argument, uint8_t Data);
439 
440 HAL_StatusTypeDef HAL_SDIO_ReadExtended(SDIO_HandleTypeDef *hsdio, HAL_SDIO_ExtendedCmd_TypeDef *Argument,
441                                         uint8_t *pData, uint32_t Size_byte, uint32_t Timeout_Ms);
442 
443 HAL_StatusTypeDef HAL_SDIO_WriteExtended(SDIO_HandleTypeDef *hsdio, HAL_SDIO_ExtendedCmd_TypeDef *Argument,
444                                          uint8_t *pData, uint32_t Size_byte, uint32_t Timeout_Ms);
445 
446 HAL_StatusTypeDef HAL_SDIO_ReadExtended_DMA(SDIO_HandleTypeDef *hsdio, HAL_SDIO_ExtendedCmd_TypeDef *Argument,
447                                             uint8_t *pData, uint32_t Size_byte);
448 
449 HAL_StatusTypeDef HAL_SDIO_WriteExtended_DMA(SDIO_HandleTypeDef *hsdio, HAL_SDIO_ExtendedCmd_TypeDef *Argument,
450                                              uint8_t *pData, uint32_t Size_byte);
451 /**
452   * @}
453   */
454 
455 /** @defgroup SDIO_Exported_Functions_Group4 IRQHandler and callback functions
456   * @{
457   */
458 void HAL_SDIO_IRQHandler(SDIO_HandleTypeDef *hsdio);
459 
460 void HAL_SDIO_TxCpltCallback(SDIO_HandleTypeDef *hsdio);
461 void HAL_SDIO_RxCpltCallback(SDIO_HandleTypeDef *hsdio);
462 void HAL_SDIO_ErrorCallback(SDIO_HandleTypeDef *hsdio);
463 void HAL_SDIO_IOFunctionCallback(SDIO_HandleTypeDef *hsdio, uint32_t func);
464 #if (USE_SDIO_TRANSCEIVER != 0U)
465 /* Callback to switch in 1.8V mode */
466 void HAL_SDIO_DriveTransceiver_1_8V_Callback(SDIO_HandleTypeDef *hsdio, FlagStatus status);
467 #endif /* USE_SDIO_TRANSCEIVER */
468 
469 #if defined (USE_HAL_SDIO_REGISTER_CALLBACKS) && (USE_HAL_SDIO_REGISTER_CALLBACKS == 1U)
470 HAL_StatusTypeDef HAL_SDIO_RegisterCallback(SDIO_HandleTypeDef *hsdio, HAL_SDIO_CallbackIDTypeDef CallbackID,
471                                             pSDIO_CallbackTypeDef pCallback);
472 
473 HAL_StatusTypeDef HAL_SDIO_UnRegisterCallback(SDIO_HandleTypeDef *hsdio, HAL_SDIO_CallbackIDTypeDef CallbackID);
474 #endif /* USE_HAL_SDIO_REGISTER_CALLBACKS */
475 
476 #if (USE_SDIO_TRANSCEIVER != 0U)
477 HAL_StatusTypeDef HAL_SDIO_RegisterTransceiverCallback(SDIO_HandleTypeDef *hsdio,
478                                                        pSDIO_TransceiverCallbackTypeDef pCallback);
479 HAL_StatusTypeDef HAL_SDIO_UnRegisterTransceiverCallback(SDIO_HandleTypeDef *hsdio);
480 #endif /* USE_SDIO_TRANSCEIVER */
481 
482 HAL_StatusTypeDef HAL_SDIO_RegisterIOFunctionCallback(SDIO_HandleTypeDef *hsdio, uint32_t IOFunction,
483                                                       HAL_SDIO_IOFunction_CallbackTypeDef pCallback);
484 
485 HAL_StatusTypeDef HAL_SDIO_RegisterIdentifyCardCallback(SDIO_HandleTypeDef *hsdio,
486                                                         pSDIO_IdentifyCardCallbackTypeDef pCallback);
487 /**
488   * @}
489   */
490 
491 /** @defgroup SDIO_Exported_Functions_Group5 Peripheral State and Errors functions
492   * @{
493   */
494 HAL_SDIO_StateTypeDef HAL_SDIO_GetState(const SDIO_HandleTypeDef *hsdio);
495 uint32_t              HAL_SDIO_GetError(const SDIO_HandleTypeDef *hsdio);
496 /**
497   * @}
498   */
499 
500 /** @defgroup SDIO_Exported_Functions_Group6 Peripheral IO interrupt
501   * @{
502   */
503 HAL_StatusTypeDef HAL_SDIO_EnableIOFunctionInterrupt(SDIO_HandleTypeDef *hsdio, uint32_t IOFunction);
504 HAL_StatusTypeDef HAL_SDIO_DisableIOFunctionInterrupt(SDIO_HandleTypeDef *hsdio, uint32_t IOFunction);
505 
506 HAL_StatusTypeDef HAL_SDIO_EnableIOFunction(SDIO_HandleTypeDef *hsdio, uint32_t IOFunction);
507 HAL_StatusTypeDef HAL_SDIO_DisableIOFunction(SDIO_HandleTypeDef *hsdio, uint32_t IOFunction);
508 
509 HAL_StatusTypeDef HAL_SDIO_SelectIOFunction(SDIO_HandleTypeDef *hsdio, uint32_t IOFunction);
510 HAL_StatusTypeDef HAL_SDIO_AbortIOFunction(SDIO_HandleTypeDef *hsdio, uint32_t IOFunction);
511 
512 HAL_StatusTypeDef HAL_SDIO_EnableIOAsynInterrupt(SDIO_HandleTypeDef *hsdio);
513 HAL_StatusTypeDef HAL_SDIO_DisableIOAsynInterrupt(SDIO_HandleTypeDef *hsdio);
514 
515 /**
516   * @}
517   */
518 
519 /* Private types -----------------------------------------------------------------------------------------------------*/
520 /** @defgroup SDIO_Private_Types SDIO Private Types
521   * @{
522   */
523 
524 /**
525   * @}
526   */
527 
528 /* Private defines ---------------------------------------------------------------------------------------------------*/
529 /** @defgroup SDIO_Private_Defines SDIO Private Defines
530   * @{
531   */
532 
533 /**
534   * @}
535   */
536 
537 /* Private variables -------------------------------------------------------------------------------------------------*/
538 /** @defgroup SDIO_Private_Variables SDIO Private Variables
539   * @{
540   */
541 
542 /**
543   * @}
544   */
545 
546 /* Private constants -------------------------------------------------------------------------------------------------*/
547 /** @defgroup SDIO_Private_Constants SDIO Private Constants
548   * @{
549   */
550 
551 /**
552   * @}
553   */
554 
555 /* Private macros ----------------------------------------------------------------------------------------------------*/
556 /** @defgroup SDIO_Private_Macros SDIO Private Macros
557   * @{
558   */
559 
560 /**
561   * @}
562   */
563 
564 /* Private functions prototypes --------------------------------------------------------------------------------------*/
565 /** @defgroup SDIO_Private_Functions_Prototypes SDIO Private Functions Prototypes
566   * @{
567   */
568 
569 /**
570   * @}
571   */
572 
573 /* Private functions -------------------------------------------------------------------------------------------------*/
574 /** @defgroup SDIO_Private_Functions SDIO Private Functions
575   * @{
576   */
577 
578 /**
579   * @}
580   */
581 
582 /**
583   * @}
584   */
585 
586 /**
587   * @}
588   */
589 #endif /* SDMMC1 || SDMMC2 */
590 
591 /**
592   * @}
593   */
594 
595 #ifdef __cplusplus
596 }
597 #endif
598 
599 
600 #endif /* STM32H7xx_HAL_SDIO_H */
601