Subversion Repositories LedShow

Rev

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