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_mmc.h
  4.   * @author  MCD Application Team
  5.   * @brief   Header file of MMC 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_MMC_H
  38. #define __STM32F1xx_HAL_MMC_H
  39.  
  40. #ifdef __cplusplus
  41.  extern "C" {
  42. #endif
  43.  
  44. #if defined(STM32F103xE) || defined(STM32F103xG)
  45.  
  46. /* Includes ------------------------------------------------------------------*/
  47. #include "stm32f1xx_ll_sdmmc.h"
  48.  
  49. /** @addtogroup STM32F1xx_HAL_Driver
  50.   * @{
  51.   */
  52.  
  53. /** @defgroup MMC MMC
  54.   * @brief MMC HAL module driver
  55.   * @{
  56.   */
  57.  
  58. /* Exported types ------------------------------------------------------------*/
  59. /** @defgroup MMC_Exported_Types MMC Exported Types
  60.   * @{
  61.   */
  62.  
  63. /** @defgroup MMC_Exported_Types_Group1 MMC State enumeration structure
  64.   * @{
  65.   */  
  66. typedef enum
  67. {
  68.   HAL_MMC_STATE_RESET                  = 0x00000000U,  /*!< MMC not yet initialized or disabled  */
  69.   HAL_MMC_STATE_READY                  = 0x00000001U,  /*!< MMC initialized and ready for use    */
  70.   HAL_MMC_STATE_TIMEOUT                = 0x00000002U,  /*!< MMC Timeout state                    */
  71.   HAL_MMC_STATE_BUSY                   = 0x00000003U,  /*!< MMC process ongoing                  */
  72.   HAL_MMC_STATE_PROGRAMMING            = 0x00000004U,  /*!< MMC Programming State                */
  73.   HAL_MMC_STATE_RECEIVING              = 0x00000005U,  /*!< MMC Receinving State                 */
  74.   HAL_MMC_STATE_TRANSFER               = 0x00000006U,  /*!< MMC Transfert State                  */
  75.   HAL_MMC_STATE_ERROR                  = 0x0000000FU   /*!< MMC is in error state                */
  76. }HAL_MMC_StateTypeDef;
  77. /**
  78.   * @}
  79.   */
  80.  
  81. /** @defgroup MMC_Exported_Types_Group2 MMC Card State enumeration structure
  82.   * @{
  83.   */  
  84. typedef enum
  85. {
  86.   HAL_MMC_CARD_READY                  = 0x00000001U,  /*!< Card state is ready                     */
  87.   HAL_MMC_CARD_IDENTIFICATION         = 0x00000002U,  /*!< Card is in identification state         */
  88.   HAL_MMC_CARD_STANDBY                = 0x00000003U,  /*!< Card is in standby state                */
  89.   HAL_MMC_CARD_TRANSFER               = 0x00000004U,  /*!< Card is in transfer state               */  
  90.   HAL_MMC_CARD_SENDING                = 0x00000005U,  /*!< Card is sending an operation            */
  91.   HAL_MMC_CARD_RECEIVING              = 0x00000006U,  /*!< Card is receiving operation information */
  92.   HAL_MMC_CARD_PROGRAMMING            = 0x00000007U,  /*!< Card is in programming state            */
  93.   HAL_MMC_CARD_DISCONNECTED           = 0x00000008U,  /*!< Card is disconnected                    */
  94.   HAL_MMC_CARD_ERROR                  = 0x000000FFU   /*!< Card response Error                     */
  95. }HAL_MMC_CardStateTypeDef;
  96. /**
  97.   * @}
  98.   */
  99.  
  100. /** @defgroup MMC_Exported_Types_Group3 MMC Handle Structure definition  
  101.   * @{
  102.   */
  103. #define MMC_InitTypeDef      SDIO_InitTypeDef
  104. #define MMC_TypeDef          SDIO_TypeDef
  105.  
  106. /**
  107.   * @brief  MMC Card Information Structure definition
  108.   */
  109. typedef struct
  110. {
  111.   uint32_t CardType;                     /*!< Specifies the card Type                         */
  112.  
  113.   uint32_t Class;                        /*!< Specifies the class of the card class           */
  114.  
  115.   uint32_t RelCardAdd;                   /*!< Specifies the Relative Card Address             */
  116.  
  117.   uint32_t BlockNbr;                     /*!< Specifies the Card Capacity in blocks           */
  118.  
  119.   uint32_t BlockSize;                    /*!< Specifies one block size in bytes               */
  120.  
  121.   uint32_t LogBlockNbr;                  /*!< Specifies the Card logical Capacity in blocks   */
  122.  
  123.   uint32_t LogBlockSize;                 /*!< Specifies logical block size in bytes           */
  124.  
  125. }HAL_MMC_CardInfoTypeDef;
  126.  
  127. /**
  128.   * @brief  MMC handle Structure definition
  129.   */
  130. typedef struct
  131. {
  132.   MMC_TypeDef                 *Instance;        /*!< MMC registers base address           */
  133.  
  134.   MMC_InitTypeDef              Init;             /*!< MMC required parameters              */
  135.  
  136.   HAL_LockTypeDef              Lock;             /*!< MMC locking object                   */
  137.  
  138.   uint32_t                     *pTxBuffPtr;      /*!< Pointer to MMC Tx transfer Buffer    */
  139.  
  140.   uint32_t                     TxXferSize;       /*!< MMC Tx Transfer size                 */
  141.  
  142.   uint32_t                     *pRxBuffPtr;      /*!< Pointer to MMC Rx transfer Buffer    */
  143.  
  144.   uint32_t                     RxXferSize;       /*!< MMC Rx Transfer size                 */
  145.  
  146.   __IO uint32_t                Context;          /*!< MMC transfer context                 */
  147.  
  148.   __IO HAL_MMC_StateTypeDef    State;            /*!< MMC card State                       */
  149.  
  150.   __IO uint32_t                ErrorCode;        /*!< MMC Card Error codes                 */  
  151.  
  152.   DMA_HandleTypeDef            *hdmarx;          /*!< MMC Rx DMA handle parameters         */
  153.  
  154.   DMA_HandleTypeDef            *hdmatx;          /*!< MMC Tx DMA handle parameters         */
  155.  
  156.   HAL_MMC_CardInfoTypeDef      MmcCard;          /*!< MMC Card information                 */
  157.  
  158.   uint32_t                     CSD[4U];          /*!< MMC card specific data table         */
  159.  
  160.   uint32_t                     CID[4U];          /*!< MMC card identification number table */
  161.  
  162. }MMC_HandleTypeDef;
  163.  
  164. /**
  165.   * @}
  166.   */
  167.  
  168. /** @defgroup MMC_Exported_Types_Group4 Card Specific Data: CSD Register
  169.   * @{
  170.   */
  171. typedef struct
  172. {
  173.   __IO uint8_t  CSDStruct;            /*!< CSD structure                         */
  174.   __IO uint8_t  SysSpecVersion;       /*!< System specification version          */
  175.   __IO uint8_t  Reserved1;            /*!< Reserved                              */
  176.   __IO uint8_t  TAAC;                 /*!< Data read access time 1               */
  177.   __IO uint8_t  NSAC;                 /*!< Data read access time 2 in CLK cycles */
  178.   __IO uint8_t  MaxBusClkFrec;        /*!< Max. bus clock frequency              */
  179.   __IO uint16_t CardComdClasses;      /*!< Card command classes                  */
  180.   __IO uint8_t  RdBlockLen;           /*!< Max. read data block length           */
  181.   __IO uint8_t  PartBlockRead;        /*!< Partial blocks for read allowed       */
  182.   __IO uint8_t  WrBlockMisalign;      /*!< Write block misalignment              */
  183.   __IO uint8_t  RdBlockMisalign;      /*!< Read block misalignment               */
  184.   __IO uint8_t  DSRImpl;              /*!< DSR implemented                       */
  185.   __IO uint8_t  Reserved2;            /*!< Reserved                              */
  186.   __IO uint32_t DeviceSize;           /*!< Device Size                           */
  187.   __IO uint8_t  MaxRdCurrentVDDMin;   /*!< Max. read current @ VDD min           */
  188.   __IO uint8_t  MaxRdCurrentVDDMax;   /*!< Max. read current @ VDD max           */
  189.   __IO uint8_t  MaxWrCurrentVDDMin;   /*!< Max. write current @ VDD min          */
  190.   __IO uint8_t  MaxWrCurrentVDDMax;   /*!< Max. write current @ VDD max          */
  191.   __IO uint8_t  DeviceSizeMul;        /*!< Device size multiplier                */
  192.   __IO uint8_t  EraseGrSize;          /*!< Erase group size                      */
  193.   __IO uint8_t  EraseGrMul;           /*!< Erase group size multiplier           */
  194.   __IO uint8_t  WrProtectGrSize;      /*!< Write protect group size              */
  195.   __IO uint8_t  WrProtectGrEnable;    /*!< Write protect group enable            */
  196.   __IO uint8_t  ManDeflECC;           /*!< Manufacturer default ECC              */
  197.   __IO uint8_t  WrSpeedFact;          /*!< Write speed factor                    */
  198.   __IO uint8_t  MaxWrBlockLen;        /*!< Max. write data block length          */
  199.   __IO uint8_t  WriteBlockPaPartial;  /*!< Partial blocks for write allowed      */
  200.   __IO uint8_t  Reserved3;            /*!< Reserved                              */
  201.   __IO uint8_t  ContentProtectAppli;  /*!< Content protection application        */
  202.   __IO uint8_t  FileFormatGrouop;     /*!< File format group                     */
  203.   __IO uint8_t  CopyFlag;             /*!< Copy flag (OTP)                       */
  204.   __IO uint8_t  PermWrProtect;        /*!< Permanent write protection            */
  205.   __IO uint8_t  TempWrProtect;        /*!< Temporary write protection            */
  206.   __IO uint8_t  FileFormat;           /*!< File format                           */
  207.   __IO uint8_t  ECC;                  /*!< ECC code                              */
  208.   __IO uint8_t  CSD_CRC;              /*!< CSD CRC                               */
  209.   __IO uint8_t  Reserved4;            /*!< Always 1                              */
  210.  
  211. }HAL_MMC_CardCSDTypeDef;
  212. /**
  213.   * @}
  214.   */
  215.  
  216. /** @defgroup MMC_Exported_Types_Group5 Card Identification Data: CID Register
  217.   * @{
  218.   */
  219. typedef struct
  220. {
  221.   __IO uint8_t  ManufacturerID;  /*!< Manufacturer ID       */
  222.   __IO uint16_t OEM_AppliID;     /*!< OEM/Application ID    */
  223.   __IO uint32_t ProdName1;       /*!< Product Name part1    */
  224.   __IO uint8_t  ProdName2;       /*!< Product Name part2    */
  225.   __IO uint8_t  ProdRev;         /*!< Product Revision      */
  226.   __IO uint32_t ProdSN;          /*!< Product Serial Number */
  227.   __IO uint8_t  Reserved1;       /*!< Reserved1             */
  228.   __IO uint16_t ManufactDate;    /*!< Manufacturing Date    */
  229.   __IO uint8_t  CID_CRC;         /*!< CID CRC               */
  230.   __IO uint8_t  Reserved2;       /*!< Always 1              */
  231.  
  232. }HAL_MMC_CardCIDTypeDef;
  233. /**
  234.   * @}
  235.   */
  236.  
  237. /** @defgroup MMC_Exported_Types_Group6 MMC Card Status returned by ACMD13
  238.   * @{
  239.   */
  240. typedef struct
  241. {
  242.   __IO uint8_t  DataBusWidth;           /*!< Shows the currently defined data bus width                 */
  243.   __IO uint8_t  SecuredMode;            /*!< Card is in secured mode of operation                       */
  244.   __IO uint16_t CardType;               /*!< Carries information about card type                        */
  245.   __IO uint32_t ProtectedAreaSize;      /*!< Carries information about the capacity of protected area   */
  246.   __IO uint8_t  SpeedClass;             /*!< Carries information about the speed class of the card      */
  247.   __IO uint8_t  PerformanceMove;        /*!< Carries information about the card's performance move      */
  248.   __IO uint8_t  AllocationUnitSize;     /*!< Carries information about the card's allocation unit size  */
  249.   __IO uint16_t EraseSize;              /*!< Determines the number of AUs to be erased in one operation */
  250.   __IO uint8_t  EraseTimeout;           /*!< Determines the timeout for any number of AU erase          */
  251.   __IO uint8_t  EraseOffset;            /*!< Carries information about the erase offset                 */
  252.  
  253. }HAL_MMC_CardStatusTypeDef;
  254. /**
  255.   * @}
  256.   */
  257.  
  258. /**
  259.   * @}
  260.   */
  261.  
  262. /* Exported constants --------------------------------------------------------*/
  263. /** @defgroup MMC_Exported_Constants Exported Constants
  264.   * @{
  265.   */
  266.  
  267. #define BLOCKSIZE   512U        /*!< Block size is 512 bytes */
  268.    
  269. #define CAPACITY    0x400000U   /*!< Log Block Nuumber for 2 G bytes Cards */
  270.  
  271. /** @defgroup MMC_Exported_Constansts_Group1 MMC Error status enumeration Structure definition
  272.   * @{
  273.   */  
  274. #define HAL_MMC_ERROR_NONE                     SDMMC_ERROR_NONE                    /*!< No error                                                      */
  275. #define HAL_MMC_ERROR_CMD_CRC_FAIL             SDMMC_ERROR_CMD_CRC_FAIL            /*!< Command response received (but CRC check failed)              */
  276. #define HAL_MMC_ERROR_DATA_CRC_FAIL            SDMMC_ERROR_DATA_CRC_FAIL           /*!< Data block sent/received (CRC check failed)                   */
  277. #define HAL_MMC_ERROR_CMD_RSP_TIMEOUT          SDMMC_ERROR_CMD_RSP_TIMEOUT         /*!< Command response timeout                                      */
  278. #define HAL_MMC_ERROR_DATA_TIMEOUT             SDMMC_ERROR_DATA_TIMEOUT            /*!< Data timeout                                                  */
  279. #define HAL_MMC_ERROR_TX_UNDERRUN              SDMMC_ERROR_TX_UNDERRUN             /*!< Transmit FIFO underrun                                        */
  280. #define HAL_MMC_ERROR_RX_OVERRUN               SDMMC_ERROR_RX_OVERRUN              /*!< Receive FIFO overrun                                          */
  281. #define HAL_MMC_ERROR_ADDR_MISALIGNED          SDMMC_ERROR_ADDR_MISALIGNED         /*!< Misaligned address                                            */
  282. #define HAL_MMC_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_MMC_ERROR_ERASE_SEQ_ERR            SDMMC_ERROR_ERASE_SEQ_ERR           /*!< An error in the sequence of erase command occurs              */
  285. #define HAL_MMC_ERROR_BAD_ERASE_PARAM          SDMMC_ERROR_BAD_ERASE_PARAM         /*!< An invalid selection for erase groups                         */
  286. #define HAL_MMC_ERROR_WRITE_PROT_VIOLATION     SDMMC_ERROR_WRITE_PROT_VIOLATION    /*!< Attempt to program a write protect block                      */
  287. #define HAL_MMC_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_MMC_ERROR_COM_CRC_FAILED           SDMMC_ERROR_COM_CRC_FAILED          /*!< CRC check of the previous command failed                      */
  290. #define HAL_MMC_ERROR_ILLEGAL_CMD              SDMMC_ERROR_ILLEGAL_CMD             /*!< Command is not legal for the card state                       */
  291. #define HAL_MMC_ERROR_CARD_ECC_FAILED          SDMMC_ERROR_CARD_ECC_FAILED         /*!< Card internal ECC was applied but failed to correct the data  */
  292. #define HAL_MMC_ERROR_CC_ERR                   SDMMC_ERROR_CC_ERR                  /*!< Internal card controller error                                */
  293. #define HAL_MMC_ERROR_GENERAL_UNKNOWN_ERR      SDMMC_ERROR_GENERAL_UNKNOWN_ERR     /*!< General or unknown error                                      */
  294. #define HAL_MMC_ERROR_STREAM_READ_UNDERRUN     SDMMC_ERROR_STREAM_READ_UNDERRUN    /*!< The card could not sustain data reading in stream rmode       */
  295. #define HAL_MMC_ERROR_STREAM_WRITE_OVERRUN     SDMMC_ERROR_STREAM_WRITE_OVERRUN    /*!< The card could not sustain data programming in stream mode    */
  296. #define HAL_MMC_ERROR_CID_CSD_OVERWRITE        SDMMC_ERROR_CID_CSD_OVERWRITE       /*!< CID/CSD overwrite error                                       */
  297. #define HAL_MMC_ERROR_WP_ERASE_SKIP            SDMMC_ERROR_WP_ERASE_SKIP           /*!< Only partial address space was erased                         */
  298. #define HAL_MMC_ERROR_CARD_ECC_DISABLED        SDMMC_ERROR_CARD_ECC_DISABLED       /*!< Command has been executed without using internal ECC          */
  299. #define HAL_MMC_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_MMC_ERROR_AKE_SEQ_ERR              SDMMC_ERROR_AKE_SEQ_ERR             /*!< Error in sequence of authentication                           */
  302. #define HAL_MMC_ERROR_INVALID_VOLTRANGE        SDMMC_ERROR_INVALID_VOLTRANGE       /*!< Error in case of invalid voltage range                        */        
  303. #define HAL_MMC_ERROR_ADDR_OUT_OF_RANGE        SDMMC_ERROR_ADDR_OUT_OF_RANGE       /*!< Error when addressed block is out of range                    */        
  304. #define HAL_MMC_ERROR_REQUEST_NOT_APPLICABLE   SDMMC_ERROR_REQUEST_NOT_APPLICABLE  /*!< Error when command request is not applicable                  */  
  305. #define HAL_MMC_ERROR_PARAM                    SDMMC_ERROR_INVALID_PARAMETER       /*!< the used parameter is not valid                               */  
  306. #define HAL_MMC_ERROR_UNSUPPORTED_FEATURE      SDMMC_ERROR_UNSUPPORTED_FEATURE     /*!< Error when feature is not insupported                         */
  307. #define HAL_MMC_ERROR_BUSY                     SDMMC_ERROR_BUSY                    /*!< Error when transfer process is busy                           */
  308. #define HAL_MMC_ERROR_DMA                      SDMMC_ERROR_DMA                     /*!< Error while DMA transfer                                      */
  309. #define HAL_MMC_ERROR_TIMEOUT                  SDMMC_ERROR_TIMEOUT                 /*!< Timeout error                                                 */
  310. /**
  311.   * @}
  312.   */
  313.  
  314. /** @defgroup MMC_Exported_Constansts_Group2 MMC context enumeration structure
  315.   * @{
  316.   */
  317. #define   MMC_CONTEXT_NONE                 0x00000000U  /*!< None                             */
  318. #define   MMC_CONTEXT_READ_SINGLE_BLOCK    0x00000001U  /*!< Read single block operation      */
  319. #define   MMC_CONTEXT_READ_MULTIPLE_BLOCK  0x00000002U  /*!< Read multiple blocks operation   */
  320. #define   MMC_CONTEXT_WRITE_SINGLE_BLOCK   0x00000010U  /*!< Write single block operation     */
  321. #define   MMC_CONTEXT_WRITE_MULTIPLE_BLOCK 0x00000020U  /*!< Write multiple blocks operation  */
  322. #define   MMC_CONTEXT_IT                   0x00000008U  /*!< Process in Interrupt mode        */
  323. #define   MMC_CONTEXT_DMA                  0x00000080U  /*!< Process in DMA mode              */
  324. /**
  325.   * @}
  326.   */
  327.  
  328. /** @defgroup MMC_Exported_Constansts_Group3 MMC Voltage mode
  329.   * @{
  330.   */
  331. /**
  332.   * @brief
  333.   */
  334. #define MMC_HIGH_VOLTAGE_RANGE         0x80FF8000U  /*!< VALUE OF ARGUMENT            */
  335. #define MMC_DUAL_VOLTAGE_RANGE         0x80FF8080U  /*!< VALUE OF ARGUMENT            */
  336. #define eMMC_HIGH_VOLTAGE_RANGE        0xC0FF8000U  /*!< for eMMC > 2Gb sector mode   */
  337. #define eMMC_DUAL_VOLTAGE_RANGE        0xC0FF8080U  /*!< for eMMC > 2Gb sector mode   */
  338. #define MMC_INVALID_VOLTAGE_RANGE      0x0001FF01U
  339. /**
  340.   * @}
  341.   */
  342.  
  343. /** @defgroup MMC_Exported_Constansts_Group4 MMC Memory Cards
  344.   * @{
  345.   */
  346. #define  MMC_HIGH_VOLTAGE_CARD     0x00000000U
  347. #define  MMC_DUAL_VOLTAGE_CARD     0x00000001U
  348. /**
  349.   * @}
  350.   */
  351.      
  352. /**
  353.   * @}
  354.   */
  355.  
  356. /* Exported macro ------------------------------------------------------------*/
  357. /** @defgroup MMC_Exported_macros MMC Exported Macros
  358.  *  @brief macros to handle interrupts and specific clock configurations
  359.  * @{
  360.  */
  361.  
  362. /**
  363.   * @brief  Enable the MMC device.
  364.   * @retval None
  365.   */
  366. #define __HAL_MMC_ENABLE(__HANDLE__) __SDIO_ENABLE((__HANDLE__)->Instance)
  367.  
  368. /**
  369.   * @brief  Disable the MMC device.
  370.   * @retval None
  371.   */
  372. #define __HAL_MMC_DISABLE(__HANDLE__) __SDIO_DISABLE((__HANDLE__)->Instance)
  373.  
  374. /**
  375.   * @brief  Enable the SDMMC DMA transfer.
  376.   * @retval None
  377.   */
  378. #define __HAL_MMC_DMA_ENABLE(__HANDLE__) __SDIO_DMA_ENABLE((__HANDLE__)->Instance)
  379.  
  380. /**
  381.   * @brief  Disable the SDMMC DMA transfer.
  382.   * @retval None
  383.   */
  384. #define __HAL_MMC_DMA_DISABLE(__HANDLE__)  __SDIO_DMA_DISABLE((__HANDLE__)->Instance)
  385.  
  386. /**
  387.   * @brief  Enable the MMC device interrupt.
  388.   * @param  __HANDLE__: MMC Handle  
  389.   * @param  __INTERRUPT__: specifies the SDMMC interrupt sources to be enabled.
  390.   *         This parameter can be one or a combination of the following values:
  391.   *            @arg SDIO_IT_CCRCFAIL: Command response received (CRC check failed) interrupt
  392.   *            @arg SDIO_IT_DCRCFAIL: Data block sent/received (CRC check failed) interrupt
  393.   *            @arg SDIO_IT_CTIMEOUT: Command response timeout interrupt
  394.   *            @arg SDIO_IT_DTIMEOUT: Data timeout interrupt
  395.   *            @arg SDIO_IT_TXUNDERR: Transmit FIFO underrun error interrupt
  396.   *            @arg SDIO_IT_RXOVERR:  Received FIFO overrun error interrupt
  397.   *            @arg SDIO_IT_CMDREND:  Command response received (CRC check passed) interrupt
  398.   *            @arg SDIO_IT_CMDSENT:  Command sent (no response required) interrupt
  399.   *            @arg SDIO_IT_DATAEND:  Data end (data counter, SDIDCOUNT, is zero) interrupt
  400.   *            @arg SDIO_IT_DBCKEND:  Data block sent/received (CRC check passed) interrupt
  401.   *            @arg SDIO_IT_CMDACT:   Command transfer in progress interrupt
  402.   *            @arg SDIO_IT_TXACT:    Data transmit in progress interrupt
  403.   *            @arg SDIO_IT_RXACT:    Data receive in progress interrupt
  404.   *            @arg SDIO_IT_TXFIFOHE: Transmit FIFO Half Empty interrupt
  405.   *            @arg SDIO_IT_RXFIFOHF: Receive FIFO Half Full interrupt
  406.   *            @arg SDIO_IT_TXFIFOF:  Transmit FIFO full interrupt
  407.   *            @arg SDIO_IT_RXFIFOF:  Receive FIFO full interrupt
  408.   *            @arg SDIO_IT_TXFIFOE:  Transmit FIFO empty interrupt
  409.   *            @arg SDIO_IT_RXFIFOE:  Receive FIFO empty interrupt
  410.   *            @arg SDIO_IT_TXDAVL:   Data available in transmit FIFO interrupt
  411.   *            @arg SDIO_IT_RXDAVL:   Data available in receive FIFO interrupt
  412.   *            @arg SDIO_IT_SDIOIT:   SD I/O interrupt received interrupt
  413.   * @retval None
  414.   */
  415. #define __HAL_MMC_ENABLE_IT(__HANDLE__, __INTERRUPT__) __SDIO_ENABLE_IT((__HANDLE__)->Instance, (__INTERRUPT__))
  416.  
  417. /**
  418.   * @brief  Disable the MMC device interrupt.
  419.   * @param  __HANDLE__: MMC Handle  
  420.   * @param  __INTERRUPT__: specifies the SDMMC interrupt sources to be disabled.
  421.   *          This parameter can be one or a combination of the following values:
  422.   *            @arg SDIO_IT_CCRCFAIL: Command response received (CRC check failed) interrupt
  423.   *            @arg SDIO_IT_DCRCFAIL: Data block sent/received (CRC check failed) interrupt
  424.   *            @arg SDIO_IT_CTIMEOUT: Command response timeout interrupt
  425.   *            @arg SDIO_IT_DTIMEOUT: Data timeout interrupt
  426.   *            @arg SDIO_IT_TXUNDERR: Transmit FIFO underrun error interrupt
  427.   *            @arg SDIO_IT_RXOVERR:  Received FIFO overrun error interrupt
  428.   *            @arg SDIO_IT_CMDREND:  Command response received (CRC check passed) interrupt
  429.   *            @arg SDIO_IT_CMDSENT:  Command sent (no response required) interrupt
  430.   *            @arg SDIO_IT_DATAEND:  Data end (data counter, SDIDCOUNT, is zero) interrupt
  431.   *            @arg SDIO_IT_DBCKEND:  Data block sent/received (CRC check passed) interrupt
  432.   *            @arg SDIO_IT_CMDACT:   Command transfer in progress interrupt
  433.   *            @arg SDIO_IT_TXACT:    Data transmit in progress interrupt
  434.   *            @arg SDIO_IT_RXACT:    Data receive in progress interrupt
  435.   *            @arg SDIO_IT_TXFIFOHE: Transmit FIFO Half Empty interrupt
  436.   *            @arg SDIO_IT_RXFIFOHF: Receive FIFO Half Full interrupt
  437.   *            @arg SDIO_IT_TXFIFOF:  Transmit FIFO full interrupt
  438.   *            @arg SDIO_IT_RXFIFOF:  Receive FIFO full interrupt
  439.   *            @arg SDIO_IT_TXFIFOE:  Transmit FIFO empty interrupt
  440.   *            @arg SDIO_IT_RXFIFOE:  Receive FIFO empty interrupt
  441.   *            @arg SDIO_IT_TXDAVL:   Data available in transmit FIFO interrupt
  442.   *            @arg SDIO_IT_RXDAVL:   Data available in receive FIFO interrupt
  443.   *            @arg SDIO_IT_SDIOIT:   SD I/O interrupt received interrupt  
  444.   * @retval None
  445.   */
  446. #define __HAL_MMC_DISABLE_IT(__HANDLE__, __INTERRUPT__) __SDIO_DISABLE_IT((__HANDLE__)->Instance, (__INTERRUPT__))
  447.  
  448. /**
  449.   * @brief  Check whether the specified MMC flag is set or not.
  450.   * @param  __HANDLE__: MMC Handle  
  451.   * @param  __FLAG__: specifies the flag to check.
  452.   *          This parameter can be one of the following values:
  453.   *            @arg SDIO_FLAG_CCRCFAIL: Command response received (CRC check failed)
  454.   *            @arg SDIO_FLAG_DCRCFAIL: Data block sent/received (CRC check failed)
  455.   *            @arg SDIO_FLAG_CTIMEOUT: Command response timeout
  456.   *            @arg SDIO_FLAG_DTIMEOUT: Data timeout
  457.   *            @arg SDIO_FLAG_TXUNDERR: Transmit FIFO underrun error
  458.   *            @arg SDIO_FLAG_RXOVERR:  Received FIFO overrun error
  459.   *            @arg SDIO_FLAG_CMDREND:  Command response received (CRC check passed)
  460.   *            @arg SDIO_FLAG_CMDSENT:  Command sent (no response required)
  461.   *            @arg SDIO_FLAG_DATAEND:  Data end (data counter, SDIDCOUNT, is zero)
  462.   *            @arg SDIO_FLAG_DBCKEND:  Data block sent/received (CRC check passed)
  463.   *            @arg SDIO_FLAG_CMDACT:   Command transfer in progress
  464.   *            @arg SDIO_FLAG_TXACT:    Data transmit in progress
  465.   *            @arg SDIO_FLAG_RXACT:    Data receive in progress
  466.   *            @arg SDIO_FLAG_TXFIFOHE: Transmit FIFO Half Empty
  467.   *            @arg SDIO_FLAG_RXFIFOHF: Receive FIFO Half Full
  468.   *            @arg SDIO_FLAG_TXFIFOF:  Transmit FIFO full
  469.   *            @arg SDIO_FLAG_RXFIFOF:  Receive FIFO full
  470.   *            @arg SDIO_FLAG_TXFIFOE:  Transmit FIFO empty
  471.   *            @arg SDIO_FLAG_RXFIFOE:  Receive FIFO empty
  472.   *            @arg SDIO_FLAG_TXDAVL:   Data available in transmit FIFO
  473.   *            @arg SDIO_FLAG_RXDAVL:   Data available in receive FIFO
  474.   *            @arg SDIO_FLAG_SDIOIT:   SD I/O interrupt received
  475.   * @retval The new state of MMC FLAG (SET or RESET).
  476.   */
  477. #define __HAL_MMC_GET_FLAG(__HANDLE__, __FLAG__) __SDIO_GET_FLAG((__HANDLE__)->Instance, (__FLAG__))
  478.  
  479. /**
  480.   * @brief  Clear the MMC's pending flags.
  481.   * @param  __HANDLE__: MMC Handle  
  482.   * @param  __FLAG__: specifies the flag to clear.  
  483.   *          This parameter can be one or a combination of the following values:
  484.   *            @arg SDIO_FLAG_CCRCFAIL: Command response received (CRC check failed)
  485.   *            @arg SDIO_FLAG_DCRCFAIL: Data block sent/received (CRC check failed)
  486.   *            @arg SDIO_FLAG_CTIMEOUT: Command response timeout
  487.   *            @arg SDIO_FLAG_DTIMEOUT: Data timeout
  488.   *            @arg SDIO_FLAG_TXUNDERR: Transmit FIFO underrun error
  489.   *            @arg SDIO_FLAG_RXOVERR:  Received FIFO overrun error
  490.   *            @arg SDIO_FLAG_CMDREND:  Command response received (CRC check passed)
  491.   *            @arg SDIO_FLAG_CMDSENT:  Command sent (no response required)
  492.   *            @arg SDIO_FLAG_DATAEND:  Data end (data counter, SDIDCOUNT, is zero)
  493.   *            @arg SDIO_FLAG_DBCKEND:  Data block sent/received (CRC check passed)
  494.   *            @arg SDIO_FLAG_SDIOIT:   SD I/O interrupt received
  495.   * @retval None
  496.   */
  497. #define __HAL_MMC_CLEAR_FLAG(__HANDLE__, __FLAG__) __SDIO_CLEAR_FLAG((__HANDLE__)->Instance, (__FLAG__))
  498.  
  499. /**
  500.   * @brief  Check whether the specified MMC interrupt has occurred or not.
  501.   * @param  __HANDLE__: MMC Handle  
  502.   * @param  __INTERRUPT__: specifies the SDMMC interrupt source to check.
  503.   *          This parameter can be one of the following values:
  504.   *            @arg SDIO_IT_CCRCFAIL: Command response received (CRC check failed) interrupt
  505.   *            @arg SDIO_IT_DCRCFAIL: Data block sent/received (CRC check failed) interrupt
  506.   *            @arg SDIO_IT_CTIMEOUT: Command response timeout interrupt
  507.   *            @arg SDIO_IT_DTIMEOUT: Data timeout interrupt
  508.   *            @arg SDIO_IT_TXUNDERR: Transmit FIFO underrun error interrupt
  509.   *            @arg SDIO_IT_RXOVERR:  Received FIFO overrun error interrupt
  510.   *            @arg SDIO_IT_CMDREND:  Command response received (CRC check passed) interrupt
  511.   *            @arg SDIO_IT_CMDSENT:  Command sent (no response required) interrupt
  512.   *            @arg SDIO_IT_DATAEND:  Data end (data counter, SDIDCOUNT, is zero) interrupt
  513.   *            @arg SDIO_IT_DBCKEND:  Data block sent/received (CRC check passed) interrupt
  514.   *            @arg SDIO_IT_CMDACT:   Command transfer in progress interrupt
  515.   *            @arg SDIO_IT_TXACT:    Data transmit in progress interrupt
  516.   *            @arg SDIO_IT_RXACT:    Data receive in progress interrupt
  517.   *            @arg SDIO_IT_TXFIFOHE: Transmit FIFO Half Empty interrupt
  518.   *            @arg SDIO_IT_RXFIFOHF: Receive FIFO Half Full interrupt
  519.   *            @arg SDIO_IT_TXFIFOF:  Transmit FIFO full interrupt
  520.   *            @arg SDIO_IT_RXFIFOF:  Receive FIFO full interrupt
  521.   *            @arg SDIO_IT_TXFIFOE:  Transmit FIFO empty interrupt
  522.   *            @arg SDIO_IT_RXFIFOE:  Receive FIFO empty interrupt
  523.   *            @arg SDIO_IT_TXDAVL:   Data available in transmit FIFO interrupt
  524.   *            @arg SDIO_IT_RXDAVL:   Data available in receive FIFO interrupt
  525.   *            @arg SDIO_IT_SDIOIT:   SD I/O interrupt received interrupt
  526.   * @retval The new state of MMC IT (SET or RESET).
  527.   */
  528. #define __HAL_MMC_GET_IT(__HANDLE__, __INTERRUPT__) __SDIO_GET_IT((__HANDLE__)->Instance, (__INTERRUPT__))
  529.  
  530. /**
  531.   * @brief  Clear the MMC's interrupt pending bits.
  532.   * @param  __HANDLE__: MMC Handle
  533.   * @param  __INTERRUPT__: specifies the interrupt pending bit to clear.
  534.   *          This parameter can be one or a combination of the following values:
  535.   *            @arg SDIO_IT_CCRCFAIL: Command response received (CRC check failed) interrupt
  536.   *            @arg SDIO_IT_DCRCFAIL: Data block sent/received (CRC check failed) interrupt
  537.   *            @arg SDIO_IT_CTIMEOUT: Command response timeout interrupt
  538.   *            @arg SDIO_IT_DTIMEOUT: Data timeout interrupt
  539.   *            @arg SDIO_IT_TXUNDERR: Transmit FIFO underrun error interrupt
  540.   *            @arg SDIO_IT_RXOVERR:  Received FIFO overrun error interrupt
  541.   *            @arg SDIO_IT_CMDREND:  Command response received (CRC check passed) interrupt
  542.   *            @arg SDIO_IT_CMDSENT:  Command sent (no response required) interrupt
  543.   *            @arg SDIO_IT_DATAEND:  Data end (data counter, SDMMC_DCOUNT, is zero) interrupt
  544.   *            @arg SDIO_IT_SDIOIT:   SD I/O interrupt received interrupt
  545.   * @retval None
  546.   */
  547. #define __HAL_MMC_CLEAR_IT(__HANDLE__, __INTERRUPT__) __SDIO_CLEAR_IT((__HANDLE__)->Instance, (__INTERRUPT__))
  548.  
  549. /**
  550.   * @}
  551.   */
  552.  
  553. /* Exported functions --------------------------------------------------------*/
  554. /** @defgroup MMC_Exported_Functions MMC Exported Functions
  555.   * @{
  556.   */
  557.  
  558. /** @defgroup MMC_Exported_Functions_Group1 Initialization and de-initialization functions
  559.   * @{
  560.   */
  561. HAL_StatusTypeDef HAL_MMC_Init(MMC_HandleTypeDef *hmmc);
  562. HAL_StatusTypeDef HAL_MMC_InitCard(MMC_HandleTypeDef *hmmc);
  563. HAL_StatusTypeDef HAL_MMC_DeInit (MMC_HandleTypeDef *hmmc);
  564. void HAL_MMC_MspInit(MMC_HandleTypeDef *hmmc);
  565. void HAL_MMC_MspDeInit(MMC_HandleTypeDef *hmmc);
  566. /**
  567.   * @}
  568.   */
  569.  
  570. /** @defgroup MMC_Exported_Functions_Group2 Input and Output operation functions
  571.   * @{
  572.   */
  573. /* Blocking mode: Polling */
  574. HAL_StatusTypeDef HAL_MMC_ReadBlocks(MMC_HandleTypeDef *hmmc, uint8_t *pData, uint32_t BlockAdd, uint32_t NumberOfBlocks, uint32_t Timeout);
  575. HAL_StatusTypeDef HAL_MMC_WriteBlocks(MMC_HandleTypeDef *hmmc, uint8_t *pData, uint32_t BlockAdd, uint32_t NumberOfBlocks, uint32_t Timeout);
  576. HAL_StatusTypeDef HAL_MMC_Erase(MMC_HandleTypeDef *hmmc, uint32_t BlockStartAdd, uint32_t BlockEndAdd);
  577. /* Non-Blocking mode: IT */
  578. HAL_StatusTypeDef HAL_MMC_ReadBlocks_IT(MMC_HandleTypeDef *hmmc, uint8_t *pData, uint32_t BlockAdd, uint32_t NumberOfBlocks);
  579. HAL_StatusTypeDef HAL_MMC_WriteBlocks_IT(MMC_HandleTypeDef *hmmc, uint8_t *pData, uint32_t BlockAdd, uint32_t NumberOfBlocks);
  580. /* Non-Blocking mode: DMA */
  581. HAL_StatusTypeDef HAL_MMC_ReadBlocks_DMA(MMC_HandleTypeDef *hmmc, uint8_t *pData, uint32_t BlockAdd, uint32_t NumberOfBlocks);
  582. HAL_StatusTypeDef HAL_MMC_WriteBlocks_DMA(MMC_HandleTypeDef *hmmc, uint8_t *pData, uint32_t BlockAdd, uint32_t NumberOfBlocks);
  583.  
  584. void HAL_MMC_IRQHandler(MMC_HandleTypeDef *hmmc);
  585.  
  586. /* Callback in non blocking modes (DMA) */
  587. void HAL_MMC_TxCpltCallback(MMC_HandleTypeDef *hmmc);
  588. void HAL_MMC_RxCpltCallback(MMC_HandleTypeDef *hmmc);
  589. void HAL_MMC_ErrorCallback(MMC_HandleTypeDef *hmmc);
  590. void HAL_MMC_AbortCallback(MMC_HandleTypeDef *hmmc);
  591. /**
  592.   * @}
  593.   */
  594.  
  595. /** @defgroup MMC_Exported_Functions_Group3 Peripheral Control functions
  596.   * @{
  597.   */
  598. HAL_StatusTypeDef HAL_MMC_ConfigWideBusOperation(MMC_HandleTypeDef *hmmc, uint32_t WideMode);
  599. /**
  600.   * @}
  601.   */
  602.  
  603. /** @defgroup MMC_Exported_Functions_Group4 MMC card related functions
  604.   * @{
  605.   */
  606. HAL_MMC_CardStateTypeDef HAL_MMC_GetCardState(MMC_HandleTypeDef *hmmc);
  607. HAL_StatusTypeDef        HAL_MMC_GetCardCID(MMC_HandleTypeDef *hmmc, HAL_MMC_CardCIDTypeDef *pCID);
  608. HAL_StatusTypeDef        HAL_MMC_GetCardCSD(MMC_HandleTypeDef *hmmc, HAL_MMC_CardCSDTypeDef *pCSD);
  609. HAL_StatusTypeDef        HAL_MMC_GetCardInfo(MMC_HandleTypeDef *hmmc, HAL_MMC_CardInfoTypeDef *pCardInfo);
  610. /**
  611.   * @}
  612.   */
  613.  
  614. /** @defgroup MMC_Exported_Functions_Group5 Peripheral State and Errors functions
  615.   * @{
  616.   */
  617. HAL_MMC_StateTypeDef HAL_MMC_GetState(MMC_HandleTypeDef *hmmc);
  618. uint32_t HAL_MMC_GetError(MMC_HandleTypeDef *hmmc);
  619. /**
  620.   * @}
  621.   */
  622.  
  623. /** @defgroup MMC_Exported_Functions_Group6 Perioheral Abort management
  624.   * @{
  625.   */
  626. HAL_StatusTypeDef HAL_MMC_Abort(MMC_HandleTypeDef *hmmc);
  627. HAL_StatusTypeDef HAL_MMC_Abort_IT(MMC_HandleTypeDef *hmmc);
  628. /**
  629.   * @}
  630.   */
  631.    
  632. /* Private types -------------------------------------------------------------*/
  633. /** @defgroup MMC_Private_Types MMC Private Types
  634.   * @{
  635.   */
  636.  
  637. /**
  638.   * @}
  639.   */
  640.  
  641. /* Private defines -----------------------------------------------------------*/
  642. /** @defgroup MMC_Private_Defines MMC Private Defines
  643.   * @{
  644.   */
  645.  
  646. /**
  647.   * @}
  648.   */
  649.          
  650. /* Private variables ---------------------------------------------------------*/
  651. /** @defgroup MMC_Private_Variables MMC Private Variables
  652.   * @{
  653.   */
  654.  
  655. /**
  656.   * @}
  657.   */
  658.  
  659. /* Private constants ---------------------------------------------------------*/
  660. /** @defgroup MMC_Private_Constants MMC Private Constants
  661.   * @{
  662.   */
  663.  
  664. /**
  665.   * @}
  666.   */
  667.  
  668. /* Private macros ------------------------------------------------------------*/
  669. /** @defgroup MMC_Private_Macros MMC Private Macros
  670.   * @{
  671.   */
  672.  
  673. /**
  674.   * @}
  675.   */
  676.  
  677. /* Private functions prototypes ----------------------------------------------*/
  678. /** @defgroup MMC_Private_Functions_Prototypes MMC Private Functions Prototypes
  679.   * @{
  680.   */
  681.  
  682. /**
  683.   * @}
  684.   */
  685.  
  686. /* Private functions ---------------------------------------------------------*/
  687. /** @defgroup MMC_Private_Functions MMC Private Functions
  688.   * @{
  689.   */
  690.  
  691. /**
  692.   * @}
  693.   */
  694.  
  695. /**
  696.   * @}
  697.   */
  698.  
  699. /**
  700.   * @}
  701.   */
  702.  
  703. /**
  704.   * @}
  705.   */
  706.  
  707. #endif /* STM32F103xE || STM32F103xG */
  708.  
  709. #ifdef __cplusplus
  710. }
  711. #endif
  712.  
  713.  
  714. #endif /* __STM32F1xx_HAL_MMC_H */
  715.  
  716. /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
  717.