Subversion Repositories CharLCD

Rev

Blame | Last modification | View Log | Download | RSS feed

  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.