1 /**
2   **********************************************************************************************************************
3   * @file    stm32n6xx_hal_sdio.h
4   * @author  MCD Application Team
5   * @brief   Header file of SDIO HAL module.
6   **********************************************************************************************************************
7   * @attention
8   *
9   * Copyright (c) 2023 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 STM32N6xx_HAL_SDIO_H
21 #define STM32N6xx_HAL_SDIO_H
22 
23 #ifdef __cplusplus
24 extern "C" {
25 #endif
26 
27 /* Includes ----------------------------------------------------------------------------------------------------------*/
28 #include "stm32n6xx_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 #if (USE_SDIO_TRANSCEIVER != 0U)
191 typedef void (*pSDIO_TransceiverCallbackTypeDef)(SDIO_HandleTypeDef *hsdio, FlagStatus status);
192 #endif /* USE_SDIO_TRANSCEIVER */
193 
194 typedef HAL_StatusTypeDef(*pSDIO_IdentifyCardCallbackTypeDef)(SDIO_HandleTypeDef *hsdio);
195 /**
196   * @}
197   */
198 #endif /* USE_HAL_SDIO_REGISTER_CALLBACKS */
199 
200 #if (USE_SDIO_TRANSCEIVER != 0U)
201 typedef void (*pSDIO_TransceiverCallbackTypeDef)(SDIO_HandleTypeDef *hsdio, FlagStatus status);
202 #endif /* USE_SDIO_TRANSCEIVER */
203 
204 typedef HAL_StatusTypeDef(*pSDIO_IdentifyCardCallbackTypeDef)(SDIO_HandleTypeDef *hsdio);
205 typedef void (*HAL_SDIO_IOFunction_CallbackTypeDef)(SDIO_HandleTypeDef *hsdio, uint32_t func);
206 /**
207   * @}
208   */
209 
210 /* Exported constants ------------------------------------------------------------------------------------------------*/
211 /** @defgroup SDIO_Exported_Constants SDIO Exported Constants
212   * @{
213   */
214 
215 /** @defgroup SDIO_Exported_Constansts_Group1 SDIO Error status Structure definition
216   * @{
217   */
218 #define HAL_SDIO_ERROR_NONE             SDMMC_ERROR_NONE              /*!< No error                                    */
219 #define HAL_SDIO_ERROR_DATA_CRC_FAIL    SDMMC_ERROR_DATA_CRC_FAIL     /*!< Data block sent/received (CRC check failed) */
220 #define HAL_SDIO_ERROR_DATA_TIMEOUT     SDMMC_ERROR_DATA_TIMEOUT      /*!< Data timeout                                */
221 #define HAL_SDIO_ERROR_TX_UNDERRUN      SDMMC_ERROR_TX_UNDERRUN       /*!< Transmit FIFO underrun                      */
222 #define HAL_SDIO_ERROR_RX_OVERRUN       SDMMC_ERROR_RX_OVERRUN        /*!< Receive FIFO overrun                        */
223 #define HAL_SDIO_ERROR_TIMEOUT          SDMMC_ERROR_TIMEOUT           /*!< Timeout error                               */
224 #define HAL_SDIO_ERROR_INVALID_CALLBACK SDMMC_ERROR_INVALID_PARAMETER /*!< Invalid callback error                      */
225 /**
226   * @}
227   */
228 
229 /** @defgroup SDIO_Exported_Constansts_Group2 SDIO context enumeration
230   * @{
231   */
232 #define SDIO_CONTEXT_NONE                 0x00U /*!< None                             */
233 #define SDIO_CONTEXT_READ_SINGLE_BLOCK    0x01U /*!< Read single block operation      */
234 #define SDIO_CONTEXT_READ_MULTIPLE_BLOCK  0x02U /*!< Read multiple blocks operation   */
235 #define SDIO_CONTEXT_WRITE_SINGLE_BLOCK   0x10U /*!< Write single block operation     */
236 #define SDIO_CONTEXT_WRITE_MULTIPLE_BLOCK 0x20U /*!< Write multiple blocks operation  */
237 #define SDIO_CONTEXT_IT                   0x08U /*!< Process in Interrupt mode        */
238 #define SDIO_CONTEXT_DMA                  0x80U /*!< Process in DMA mode              */
239 /**
240   * @}
241   */
242 
243 /** @defgroup SDIO_Exported_Constansts_Group3 SDIO Block mode enumeration
244   * @{
245   */
246 #define HAL_SDIO_MODE_BYTE   SDMMC_SDIO_MODE_BYTE
247 #define HAL_SDIO_MODE_BLOCK  SDMMC_SDIO_MODE_BLOCK
248 /**
249   * @}
250   */
251 
252 /** @defgroup SDIO_Exported_Constansts_Group4 SDIO operation code enumeration
253   * @{
254   */
255 #define HAL_SDIO_OP_CODE_NO_INC    SDMMC_SDIO_NO_INC
256 #define HAL_SDIO_OP_CODE_AUTO_INC  SDMMC_SDIO_AUTO_INC
257 /**
258   * @}
259   */
260 
261 /** @defgroup SDIO_Exported_Constansts_Group5 SDIO Read After Write(RAW) enumeration
262   * @{
263   */
264 #define HAL_SDIO_WRITE_ONLY       SDMMC_SDIO_WO  /*!< SDIO Write only       */
265 #define HAL_SDIO_READ_AFTER_WRITE SDMMC_SDIO_RAW /*!< SDIO Read after write */
266 /**
267   * @}
268   */
269 
270 /** @defgroup SDIO_Exported_Constansts_Group6 SDIO wire mode enumeration
271   * @{
272   */
273 #define HAL_SDIO_1_WIRE_MODE   0U /*!< SDIO wire support 1 wire  */
274 #define HAL_SDIO_4_WIRES_MODE  1U /*!< SDIO wire support 4 wires */
275 /**
276   * @}
277   */
278 
279 /** @defgroup SDIO_Exported_Constansts_Group7 SDIO Data block size enumeration
280   * @{
281   */
282 #define HAL_SDIO_DATA_BLOCK_SIZE_1BYTE     1U    /*!< SDIO data block size 1 byte    */
283 #define HAL_SDIO_DATA_BLOCK_SIZE_2BYTE     2U    /*!< SDIO data block size 2 byte    */
284 #define HAL_SDIO_DATA_BLOCK_SIZE_4BYTE     4U    /*!< SDIO data block size 4 byte    */
285 #define HAL_SDIO_DATA_BLOCK_SIZE_8BYTE     8U    /*!< SDIO data block size 8 byte    */
286 #define HAL_SDIO_DATA_BLOCK_SIZE_16BYTE    16U   /*!< SDIO data block size 16 byte   */
287 #define HAL_SDIO_DATA_BLOCK_SIZE_32BYTE    32U   /*!< SDIO data block size 32 byte   */
288 #define HAL_SDIO_DATA_BLOCK_SIZE_64BYTE    64U   /*!< SDIO data block size 64 byte   */
289 #define HAL_SDIO_DATA_BLOCK_SIZE_128BYTE   128U  /*!< SDIO data block size 128 byte  */
290 #define HAL_SDIO_DATA_BLOCK_SIZE_256BYTE   256U  /*!< SDIO data block size 256 byte  */
291 #define HAL_SDIO_DATA_BLOCK_SIZE_512BYTE   512U  /*!< SDIO data block size 512 byte  */
292 #define HAL_SDIO_DATA_BLOCK_SIZE_1024BYTE  1024U /*!< SDIO data block size 1024 byte */
293 #define HAL_SDIO_DATA_BLOCK_SIZE_2048BYTE  2048U /*!< SDIO data block size 2048 byte */
294 /**
295   * @}
296   */
297 
298 /** @defgroup SDIO_Exported_Constansts_Group8 SDIO Bus Width enumeration
299   * @{
300   */
301 #define HAL_SDIO_BUS_WIDTH_8BIT_NOT_SUPPORTED 0U /*!< SDIO bus width 8 bit is not supported */
302 #define HAL_SDIO_BUS_WIDTH_8BIT_SUPPORTED     1U /*!< SDIO bus width 8 bit is supported     */
303 /**
304   * @}
305   */
306 
307 /** @defgroup SDIO_Exported_Constansts_Group9 SDIO Data rate definitions
308   * @{
309   */
310 #define HAL_SDIOS_DATA_RATE_SDR12  0U /*!< SDIO Data rate SDR12 */
311 #define HAL_SDIOS_DATA_RATE_SDR25  1U /*!< SDIO Data rate SDR25 */
312 #define HAL_SDIOS_DATA_RATE_SDR50  2U /*!< SDIO Data rate SDR50 */
313 #define HAL_SDIOS_DATA_RATE_DDR50  3U /*!< SDIO Data rate DDR50 */
314 /**
315   * @}
316   */
317 
318 /** @defgroup SDIO_Exported_Constansts_Group10 SDIO Functions definitions
319   * @{
320   */
321 #define HAL_SDIO_FUNCTION_0  0U /*!< SDIO function 0 */
322 #define HAL_SDIO_FUNCTION_1  1U /*!< SDIO function 1 */
323 #define HAL_SDIO_FUNCTION_2  2U /*!< SDIO function 2 */
324 #define HAL_SDIO_FUNCTION_3  3U /*!< SDIO function 3 */
325 #define HAL_SDIO_FUNCTION_4  4U /*!< SDIO function 4 */
326 #define HAL_SDIO_FUNCTION_5  5U /*!< SDIO function 5 */
327 #define HAL_SDIO_FUNCTION_6  6U /*!< SDIO function 6 */
328 #define HAL_SDIO_FUNCTION_7  7U /*!< SDIO function 7 */
329 /**
330   * @}
331   */
332 
333 /** @defgroup SDIO_Exported_Constansts_Group11 SDIO FBR definitions
334   * @{
335   */
336 #define HAL_SDIO_FBR_SUPPORT_CSA             1U /*!< SDIO function support CSA             */
337 #define HAL_SDIO_FBR_SUPPORT_POWER_SELECTION 1U /*!< SDIO function support power selection */
338 /**
339   * @}
340   */
341 
342 /**
343   * @}
344   */
345 /* Exported macro ----------------------------------------------------------------------------------------------------*/
346 /** @defgroup SDIO_Exported_macros SDIO Exported Macros
347   *  @brief macros to handle interrupts and specific clock configurations
348   * @{
349   */
350 /**
351   * @brief  Enable the SDIO device interrupt.
352   * @param  __HANDLE__ SDIO Handle.
353   * @param  __INTERRUPT__ specifies the SDMMC interrupt sources to be enabled.
354   *         This parameter can be one or a combination of @ref SDMMC_LL_Interrupt_sources.
355   * @retval None
356   */
357 #define __HAL_SDIO_ENABLE_IT(__HANDLE__, __INTERRUPT__) __SDMMC_ENABLE_IT((__HANDLE__)->Instance, (__INTERRUPT__))
358 
359 /**
360   * @brief  Disable the SDIO device interrupt.
361   * @param  __HANDLE__ SDIO Handle.
362   * @param  __INTERRUPT__ specifies the SDMMC interrupt sources to be disabled.
363   *          This parameter can be one or a combination of @ref SDMMC_LL_Interrupt_sources.
364   * @retval None
365   */
366 #define __HAL_SDIO_DISABLE_IT(__HANDLE__, __INTERRUPT__) __SDMMC_DISABLE_IT((__HANDLE__)->Instance, (__INTERRUPT__))
367 
368 /**
369   * @brief  Check whether the specified SDIO flag is set or not.
370   * @param  __HANDLE__ SDIO Handle.
371   * @param  __FLAG__ specifies the flag to check.
372   *          This parameter can be one of @ref SDMMC_LL_Flags.
373   * @retval The new state of SDIO FLAG (SET or RESET).
374   */
375 #define __HAL_SDIO_GET_FLAG(__HANDLE__, __FLAG__) __SDMMC_GET_FLAG((__HANDLE__)->Instance, (__FLAG__))
376 
377 /**
378   * @brief  Clear the SDIO's pending flags.
379   * @param  __HANDLE__ SDIO Handle.
380   * @param  __FLAG__ specifies the flag to clear.
381   *          This parameter can be one or a combination of @ref SDMMC_LL_Flags.
382   * @retval None
383   */
384 #define __HAL_SDIO_CLEAR_FLAG(__HANDLE__, __FLAG__) __SDMMC_CLEAR_FLAG((__HANDLE__)->Instance, (__FLAG__))
385 
386 /**
387   * @brief  Check whether the specified SDIO interrupt has occurred or not.
388   * @param  __HANDLE__ SDIO Handle.
389   * @param  __INTERRUPT__ specifies the SDMMC interrupt source to check.
390   *          This parameter can be one of @ref SDMMC_LL_Interrupt_sources.
391   * @retval The new state of SDIO IT (SET or RESET).
392   */
393 #define __HAL_SDIO_GET_IT(__HANDLE__, __INTERRUPT__) __SDMMC_GET_IT((__HANDLE__)->Instance, (__INTERRUPT__))
394 
395 /**
396   * @brief  Checks whether the specified SDIO interrupt is enabled or not.
397   * @param  __HANDLE__    : SDIO handle.
398   * @param  __INTERRUPT__ : specifies the SDMMC interrupt source to check.
399   * @retval The state of SDIO IT (SET or RESET).
400   */
401 #define __HAL_SDIO_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) \
402   __SDMMC_GET_IT_SOURCE((__HANDLE__)->Instance, (__INTERRUPT__))
403 /**
404   * @}
405   */
406 
407 /* Exported functions ------------------------------------------------------------------------------------------------*/
408 /** @defgroup SDIO_Exported_Functions SDIO Exported Functions
409   * @{
410   */
411 /** @defgroup SDIO_Exported_Functions_Group1 Initialization and de-initialization functions
412   * @{
413   */
414 HAL_StatusTypeDef HAL_SDIO_Init(SDIO_HandleTypeDef *hsdio);
415 HAL_StatusTypeDef HAL_SDIO_DeInit(SDIO_HandleTypeDef *hsdio);
416 
417 void HAL_SDIO_MspInit(SDIO_HandleTypeDef *hsdio);
418 void HAL_SDIO_MspDeInit(SDIO_HandleTypeDef *hsdio);
419 /**
420   * @}
421   */
422 
423 /** @defgroup SDIO_Exported_Functions_Group2 Peripheral Control functions
424   * @{
425   */
426 HAL_StatusTypeDef HAL_SDIO_SetDataBusWidth(SDIO_HandleTypeDef *hsdio, uint32_t BusWide);
427 HAL_StatusTypeDef HAL_SDIO_ConfigFrequency(SDIO_HandleTypeDef *hsdio, uint32_t ClockSpeed);
428 
429 HAL_StatusTypeDef HAL_SDIO_SetBlockSize(SDIO_HandleTypeDef *hsdio, uint8_t function_nbr, uint16_t BlockSize);
430 HAL_StatusTypeDef HAL_SDIO_SetSpeedMode(SDIO_HandleTypeDef *hsdio, uint32_t DataRate);
431 
432 HAL_StatusTypeDef HAL_SDIO_CardReset(SDIO_HandleTypeDef *hsdio);
433 HAL_StatusTypeDef HAL_SDIO_GetCardCommonControlRegister(SDIO_HandleTypeDef *hsdio, HAL_SDIO_CCCR_TypeDef *pCccr);
434 HAL_StatusTypeDef HAL_SDIO_GetCardFBRRegister(SDIO_HandleTypeDef *hsdio, HAL_SDIO_FBR_t *pFbr);
435 /**
436   * @}
437   */
438 
439 /** @defgroup SDIO_Exported_Functions_Group3 Process functions
440   * @{
441   */
442 HAL_StatusTypeDef HAL_SDIO_ReadDirect(SDIO_HandleTypeDef *hsdio, HAL_SDIO_DirectCmd_TypeDef *Argument, uint8_t *pData);
443 HAL_StatusTypeDef HAL_SDIO_WriteDirect(SDIO_HandleTypeDef *hsdio, HAL_SDIO_DirectCmd_TypeDef *Argument, uint8_t Data);
444 
445 HAL_StatusTypeDef HAL_SDIO_ReadExtended(SDIO_HandleTypeDef *hsdio, HAL_SDIO_ExtendedCmd_TypeDef *Argument,
446                                         uint8_t *pData, uint32_t Size_byte, uint32_t Timeout_Ms);
447 
448 HAL_StatusTypeDef HAL_SDIO_WriteExtended(SDIO_HandleTypeDef *hsdio, HAL_SDIO_ExtendedCmd_TypeDef *Argument,
449                                          uint8_t *pData, uint32_t Size_byte, uint32_t Timeout_Ms);
450 
451 HAL_StatusTypeDef HAL_SDIO_ReadExtended_DMA(SDIO_HandleTypeDef *hsdio, HAL_SDIO_ExtendedCmd_TypeDef *Argument,
452                                             uint8_t *pData, uint32_t Size_byte);
453 
454 HAL_StatusTypeDef HAL_SDIO_WriteExtended_DMA(SDIO_HandleTypeDef *hsdio, HAL_SDIO_ExtendedCmd_TypeDef *Argument,
455                                              uint8_t *pData, uint32_t Size_byte);
456 /**
457   * @}
458   */
459 
460 /** @defgroup SDIO_Exported_Functions_Group4 IRQHandler and callback functions
461   * @{
462   */
463 void HAL_SDIO_IRQHandler(SDIO_HandleTypeDef *hsdio);
464 
465 void HAL_SDIO_TxCpltCallback(SDIO_HandleTypeDef *hsdio);
466 void HAL_SDIO_RxCpltCallback(SDIO_HandleTypeDef *hsdio);
467 void HAL_SDIO_ErrorCallback(SDIO_HandleTypeDef *hsdio);
468 void HAL_SDIO_IOFunctionCallback(SDIO_HandleTypeDef *hsdio, uint32_t func);
469 #if (USE_SDIO_TRANSCEIVER != 0U)
470 /* Callback to switch in 1.8V mode */
471 void HAL_SDIO_DriveTransceiver_1_8V_Callback(SDIO_HandleTypeDef *hsdio, FlagStatus status);
472 #endif /* USE_SDIO_TRANSCEIVER */
473 
474 #if defined (USE_HAL_SDIO_REGISTER_CALLBACKS) && (USE_HAL_SDIO_REGISTER_CALLBACKS == 1U)
475 HAL_StatusTypeDef HAL_SDIO_RegisterCallback(SDIO_HandleTypeDef *hsdio, HAL_SDIO_CallbackIDTypeDef CallbackID,
476                                             pSDIO_CallbackTypeDef pCallback);
477 
478 HAL_StatusTypeDef HAL_SDIO_UnRegisterCallback(SDIO_HandleTypeDef *hsdio, HAL_SDIO_CallbackIDTypeDef CallbackID);
479 #endif /* USE_HAL_SDIO_REGISTER_CALLBACKS */
480 
481 #if (USE_SDIO_TRANSCEIVER != 0U)
482 HAL_StatusTypeDef HAL_SDIO_RegisterTransceiverCallback(SDIO_HandleTypeDef *hsdio,
483                                                        pSDIO_TransceiverCallbackTypeDef pCallback);
484 HAL_StatusTypeDef HAL_SDIO_UnRegisterTransceiverCallback(SDIO_HandleTypeDef *hsdio);
485 #endif /* USE_SDIO_TRANSCEIVER */
486 
487 HAL_StatusTypeDef HAL_SDIO_RegisterIOFunctionCallback(SDIO_HandleTypeDef *hsdio, uint32_t IOFunction,
488                                                       HAL_SDIO_IOFunction_CallbackTypeDef pCallback);
489 
490 HAL_StatusTypeDef HAL_SDIO_RegisterIdentifyCardCallback(SDIO_HandleTypeDef *hsdio,
491                                                         pSDIO_IdentifyCardCallbackTypeDef pCallback);
492 /**
493   * @}
494   */
495 
496 /** @defgroup SDIO_Exported_Functions_Group5 Peripheral State and Errors functions
497   * @{
498   */
499 HAL_SDIO_StateTypeDef HAL_SDIO_GetState(const SDIO_HandleTypeDef *hsdio);
500 uint32_t              HAL_SDIO_GetError(const SDIO_HandleTypeDef *hsdio);
501 /**
502   * @}
503   */
504 
505 /** @defgroup SDIO_Exported_Functions_Group6 Peripheral IO interrupt
506   * @{
507   */
508 HAL_StatusTypeDef HAL_SDIO_EnableIOFunctionInterrupt(SDIO_HandleTypeDef *hsdio, uint32_t IOFunction);
509 HAL_StatusTypeDef HAL_SDIO_DisableIOFunctionInterrupt(SDIO_HandleTypeDef *hsdio, uint32_t IOFunction);
510 
511 HAL_StatusTypeDef HAL_SDIO_EnableIOFunction(SDIO_HandleTypeDef *hsdio, uint32_t IOFunction);
512 HAL_StatusTypeDef HAL_SDIO_DisableIOFunction(SDIO_HandleTypeDef *hsdio, uint32_t IOFunction);
513 
514 HAL_StatusTypeDef HAL_SDIO_SelectIOFunction(SDIO_HandleTypeDef *hsdio, uint32_t IOFunction);
515 HAL_StatusTypeDef HAL_SDIO_AbortIOFunction(SDIO_HandleTypeDef *hsdio, uint32_t IOFunction);
516 
517 HAL_StatusTypeDef HAL_SDIO_EnableIOAsynInterrupt(SDIO_HandleTypeDef *hsdio);
518 HAL_StatusTypeDef HAL_SDIO_DisableIOAsynInterrupt(SDIO_HandleTypeDef *hsdio);
519 
520 /**
521   * @}
522   */
523 
524 /* Private types -----------------------------------------------------------------------------------------------------*/
525 /** @defgroup SDIO_Private_Types SDIO Private Types
526   * @{
527   */
528 
529 /**
530   * @}
531   */
532 
533 /* Private defines ---------------------------------------------------------------------------------------------------*/
534 /** @defgroup SDIO_Private_Defines SDIO Private Defines
535   * @{
536   */
537 
538 /**
539   * @}
540   */
541 
542 /* Private variables -------------------------------------------------------------------------------------------------*/
543 /** @defgroup SDIO_Private_Variables SDIO Private Variables
544   * @{
545   */
546 
547 /**
548   * @}
549   */
550 
551 /* Private constants -------------------------------------------------------------------------------------------------*/
552 /** @defgroup SDIO_Private_Constants SDIO Private Constants
553   * @{
554   */
555 
556 /**
557   * @}
558   */
559 
560 /* Private macros ----------------------------------------------------------------------------------------------------*/
561 /** @defgroup SDIO_Private_Macros SDIO Private Macros
562   * @{
563   */
564 
565 /**
566   * @}
567   */
568 
569 /* Private functions prototypes --------------------------------------------------------------------------------------*/
570 /** @defgroup SDIO_Private_Functions_Prototypes SDIO Private Functions Prototypes
571   * @{
572   */
573 
574 /**
575   * @}
576   */
577 
578 /* Private functions -------------------------------------------------------------------------------------------------*/
579 /** @defgroup SDIO_Private_Functions SDIO Private Functions
580   * @{
581   */
582 
583 /**
584   * @}
585   */
586 
587 /**
588   * @}
589   */
590 
591 /**
592   * @}
593   */
594 #endif /* SDMMC1 || SDMMC2 */
595 
596 /**
597   * @}
598   */
599 
600 #ifdef __cplusplus
601 }
602 #endif
603 
604 
605 #endif /* STM32N6xx_HAL_SDIO_H */
606 
607