STM CMSIS
stm32f4xx_hal_sd.h
Go to the documentation of this file.
1 
38 /* Define to prevent recursive inclusion -------------------------------------*/
39 #ifndef __STM32F4xx_HAL_SD_H
40 #define __STM32F4xx_HAL_SD_H
41 
42 #ifdef __cplusplus
43  extern "C" {
44 #endif
45 #if defined(STM32F405xx) || defined(STM32F415xx) || defined(STM32F407xx) || defined(STM32F417xx) || \
46  defined(STM32F427xx) || defined(STM32F437xx) || defined(STM32F429xx) || defined(STM32F439xx) || \
47  defined(STM32F401xC) || defined(STM32F401xE) || defined(STM32F411xE) || defined(STM32F446xx) || \
48  defined(STM32F469xx) || defined(STM32F479xx) || defined(STM32F412Zx) || defined(STM32F412Vx) || \
49  defined(STM32F412Rx) || defined(STM32F412Cx)
50 /* Includes ------------------------------------------------------------------*/
51 #include "stm32f4xx_ll_sdmmc.h"
52 
62 /* Exported types ------------------------------------------------------------*/
70 #define SD_InitTypeDef SDIO_InitTypeDef
71 #define SD_TypeDef SDIO_TypeDef
72 
73 typedef struct
74 {
75  SD_TypeDef *Instance;
77  SD_InitTypeDef Init;
79  HAL_LockTypeDef Lock;
81  uint32_t CardType;
83  uint32_t RCA;
85  uint32_t CSD[4];
87  uint32_t CID[4];
89  __IO uint32_t SdTransferCplt;
91  __IO uint32_t SdTransferErr;
93  __IO uint32_t DmaTransferCplt;
95  __IO uint32_t SdOperation;
97  DMA_HandleTypeDef *hdmarx;
99  DMA_HandleTypeDef *hdmatx;
101 }SD_HandleTypeDef;
109 typedef struct
110 {
111  __IO uint8_t CSDStruct;
112  __IO uint8_t SysSpecVersion;
113  __IO uint8_t Reserved1;
114  __IO uint8_t TAAC;
115  __IO uint8_t NSAC;
116  __IO uint8_t MaxBusClkFrec;
117  __IO uint16_t CardComdClasses;
118  __IO uint8_t RdBlockLen;
119  __IO uint8_t PartBlockRead;
120  __IO uint8_t WrBlockMisalign;
121  __IO uint8_t RdBlockMisalign;
122  __IO uint8_t DSRImpl;
123  __IO uint8_t Reserved2;
124  __IO uint32_t DeviceSize;
125  __IO uint8_t MaxRdCurrentVDDMin;
126  __IO uint8_t MaxRdCurrentVDDMax;
127  __IO uint8_t MaxWrCurrentVDDMin;
128  __IO uint8_t MaxWrCurrentVDDMax;
129  __IO uint8_t DeviceSizeMul;
130  __IO uint8_t EraseGrSize;
131  __IO uint8_t EraseGrMul;
132  __IO uint8_t WrProtectGrSize;
133  __IO uint8_t WrProtectGrEnable;
134  __IO uint8_t ManDeflECC;
135  __IO uint8_t WrSpeedFact;
136  __IO uint8_t MaxWrBlockLen;
137  __IO uint8_t WriteBlockPaPartial;
138  __IO uint8_t Reserved3;
139  __IO uint8_t ContentProtectAppli;
140  __IO uint8_t FileFormatGrouop;
141  __IO uint8_t CopyFlag;
142  __IO uint8_t PermWrProtect;
143  __IO uint8_t TempWrProtect;
144  __IO uint8_t FileFormat;
145  __IO uint8_t ECC;
146  __IO uint8_t CSD_CRC;
147  __IO uint8_t Reserved4;
149 }HAL_SD_CSDTypedef;
157 typedef struct
158 {
159  __IO uint8_t ManufacturerID;
160  __IO uint16_t OEM_AppliID;
161  __IO uint32_t ProdName1;
162  __IO uint8_t ProdName2;
163  __IO uint8_t ProdRev;
164  __IO uint32_t ProdSN;
165  __IO uint8_t Reserved1;
166  __IO uint16_t ManufactDate;
167  __IO uint8_t CID_CRC;
168  __IO uint8_t Reserved2;
170 }HAL_SD_CIDTypedef;
178 typedef struct
179 {
180  __IO uint8_t DAT_BUS_WIDTH;
181  __IO uint8_t SECURED_MODE;
182  __IO uint16_t SD_CARD_TYPE;
183  __IO uint32_t SIZE_OF_PROTECTED_AREA;
184  __IO uint8_t SPEED_CLASS;
185  __IO uint8_t PERFORMANCE_MOVE;
186  __IO uint8_t AU_SIZE;
187  __IO uint16_t ERASE_SIZE;
188  __IO uint8_t ERASE_TIMEOUT;
189  __IO uint8_t ERASE_OFFSET;
191 }HAL_SD_CardStatusTypedef;
199 typedef struct
200 {
201  HAL_SD_CSDTypedef SD_csd;
202  HAL_SD_CIDTypedef SD_cid;
203  uint64_t CardCapacity;
204  uint32_t CardBlockSize;
205  uint16_t RCA;
206  uint8_t CardType;
208 }HAL_SD_CardInfoTypedef;
216 typedef enum
217 {
221  SD_CMD_CRC_FAIL = (1U),
222  SD_DATA_CRC_FAIL = (2U),
223  SD_CMD_RSP_TIMEOUT = (3U),
224  SD_DATA_TIMEOUT = (4U),
225  SD_TX_UNDERRUN = (5U),
226  SD_RX_OVERRUN = (6U),
227  SD_START_BIT_ERR = (7U),
228  SD_CMD_OUT_OF_RANGE = (8U),
229  SD_ADDR_MISALIGNED = (9U),
230  SD_BLOCK_LEN_ERR = (10U),
231  SD_ERASE_SEQ_ERR = (11U),
232  SD_BAD_ERASE_PARAM = (12U),
233  SD_WRITE_PROT_VIOLATION = (13U),
234  SD_LOCK_UNLOCK_FAILED = (14U),
235  SD_COM_CRC_FAILED = (15U),
236  SD_ILLEGAL_CMD = (16U),
237  SD_CARD_ECC_FAILED = (17U),
238  SD_CC_ERROR = (18U),
239  SD_GENERAL_UNKNOWN_ERROR = (19U),
240  SD_STREAM_READ_UNDERRUN = (20U),
241  SD_STREAM_WRITE_OVERRUN = (21U),
242  SD_CID_CSD_OVERWRITE = (22U),
243  SD_WP_ERASE_SKIP = (23U),
244  SD_CARD_ECC_DISABLED = (24U),
245  SD_ERASE_RESET = (25U),
246  SD_AKE_SEQ_ERROR = (26U),
247  SD_INVALID_VOLTRANGE = (27U),
248  SD_ADDR_OUT_OF_RANGE = (28U),
249  SD_SWITCH_ERROR = (29U),
250  SD_SDIO_DISABLED = (30U),
251  SD_SDIO_FUNCTION_BUSY = (31U),
252  SD_SDIO_FUNCTION_FAILED = (32U),
253  SD_SDIO_UNKNOWN_FUNCTION = (33U),
254 
258  SD_INTERNAL_ERROR = (34U),
259  SD_NOT_CONFIGURED = (35U),
260  SD_REQUEST_PENDING = (36U),
261  SD_REQUEST_NOT_APPLICABLE = (37U),
262  SD_INVALID_PARAMETER = (38U),
263  SD_UNSUPPORTED_FEATURE = (39U),
264  SD_UNSUPPORTED_HW = (40U),
265  SD_ERROR = (41U),
266  SD_OK = (0U)
267 
268 }HAL_SD_ErrorTypedef;
276 typedef enum
277 {
278  SD_TRANSFER_OK = 0U,
279  SD_TRANSFER_BUSY = 1U,
280  SD_TRANSFER_ERROR = 2U
282 }HAL_SD_TransferStateTypedef;
290 typedef enum
291 {
292  SD_CARD_READY = ((uint32_t)0x00000001U),
293  SD_CARD_IDENTIFICATION = ((uint32_t)0x00000002U),
294  SD_CARD_STANDBY = ((uint32_t)0x00000003U),
295  SD_CARD_TRANSFER = ((uint32_t)0x00000004U),
296  SD_CARD_SENDING = ((uint32_t)0x00000005U),
297  SD_CARD_RECEIVING = ((uint32_t)0x00000006U),
298  SD_CARD_PROGRAMMING = ((uint32_t)0x00000007U),
299  SD_CARD_DISCONNECTED = ((uint32_t)0x00000008U),
300  SD_CARD_ERROR = ((uint32_t)0x000000FFU)
302 }HAL_SD_CardStateTypedef;
310 typedef enum
311 {
312  SD_READ_SINGLE_BLOCK = 0U,
313  SD_READ_MULTIPLE_BLOCK = 1U,
314  SD_WRITE_SINGLE_BLOCK = 2U,
315  SD_WRITE_MULTIPLE_BLOCK = 3U
317 }HAL_SD_OperationTypedef;
326 /* Exported constants --------------------------------------------------------*/
334 #define SD_CMD_GO_IDLE_STATE ((uint8_t)0U)
335 #define SD_CMD_SEND_OP_COND ((uint8_t)1U)
336 #define SD_CMD_ALL_SEND_CID ((uint8_t)2U)
337 #define SD_CMD_SET_REL_ADDR ((uint8_t)3U)
338 #define SD_CMD_SET_DSR ((uint8_t)4U)
339 #define SD_CMD_SDIO_SEN_OP_COND ((uint8_t)5U)
341 #define SD_CMD_HS_SWITCH ((uint8_t)6U)
342 #define SD_CMD_SEL_DESEL_CARD ((uint8_t)7U)
343 #define SD_CMD_HS_SEND_EXT_CSD ((uint8_t)8U)
345 #define SD_CMD_SEND_CSD ((uint8_t)9U)
346 #define SD_CMD_SEND_CID ((uint8_t)10U)
347 #define SD_CMD_READ_DAT_UNTIL_STOP ((uint8_t)11U)
348 #define SD_CMD_STOP_TRANSMISSION ((uint8_t)12U)
349 #define SD_CMD_SEND_STATUS ((uint8_t)13U)
350 #define SD_CMD_HS_BUSTEST_READ ((uint8_t)14U)
351 #define SD_CMD_GO_INACTIVE_STATE ((uint8_t)15U)
352 #define SD_CMD_SET_BLOCKLEN ((uint8_t)16U)
355 #define SD_CMD_READ_SINGLE_BLOCK ((uint8_t)17U)
357 #define SD_CMD_READ_MULT_BLOCK ((uint8_t)18U)
359 #define SD_CMD_HS_BUSTEST_WRITE ((uint8_t)19U)
360 #define SD_CMD_WRITE_DAT_UNTIL_STOP ((uint8_t)20U)
361 #define SD_CMD_SET_BLOCK_COUNT ((uint8_t)23U)
362 #define SD_CMD_WRITE_SINGLE_BLOCK ((uint8_t)24U)
364 #define SD_CMD_WRITE_MULT_BLOCK ((uint8_t)25U)
365 #define SD_CMD_PROG_CID ((uint8_t)26U)
366 #define SD_CMD_PROG_CSD ((uint8_t)27U)
367 #define SD_CMD_SET_WRITE_PROT ((uint8_t)28U)
368 #define SD_CMD_CLR_WRITE_PROT ((uint8_t)29U)
369 #define SD_CMD_SEND_WRITE_PROT ((uint8_t)30U)
370 #define SD_CMD_SD_ERASE_GRP_START ((uint8_t)32U)
371 #define SD_CMD_SD_ERASE_GRP_END ((uint8_t)33U)
372 #define SD_CMD_ERASE_GRP_START ((uint8_t)35U)
374 #define SD_CMD_ERASE_GRP_END ((uint8_t)36U)
376 #define SD_CMD_ERASE ((uint8_t)38U)
377 #define SD_CMD_FAST_IO ((uint8_t)39U)
378 #define SD_CMD_GO_IRQ_STATE ((uint8_t)40U)
379 #define SD_CMD_LOCK_UNLOCK ((uint8_t)42U)
381 #define SD_CMD_APP_CMD ((uint8_t)55U)
383 #define SD_CMD_GEN_CMD ((uint8_t)56U)
385 #define SD_CMD_NO_CMD ((uint8_t)64U)
386 
391 #define SD_CMD_APP_SD_SET_BUSWIDTH ((uint8_t)6U)
393 #define SD_CMD_SD_APP_STATUS ((uint8_t)13U)
394 #define SD_CMD_SD_APP_SEND_NUM_WRITE_BLOCKS ((uint8_t)22U)
396 #define SD_CMD_SD_APP_OP_COND ((uint8_t)41U)
398 #define SD_CMD_SD_APP_SET_CLR_CARD_DETECT ((uint8_t)42U)
399 #define SD_CMD_SD_APP_SEND_SCR ((uint8_t)51U)
400 #define SD_CMD_SDIO_RW_DIRECT ((uint8_t)52U)
401 #define SD_CMD_SDIO_RW_EXTENDED ((uint8_t)53U)
407 #define SD_CMD_SD_APP_GET_MKB ((uint8_t)43U)
408 #define SD_CMD_SD_APP_GET_MID ((uint8_t)44U)
409 #define SD_CMD_SD_APP_SET_CER_RN1 ((uint8_t)45U)
410 #define SD_CMD_SD_APP_GET_CER_RN2 ((uint8_t)46U)
411 #define SD_CMD_SD_APP_SET_CER_RES2 ((uint8_t)47U)
412 #define SD_CMD_SD_APP_GET_CER_RES1 ((uint8_t)48U)
413 #define SD_CMD_SD_APP_SECURE_READ_MULTIPLE_BLOCK ((uint8_t)18U)
414 #define SD_CMD_SD_APP_SECURE_WRITE_MULTIPLE_BLOCK ((uint8_t)25U)
415 #define SD_CMD_SD_APP_SECURE_ERASE ((uint8_t)38U)
416 #define SD_CMD_SD_APP_CHANGE_SECURE_AREA ((uint8_t)49U)
417 #define SD_CMD_SD_APP_SECURE_WRITE_MKB ((uint8_t)48U)
422 #define STD_CAPACITY_SD_CARD_V1_1 ((uint32_t)0x00000000U)
423 #define STD_CAPACITY_SD_CARD_V2_0 ((uint32_t)0x00000001U)
424 #define HIGH_CAPACITY_SD_CARD ((uint32_t)0x00000002U)
425 #define MULTIMEDIA_CARD ((uint32_t)0x00000003U)
426 #define SECURE_DIGITAL_IO_CARD ((uint32_t)0x00000004U)
427 #define HIGH_SPEED_MULTIMEDIA_CARD ((uint32_t)0x00000005U)
428 #define SECURE_DIGITAL_IO_COMBO_CARD ((uint32_t)0x00000006U)
429 #define HIGH_CAPACITY_MMC_CARD ((uint32_t)0x00000007U)
430 
434 /* Exported macro ------------------------------------------------------------*/
444 #define __HAL_SD_SDIO_ENABLE() __SDIO_ENABLE()
445 
450 #define __HAL_SD_SDIO_DISABLE() __SDIO_DISABLE()
451 
456 #define __HAL_SD_SDIO_DMA_ENABLE() __SDIO_DMA_ENABLE()
457 
462 #define __HAL_SD_SDIO_DMA_DISABLE() __SDIO_DMA_DISABLE()
463 
496 #define __HAL_SD_SDIO_ENABLE_IT(__HANDLE__, __INTERRUPT__) __SDIO_ENABLE_IT((__HANDLE__)->Instance, (__INTERRUPT__))
497 
530 #define __HAL_SD_SDIO_DISABLE_IT(__HANDLE__, __INTERRUPT__) __SDIO_DISABLE_IT((__HANDLE__)->Instance, (__INTERRUPT__))
531 
563 #define __HAL_SD_SDIO_GET_FLAG(__HANDLE__, __FLAG__) __SDIO_GET_FLAG((__HANDLE__)->Instance, (__FLAG__))
564 
585 #define __HAL_SD_SDIO_CLEAR_FLAG(__HANDLE__, __FLAG__) __SDIO_CLEAR_FLAG((__HANDLE__)->Instance, (__FLAG__))
586 
619 #define __HAL_SD_SDIO_GET_IT (__HANDLE__, __INTERRUPT__) __SDIO_GET_IT ((__HANDLE__)->Instance, __INTERRUPT__)
620 
641 #define __HAL_SD_SDIO_CLEAR_IT(__HANDLE__, __INTERRUPT__) __SDIO_CLEAR_IT((__HANDLE__)->Instance, (__INTERRUPT__))
642 
646 /* Exported functions --------------------------------------------------------*/
654 HAL_SD_ErrorTypedef HAL_SD_Init(SD_HandleTypeDef *hsd, HAL_SD_CardInfoTypedef *SDCardInfo);
655 HAL_StatusTypeDef HAL_SD_DeInit (SD_HandleTypeDef *hsd);
656 void HAL_SD_MspInit(SD_HandleTypeDef *hsd);
657 void HAL_SD_MspDeInit(SD_HandleTypeDef *hsd);
665 /* Blocking mode: Polling */
666 HAL_SD_ErrorTypedef HAL_SD_ReadBlocks(SD_HandleTypeDef *hsd, uint32_t *pReadBuffer, uint64_t ReadAddr, uint32_t BlockSize, uint32_t NumberOfBlocks);
667 HAL_SD_ErrorTypedef HAL_SD_WriteBlocks(SD_HandleTypeDef *hsd, uint32_t *pWriteBuffer, uint64_t WriteAddr, uint32_t BlockSize, uint32_t NumberOfBlocks);
668 HAL_SD_ErrorTypedef HAL_SD_Erase(SD_HandleTypeDef *hsd, uint64_t startaddr, uint64_t endaddr);
669 
670 /* Non-Blocking mode: Interrupt */
671 void HAL_SD_IRQHandler(SD_HandleTypeDef *hsd);
672 
673 /* Callback in non blocking modes (DMA) */
674 void HAL_SD_DMA_RxCpltCallback(DMA_HandleTypeDef *hdma);
675 void HAL_SD_DMA_RxErrorCallback(DMA_HandleTypeDef *hdma);
676 void HAL_SD_DMA_TxCpltCallback(DMA_HandleTypeDef *hdma);
677 void HAL_SD_DMA_TxErrorCallback(DMA_HandleTypeDef *hdma);
678 void HAL_SD_XferCpltCallback(SD_HandleTypeDef *hsd);
679 void HAL_SD_XferErrorCallback(SD_HandleTypeDef *hsd);
680 
681 /* Non-Blocking mode: DMA */
682 HAL_SD_ErrorTypedef HAL_SD_ReadBlocks_DMA(SD_HandleTypeDef *hsd, uint32_t *pReadBuffer, uint64_t ReadAddr, uint32_t BlockSize, uint32_t NumberOfBlocks);
683 HAL_SD_ErrorTypedef HAL_SD_WriteBlocks_DMA(SD_HandleTypeDef *hsd, uint32_t *pWriteBuffer, uint64_t WriteAddr, uint32_t BlockSize, uint32_t NumberOfBlocks);
684 HAL_SD_ErrorTypedef HAL_SD_CheckWriteOperation(SD_HandleTypeDef *hsd, uint32_t Timeout);
685 HAL_SD_ErrorTypedef HAL_SD_CheckReadOperation(SD_HandleTypeDef *hsd, uint32_t Timeout);
693 HAL_SD_ErrorTypedef HAL_SD_Get_CardInfo(SD_HandleTypeDef *hsd, HAL_SD_CardInfoTypedef *pCardInfo);
694 HAL_SD_ErrorTypedef HAL_SD_WideBusOperation_Config(SD_HandleTypeDef *hsd, uint32_t WideMode);
695 HAL_SD_ErrorTypedef HAL_SD_StopTransfer(SD_HandleTypeDef *hsd);
696 HAL_SD_ErrorTypedef HAL_SD_HighSpeed (SD_HandleTypeDef *hsd);
701 /* Peripheral State functions ************************************************/
705 HAL_SD_ErrorTypedef HAL_SD_SendSDStatus(SD_HandleTypeDef *hsd, uint32_t *pSDstatus);
706 HAL_SD_ErrorTypedef HAL_SD_GetCardStatus(SD_HandleTypeDef *hsd, HAL_SD_CardStatusTypedef *pCardStatus);
707 HAL_SD_TransferStateTypedef HAL_SD_GetStatus(SD_HandleTypeDef *hsd);
716 /* Private types -------------------------------------------------------------*/
725 /* Private defines -----------------------------------------------------------*/
734 /* Private variables ---------------------------------------------------------*/
743 /* Private constants ---------------------------------------------------------*/
752 /* Private macros ------------------------------------------------------------*/
761 /* Private functions prototypes ----------------------------------------------*/
770 /* Private functions ---------------------------------------------------------*/
786 #endif /* STM32F405xx || STM32F415xx || STM32F407xx || STM32F417xx || STM32F427xx || STM32F437xx || STM32F429xx || STM32F439xx ||
787  STM32F401xC || STM32F401xE || STM32F411xE || STM32F446xx || STM32F469xx || STM32F479xx || STM32F412Zx || STM32F412Vx ||
788  STM32F412Rx || STM32F412Cx */
789 #ifdef __cplusplus
790 }
791 #endif
792 
793 #endif /* __STM32F4xx_HAL_SD_H */
794 
795 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
Header file of SDMMC HAL module.
HAL_StatusTypeDef
HAL Status structures definition.
Definition: stm32f4xx_hal_def.h:57
#define __IO
Definition: core_cm0.h:213
HAL_LockTypeDef
HAL Lock structures definition.
Definition: stm32f4xx_hal_def.h:68
DMA handle Structure definition.
Definition: stm32f4xx_hal_dma.h:157