pro vyuku PSS v Jecne

Committer:
vladvana
Date:
Sun Sep 24 12:31:52 2017 +0000
Revision:
0:23d1f73bf130
podklady pro cviceni z PSS

Who changed what in which revision?

UserRevisionLine numberNew contents of line
vladvana 0:23d1f73bf130 1 /**
vladvana 0:23d1f73bf130 2 ******************************************************************************
vladvana 0:23d1f73bf130 3 * @file stm32f1xx_hal_sd.h
vladvana 0:23d1f73bf130 4 * @author MCD Application Team
vladvana 0:23d1f73bf130 5 * @version V1.0.0
vladvana 0:23d1f73bf130 6 * @date 15-December-2014
vladvana 0:23d1f73bf130 7 * @brief Header file of SD HAL module.
vladvana 0:23d1f73bf130 8 ******************************************************************************
vladvana 0:23d1f73bf130 9 * @attention
vladvana 0:23d1f73bf130 10 *
vladvana 0:23d1f73bf130 11 * <h2><center>&copy; COPYRIGHT(c) 2014 STMicroelectronics</center></h2>
vladvana 0:23d1f73bf130 12 *
vladvana 0:23d1f73bf130 13 * Redistribution and use in source and binary forms, with or without modification,
vladvana 0:23d1f73bf130 14 * are permitted provided that the following conditions are met:
vladvana 0:23d1f73bf130 15 * 1. Redistributions of source code must retain the above copyright notice,
vladvana 0:23d1f73bf130 16 * this list of conditions and the following disclaimer.
vladvana 0:23d1f73bf130 17 * 2. Redistributions in binary form must reproduce the above copyright notice,
vladvana 0:23d1f73bf130 18 * this list of conditions and the following disclaimer in the documentation
vladvana 0:23d1f73bf130 19 * and/or other materials provided with the distribution.
vladvana 0:23d1f73bf130 20 * 3. Neither the name of STMicroelectronics nor the names of its contributors
vladvana 0:23d1f73bf130 21 * may be used to endorse or promote products derived from this software
vladvana 0:23d1f73bf130 22 * without specific prior written permission.
vladvana 0:23d1f73bf130 23 *
vladvana 0:23d1f73bf130 24 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
vladvana 0:23d1f73bf130 25 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
vladvana 0:23d1f73bf130 26 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
vladvana 0:23d1f73bf130 27 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
vladvana 0:23d1f73bf130 28 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
vladvana 0:23d1f73bf130 29 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
vladvana 0:23d1f73bf130 30 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
vladvana 0:23d1f73bf130 31 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
vladvana 0:23d1f73bf130 32 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
vladvana 0:23d1f73bf130 33 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
vladvana 0:23d1f73bf130 34 *
vladvana 0:23d1f73bf130 35 ******************************************************************************
vladvana 0:23d1f73bf130 36 */
vladvana 0:23d1f73bf130 37
vladvana 0:23d1f73bf130 38 /* Define to prevent recursive inclusion -------------------------------------*/
vladvana 0:23d1f73bf130 39 #ifndef __STM32F1xx_HAL_SD_H
vladvana 0:23d1f73bf130 40 #define __STM32F1xx_HAL_SD_H
vladvana 0:23d1f73bf130 41
vladvana 0:23d1f73bf130 42 #if defined(STM32F103xE) || defined(STM32F103xG)
vladvana 0:23d1f73bf130 43
vladvana 0:23d1f73bf130 44 #ifdef __cplusplus
vladvana 0:23d1f73bf130 45 extern "C" {
vladvana 0:23d1f73bf130 46 #endif
vladvana 0:23d1f73bf130 47
vladvana 0:23d1f73bf130 48 /* Includes ------------------------------------------------------------------*/
vladvana 0:23d1f73bf130 49 #include "stm32f1xx_ll_sdmmc.h"
vladvana 0:23d1f73bf130 50
vladvana 0:23d1f73bf130 51 /** @addtogroup STM32F1xx_HAL_Driver
vladvana 0:23d1f73bf130 52 * @{
vladvana 0:23d1f73bf130 53 */
vladvana 0:23d1f73bf130 54
vladvana 0:23d1f73bf130 55 /** @addtogroup SD
vladvana 0:23d1f73bf130 56 * @{
vladvana 0:23d1f73bf130 57 */
vladvana 0:23d1f73bf130 58
vladvana 0:23d1f73bf130 59 /* Exported types ------------------------------------------------------------*/
vladvana 0:23d1f73bf130 60 /** @defgroup SD_Exported_Types SD Exported Types
vladvana 0:23d1f73bf130 61 * @{
vladvana 0:23d1f73bf130 62 */
vladvana 0:23d1f73bf130 63
vladvana 0:23d1f73bf130 64 #define SD_InitTypeDef SDIO_InitTypeDef
vladvana 0:23d1f73bf130 65 #define SD_TypeDef SDIO_TypeDef
vladvana 0:23d1f73bf130 66
vladvana 0:23d1f73bf130 67 /**
vladvana 0:23d1f73bf130 68 * @brief SDIO Handle Structure definition
vladvana 0:23d1f73bf130 69 */
vladvana 0:23d1f73bf130 70 typedef struct
vladvana 0:23d1f73bf130 71 {
vladvana 0:23d1f73bf130 72 SD_TypeDef *Instance; /*!< SDIO register base address */
vladvana 0:23d1f73bf130 73
vladvana 0:23d1f73bf130 74 SD_InitTypeDef Init; /*!< SD required parameters */
vladvana 0:23d1f73bf130 75
vladvana 0:23d1f73bf130 76 HAL_LockTypeDef Lock; /*!< SD locking object */
vladvana 0:23d1f73bf130 77
vladvana 0:23d1f73bf130 78 uint32_t CardType; /*!< SD card type */
vladvana 0:23d1f73bf130 79
vladvana 0:23d1f73bf130 80 uint32_t RCA; /*!< SD relative card address */
vladvana 0:23d1f73bf130 81
vladvana 0:23d1f73bf130 82 uint32_t CSD[4]; /*!< SD card specific data table */
vladvana 0:23d1f73bf130 83
vladvana 0:23d1f73bf130 84 uint32_t CID[4]; /*!< SD card identification number table */
vladvana 0:23d1f73bf130 85
vladvana 0:23d1f73bf130 86 __IO uint32_t SdTransferCplt; /*!< SD transfer complete flag in non blocking mode */
vladvana 0:23d1f73bf130 87
vladvana 0:23d1f73bf130 88 __IO uint32_t SdTransferErr; /*!< SD transfer error flag in non blocking mode */
vladvana 0:23d1f73bf130 89
vladvana 0:23d1f73bf130 90 __IO uint32_t DmaTransferCplt; /*!< SD DMA transfer complete flag */
vladvana 0:23d1f73bf130 91
vladvana 0:23d1f73bf130 92 __IO uint32_t SdOperation; /*!< SD transfer operation (read/write) */
vladvana 0:23d1f73bf130 93
vladvana 0:23d1f73bf130 94 DMA_HandleTypeDef *hdmarx; /*!< SD Rx DMA handle parameters */
vladvana 0:23d1f73bf130 95
vladvana 0:23d1f73bf130 96 DMA_HandleTypeDef *hdmatx; /*!< SD Tx DMA handle parameters */
vladvana 0:23d1f73bf130 97
vladvana 0:23d1f73bf130 98 }SD_HandleTypeDef;
vladvana 0:23d1f73bf130 99
vladvana 0:23d1f73bf130 100 /**
vladvana 0:23d1f73bf130 101 * @brief Card Specific Data: CSD Register
vladvana 0:23d1f73bf130 102 */
vladvana 0:23d1f73bf130 103 typedef struct
vladvana 0:23d1f73bf130 104 {
vladvana 0:23d1f73bf130 105 __IO uint8_t CSDStruct; /*!< CSD structure */
vladvana 0:23d1f73bf130 106 __IO uint8_t SysSpecVersion; /*!< System specification version */
vladvana 0:23d1f73bf130 107 __IO uint8_t Reserved1; /*!< Reserved */
vladvana 0:23d1f73bf130 108 __IO uint8_t TAAC; /*!< Data read access time 1 */
vladvana 0:23d1f73bf130 109 __IO uint8_t NSAC; /*!< Data read access time 2 in CLK cycles */
vladvana 0:23d1f73bf130 110 __IO uint8_t MaxBusClkFrec; /*!< Max. bus clock frequency */
vladvana 0:23d1f73bf130 111 __IO uint16_t CardComdClasses; /*!< Card command classes */
vladvana 0:23d1f73bf130 112 __IO uint8_t RdBlockLen; /*!< Max. read data block length */
vladvana 0:23d1f73bf130 113 __IO uint8_t PartBlockRead; /*!< Partial blocks for read allowed */
vladvana 0:23d1f73bf130 114 __IO uint8_t WrBlockMisalign; /*!< Write block misalignment */
vladvana 0:23d1f73bf130 115 __IO uint8_t RdBlockMisalign; /*!< Read block misalignment */
vladvana 0:23d1f73bf130 116 __IO uint8_t DSRImpl; /*!< DSR implemented */
vladvana 0:23d1f73bf130 117 __IO uint8_t Reserved2; /*!< Reserved */
vladvana 0:23d1f73bf130 118 __IO uint32_t DeviceSize; /*!< Device Size */
vladvana 0:23d1f73bf130 119 __IO uint8_t MaxRdCurrentVDDMin; /*!< Max. read current @ VDD min */
vladvana 0:23d1f73bf130 120 __IO uint8_t MaxRdCurrentVDDMax; /*!< Max. read current @ VDD max */
vladvana 0:23d1f73bf130 121 __IO uint8_t MaxWrCurrentVDDMin; /*!< Max. write current @ VDD min */
vladvana 0:23d1f73bf130 122 __IO uint8_t MaxWrCurrentVDDMax; /*!< Max. write current @ VDD max */
vladvana 0:23d1f73bf130 123 __IO uint8_t DeviceSizeMul; /*!< Device size multiplier */
vladvana 0:23d1f73bf130 124 __IO uint8_t EraseGrSize; /*!< Erase group size */
vladvana 0:23d1f73bf130 125 __IO uint8_t EraseGrMul; /*!< Erase group size multiplier */
vladvana 0:23d1f73bf130 126 __IO uint8_t WrProtectGrSize; /*!< Write protect group size */
vladvana 0:23d1f73bf130 127 __IO uint8_t WrProtectGrEnable; /*!< Write protect group enable */
vladvana 0:23d1f73bf130 128 __IO uint8_t ManDeflECC; /*!< Manufacturer default ECC */
vladvana 0:23d1f73bf130 129 __IO uint8_t WrSpeedFact; /*!< Write speed factor */
vladvana 0:23d1f73bf130 130 __IO uint8_t MaxWrBlockLen; /*!< Max. write data block length */
vladvana 0:23d1f73bf130 131 __IO uint8_t WriteBlockPaPartial; /*!< Partial blocks for write allowed */
vladvana 0:23d1f73bf130 132 __IO uint8_t Reserved3; /*!< Reserved */
vladvana 0:23d1f73bf130 133 __IO uint8_t ContentProtectAppli; /*!< Content protection application */
vladvana 0:23d1f73bf130 134 __IO uint8_t FileFormatGrouop; /*!< File format group */
vladvana 0:23d1f73bf130 135 __IO uint8_t CopyFlag; /*!< Copy flag (OTP) */
vladvana 0:23d1f73bf130 136 __IO uint8_t PermWrProtect; /*!< Permanent write protection */
vladvana 0:23d1f73bf130 137 __IO uint8_t TempWrProtect; /*!< Temporary write protection */
vladvana 0:23d1f73bf130 138 __IO uint8_t FileFormat; /*!< File format */
vladvana 0:23d1f73bf130 139 __IO uint8_t ECC; /*!< ECC code */
vladvana 0:23d1f73bf130 140 __IO uint8_t CSD_CRC; /*!< CSD CRC */
vladvana 0:23d1f73bf130 141 __IO uint8_t Reserved4; /*!< Always 1 */
vladvana 0:23d1f73bf130 142
vladvana 0:23d1f73bf130 143 }HAL_SD_CSDTypedef;
vladvana 0:23d1f73bf130 144
vladvana 0:23d1f73bf130 145 /**
vladvana 0:23d1f73bf130 146 * @brief Card Identification Data: CID Register
vladvana 0:23d1f73bf130 147 */
vladvana 0:23d1f73bf130 148 typedef struct
vladvana 0:23d1f73bf130 149 {
vladvana 0:23d1f73bf130 150 __IO uint8_t ManufacturerID; /*!< Manufacturer ID */
vladvana 0:23d1f73bf130 151 __IO uint16_t OEM_AppliID; /*!< OEM/Application ID */
vladvana 0:23d1f73bf130 152 __IO uint32_t ProdName1; /*!< Product Name part1 */
vladvana 0:23d1f73bf130 153 __IO uint8_t ProdName2; /*!< Product Name part2 */
vladvana 0:23d1f73bf130 154 __IO uint8_t ProdRev; /*!< Product Revision */
vladvana 0:23d1f73bf130 155 __IO uint32_t ProdSN; /*!< Product Serial Number */
vladvana 0:23d1f73bf130 156 __IO uint8_t Reserved1; /*!< Reserved1 */
vladvana 0:23d1f73bf130 157 __IO uint16_t ManufactDate; /*!< Manufacturing Date */
vladvana 0:23d1f73bf130 158 __IO uint8_t CID_CRC; /*!< CID CRC */
vladvana 0:23d1f73bf130 159 __IO uint8_t Reserved2; /*!< Always 1 */
vladvana 0:23d1f73bf130 160
vladvana 0:23d1f73bf130 161 }HAL_SD_CIDTypedef;
vladvana 0:23d1f73bf130 162
vladvana 0:23d1f73bf130 163 /**
vladvana 0:23d1f73bf130 164 * @brief SD Card Status returned by ACMD13
vladvana 0:23d1f73bf130 165 */
vladvana 0:23d1f73bf130 166 typedef struct
vladvana 0:23d1f73bf130 167 {
vladvana 0:23d1f73bf130 168 __IO uint8_t DAT_BUS_WIDTH; /*!< Shows the currently defined data bus width */
vladvana 0:23d1f73bf130 169 __IO uint8_t SECURED_MODE; /*!< Card is in secured mode of operation */
vladvana 0:23d1f73bf130 170 __IO uint16_t SD_CARD_TYPE; /*!< Carries information about card type */
vladvana 0:23d1f73bf130 171 __IO uint32_t SIZE_OF_PROTECTED_AREA; /*!< Carries information about the capacity of protected area */
vladvana 0:23d1f73bf130 172 __IO uint8_t SPEED_CLASS; /*!< Carries information about the speed class of the card */
vladvana 0:23d1f73bf130 173 __IO uint8_t PERFORMANCE_MOVE; /*!< Carries information about the card's performance move */
vladvana 0:23d1f73bf130 174 __IO uint8_t AU_SIZE; /*!< Carries information about the card's allocation unit size */
vladvana 0:23d1f73bf130 175 __IO uint16_t ERASE_SIZE; /*!< Determines the number of AUs to be erased in one operation */
vladvana 0:23d1f73bf130 176 __IO uint8_t ERASE_TIMEOUT; /*!< Determines the timeout for any number of AU erase */
vladvana 0:23d1f73bf130 177 __IO uint8_t ERASE_OFFSET; /*!< Carries information about the erase offset */
vladvana 0:23d1f73bf130 178
vladvana 0:23d1f73bf130 179 }HAL_SD_CardStatusTypedef;
vladvana 0:23d1f73bf130 180
vladvana 0:23d1f73bf130 181 /**
vladvana 0:23d1f73bf130 182 * @brief SD Card information structure
vladvana 0:23d1f73bf130 183 */
vladvana 0:23d1f73bf130 184 typedef struct
vladvana 0:23d1f73bf130 185 {
vladvana 0:23d1f73bf130 186 HAL_SD_CSDTypedef SD_csd; /*!< SD card specific data register */
vladvana 0:23d1f73bf130 187 HAL_SD_CIDTypedef SD_cid; /*!< SD card identification number register */
vladvana 0:23d1f73bf130 188 uint64_t CardCapacity; /*!< Card capacity */
vladvana 0:23d1f73bf130 189 uint32_t CardBlockSize; /*!< Card block size */
vladvana 0:23d1f73bf130 190 uint16_t RCA; /*!< SD relative card address */
vladvana 0:23d1f73bf130 191 uint8_t CardType; /*!< SD card type */
vladvana 0:23d1f73bf130 192
vladvana 0:23d1f73bf130 193 }HAL_SD_CardInfoTypedef;
vladvana 0:23d1f73bf130 194
vladvana 0:23d1f73bf130 195 /**
vladvana 0:23d1f73bf130 196 * @brief SD Error status enumeration Structure definition
vladvana 0:23d1f73bf130 197 */
vladvana 0:23d1f73bf130 198 typedef enum
vladvana 0:23d1f73bf130 199 {
vladvana 0:23d1f73bf130 200 /**
vladvana 0:23d1f73bf130 201 * @brief SD specific error defines
vladvana 0:23d1f73bf130 202 */
vladvana 0:23d1f73bf130 203 SD_CMD_CRC_FAIL = (1), /*!< Command response received (but CRC check failed) */
vladvana 0:23d1f73bf130 204 SD_DATA_CRC_FAIL = (2), /*!< Data block sent/received (CRC check failed) */
vladvana 0:23d1f73bf130 205 SD_CMD_RSP_TIMEOUT = (3), /*!< Command response timeout */
vladvana 0:23d1f73bf130 206 SD_DATA_TIMEOUT = (4), /*!< Data timeout */
vladvana 0:23d1f73bf130 207 SD_TX_UNDERRUN = (5), /*!< Transmit FIFO underrun */
vladvana 0:23d1f73bf130 208 SD_RX_OVERRUN = (6), /*!< Receive FIFO overrun */
vladvana 0:23d1f73bf130 209 SD_START_BIT_ERR = (7), /*!< Start bit not detected on all data signals in wide bus mode */
vladvana 0:23d1f73bf130 210 SD_CMD_OUT_OF_RANGE = (8), /*!< Command's argument was out of range. */
vladvana 0:23d1f73bf130 211 SD_ADDR_MISALIGNED = (9), /*!< Misaligned address */
vladvana 0:23d1f73bf130 212 SD_BLOCK_LEN_ERR = (10), /*!< Transferred block length is not allowed for the card or the number of transferred bytes does not match the block length */
vladvana 0:23d1f73bf130 213 SD_ERASE_SEQ_ERR = (11), /*!< An error in the sequence of erase command occurs. */
vladvana 0:23d1f73bf130 214 SD_BAD_ERASE_PARAM = (12), /*!< An invalid selection for erase groups */
vladvana 0:23d1f73bf130 215 SD_WRITE_PROT_VIOLATION = (13), /*!< Attempt to program a write protect block */
vladvana 0:23d1f73bf130 216 SD_LOCK_UNLOCK_FAILED = (14), /*!< Sequence or password error has been detected in unlock command or if there was an attempt to access a locked card */
vladvana 0:23d1f73bf130 217 SD_COM_CRC_FAILED = (15), /*!< CRC check of the previous command failed */
vladvana 0:23d1f73bf130 218 SD_ILLEGAL_CMD = (16), /*!< Command is not legal for the card state */
vladvana 0:23d1f73bf130 219 SD_CARD_ECC_FAILED = (17), /*!< Card internal ECC was applied but failed to correct the data */
vladvana 0:23d1f73bf130 220 SD_CC_ERROR = (18), /*!< Internal card controller error */
vladvana 0:23d1f73bf130 221 SD_GENERAL_UNKNOWN_ERROR = (19), /*!< General or unknown error */
vladvana 0:23d1f73bf130 222 SD_STREAM_READ_UNDERRUN = (20), /*!< The card could not sustain data transfer in stream read operation. */
vladvana 0:23d1f73bf130 223 SD_STREAM_WRITE_OVERRUN = (21), /*!< The card could not sustain data programming in stream mode */
vladvana 0:23d1f73bf130 224 SD_CID_CSD_OVERWRITE = (22), /*!< CID/CSD overwrite error */
vladvana 0:23d1f73bf130 225 SD_WP_ERASE_SKIP = (23), /*!< Only partial address space was erased */
vladvana 0:23d1f73bf130 226 SD_CARD_ECC_DISABLED = (24), /*!< Command has been executed without using internal ECC */
vladvana 0:23d1f73bf130 227 SD_ERASE_RESET = (25), /*!< Erase sequence was cleared before executing because an out of erase sequence command was received */
vladvana 0:23d1f73bf130 228 SD_AKE_SEQ_ERROR = (26), /*!< Error in sequence of authentication. */
vladvana 0:23d1f73bf130 229 SD_INVALID_VOLTRANGE = (27),
vladvana 0:23d1f73bf130 230 SD_ADDR_OUT_OF_RANGE = (28),
vladvana 0:23d1f73bf130 231 SD_SWITCH_ERROR = (29),
vladvana 0:23d1f73bf130 232 SD_SDIO_DISABLED = (30),
vladvana 0:23d1f73bf130 233 SD_SDIO_FUNCTION_BUSY = (31),
vladvana 0:23d1f73bf130 234 SD_SDIO_FUNCTION_FAILED = (32),
vladvana 0:23d1f73bf130 235 SD_SDIO_UNKNOWN_FUNCTION = (33),
vladvana 0:23d1f73bf130 236
vladvana 0:23d1f73bf130 237 /**
vladvana 0:23d1f73bf130 238 * @brief Standard error defines
vladvana 0:23d1f73bf130 239 */
vladvana 0:23d1f73bf130 240 SD_INTERNAL_ERROR = (34),
vladvana 0:23d1f73bf130 241 SD_NOT_CONFIGURED = (35),
vladvana 0:23d1f73bf130 242 SD_REQUEST_PENDING = (36),
vladvana 0:23d1f73bf130 243 SD_REQUEST_NOT_APPLICABLE = (37),
vladvana 0:23d1f73bf130 244 SD_INVALID_PARAMETER = (38),
vladvana 0:23d1f73bf130 245 SD_UNSUPPORTED_FEATURE = (39),
vladvana 0:23d1f73bf130 246 SD_UNSUPPORTED_HW = (40),
vladvana 0:23d1f73bf130 247 SD_ERROR = (41),
vladvana 0:23d1f73bf130 248 SD_OK = (0)
vladvana 0:23d1f73bf130 249
vladvana 0:23d1f73bf130 250 }HAL_SD_ErrorTypedef;
vladvana 0:23d1f73bf130 251
vladvana 0:23d1f73bf130 252 /**
vladvana 0:23d1f73bf130 253 * @brief SD Transfer state enumeration structure
vladvana 0:23d1f73bf130 254 */
vladvana 0:23d1f73bf130 255 typedef enum
vladvana 0:23d1f73bf130 256 {
vladvana 0:23d1f73bf130 257 SD_TRANSFER_OK = 0, /*!< Transfer success */
vladvana 0:23d1f73bf130 258 SD_TRANSFER_BUSY = 1, /*!< Transfer is occurring */
vladvana 0:23d1f73bf130 259 SD_TRANSFER_ERROR = 2 /*!< Transfer failed */
vladvana 0:23d1f73bf130 260
vladvana 0:23d1f73bf130 261 }HAL_SD_TransferStateTypedef;
vladvana 0:23d1f73bf130 262
vladvana 0:23d1f73bf130 263 /**
vladvana 0:23d1f73bf130 264 * @brief SD Card State enumeration structure
vladvana 0:23d1f73bf130 265 */
vladvana 0:23d1f73bf130 266 typedef enum
vladvana 0:23d1f73bf130 267 {
vladvana 0:23d1f73bf130 268 SD_CARD_READY = ((uint32_t)0x00000001), /*!< Card state is ready */
vladvana 0:23d1f73bf130 269 SD_CARD_IDENTIFICATION = ((uint32_t)0x00000002), /*!< Card is in identification state */
vladvana 0:23d1f73bf130 270 SD_CARD_STANDBY = ((uint32_t)0x00000003), /*!< Card is in standby state */
vladvana 0:23d1f73bf130 271 SD_CARD_TRANSFER = ((uint32_t)0x00000004), /*!< Card is in transfer state */
vladvana 0:23d1f73bf130 272 SD_CARD_SENDING = ((uint32_t)0x00000005), /*!< Card is sending an operation */
vladvana 0:23d1f73bf130 273 SD_CARD_RECEIVING = ((uint32_t)0x00000006), /*!< Card is receiving operation information */
vladvana 0:23d1f73bf130 274 SD_CARD_PROGRAMMING = ((uint32_t)0x00000007), /*!< Card is in programming state */
vladvana 0:23d1f73bf130 275 SD_CARD_DISCONNECTED = ((uint32_t)0x00000008), /*!< Card is disconnected */
vladvana 0:23d1f73bf130 276 SD_CARD_ERROR = ((uint32_t)0x000000FF) /*!< Card is in error state */
vladvana 0:23d1f73bf130 277
vladvana 0:23d1f73bf130 278 }HAL_SD_CardStateTypedef;
vladvana 0:23d1f73bf130 279
vladvana 0:23d1f73bf130 280 /**
vladvana 0:23d1f73bf130 281 * @brief SD Operation enumeration structure
vladvana 0:23d1f73bf130 282 */
vladvana 0:23d1f73bf130 283 typedef enum
vladvana 0:23d1f73bf130 284 {
vladvana 0:23d1f73bf130 285 SD_READ_SINGLE_BLOCK = 0, /*!< Read single block operation */
vladvana 0:23d1f73bf130 286 SD_READ_MULTIPLE_BLOCK = 1, /*!< Read multiple blocks operation */
vladvana 0:23d1f73bf130 287 SD_WRITE_SINGLE_BLOCK = 2, /*!< Write single block operation */
vladvana 0:23d1f73bf130 288 SD_WRITE_MULTIPLE_BLOCK = 3 /*!< Write multiple blocks operation */
vladvana 0:23d1f73bf130 289
vladvana 0:23d1f73bf130 290 }HAL_SD_OperationTypedef;
vladvana 0:23d1f73bf130 291
vladvana 0:23d1f73bf130 292 /**
vladvana 0:23d1f73bf130 293 * @}
vladvana 0:23d1f73bf130 294 */
vladvana 0:23d1f73bf130 295
vladvana 0:23d1f73bf130 296 /* Exported constants --------------------------------------------------------*/
vladvana 0:23d1f73bf130 297 /** @defgroup SD_Exported_Constants SD Exported Constants
vladvana 0:23d1f73bf130 298 * @{
vladvana 0:23d1f73bf130 299 */
vladvana 0:23d1f73bf130 300
vladvana 0:23d1f73bf130 301 /**
vladvana 0:23d1f73bf130 302 * @brief SD Commands Index
vladvana 0:23d1f73bf130 303 */
vladvana 0:23d1f73bf130 304 #define SD_CMD_GO_IDLE_STATE ((uint8_t)0) /*!< Resets the SD memory card. */
vladvana 0:23d1f73bf130 305 #define SD_CMD_SEND_OP_COND ((uint8_t)1) /*!< Sends host capacity support information and activates the card's initialization process. */
vladvana 0:23d1f73bf130 306 #define SD_CMD_ALL_SEND_CID ((uint8_t)2) /*!< Asks any card connected to the host to send the CID numbers on the CMD line. */
vladvana 0:23d1f73bf130 307 #define SD_CMD_SET_REL_ADDR ((uint8_t)3) /*!< Asks the card to publish a new relative address (RCA). */
vladvana 0:23d1f73bf130 308 #define SD_CMD_SET_DSR ((uint8_t)4) /*!< Programs the DSR of all cards. */
vladvana 0:23d1f73bf130 309 #define SD_CMD_SDIO_SEN_OP_COND ((uint8_t)5) /*!< Sends host capacity support information (HCS) and asks the accessed card to send its
vladvana 0:23d1f73bf130 310 operating condition register (OCR) content in the response on the CMD line. */
vladvana 0:23d1f73bf130 311 #define SD_CMD_HS_SWITCH ((uint8_t)6) /*!< Checks switchable function (mode 0) and switch card function (mode 1). */
vladvana 0:23d1f73bf130 312 #define SD_CMD_SEL_DESEL_CARD ((uint8_t)7) /*!< Selects the card by its own relative address and gets deselected by any other address */
vladvana 0:23d1f73bf130 313 #define SD_CMD_HS_SEND_EXT_CSD ((uint8_t)8) /*!< Sends SD Memory Card interface condition, which includes host supply voltage information
vladvana 0:23d1f73bf130 314 and asks the card whether card supports voltage. */
vladvana 0:23d1f73bf130 315 #define SD_CMD_SEND_CSD ((uint8_t)9) /*!< Addressed card sends its card specific data (CSD) on the CMD line. */
vladvana 0:23d1f73bf130 316 #define SD_CMD_SEND_CID ((uint8_t)10) /*!< Addressed card sends its card identification (CID) on the CMD line. */
vladvana 0:23d1f73bf130 317 #define SD_CMD_READ_DAT_UNTIL_STOP ((uint8_t)11) /*!< SD card doesn't support it. */
vladvana 0:23d1f73bf130 318 #define SD_CMD_STOP_TRANSMISSION ((uint8_t)12) /*!< Forces the card to stop transmission. */
vladvana 0:23d1f73bf130 319 #define SD_CMD_SEND_STATUS ((uint8_t)13) /*!< Addressed card sends its status register. */
vladvana 0:23d1f73bf130 320 #define SD_CMD_HS_BUSTEST_READ ((uint8_t)14)
vladvana 0:23d1f73bf130 321 #define SD_CMD_GO_INACTIVE_STATE ((uint8_t)15) /*!< Sends an addressed card into the inactive state. */
vladvana 0:23d1f73bf130 322 #define SD_CMD_SET_BLOCKLEN ((uint8_t)16) /*!< Sets the block length (in bytes for SDSC) for all following block commands
vladvana 0:23d1f73bf130 323 (read, write, lock). Default block length is fixed to 512 Bytes. Not effective
vladvana 0:23d1f73bf130 324 for SDHS and SDXC. */
vladvana 0:23d1f73bf130 325 #define SD_CMD_READ_SINGLE_BLOCK ((uint8_t)17) /*!< Reads single block of size selected by SET_BLOCKLEN in case of SDSC, and a block of
vladvana 0:23d1f73bf130 326 fixed 512 bytes in case of SDHC and SDXC. */
vladvana 0:23d1f73bf130 327 #define SD_CMD_READ_MULT_BLOCK ((uint8_t)18) /*!< Continuously transfers data blocks from card to host until interrupted by
vladvana 0:23d1f73bf130 328 STOP_TRANSMISSION command. */
vladvana 0:23d1f73bf130 329 #define SD_CMD_HS_BUSTEST_WRITE ((uint8_t)19) /*!< 64 bytes tuning pattern is sent for SDR50 and SDR104. */
vladvana 0:23d1f73bf130 330 #define SD_CMD_WRITE_DAT_UNTIL_STOP ((uint8_t)20) /*!< Speed class control command. */
vladvana 0:23d1f73bf130 331 #define SD_CMD_SET_BLOCK_COUNT ((uint8_t)23) /*!< Specify block count for CMD18 and CMD25. */
vladvana 0:23d1f73bf130 332 #define SD_CMD_WRITE_SINGLE_BLOCK ((uint8_t)24) /*!< Writes single block of size selected by SET_BLOCKLEN in case of SDSC, and a block of
vladvana 0:23d1f73bf130 333 fixed 512 bytes in case of SDHC and SDXC. */
vladvana 0:23d1f73bf130 334 #define SD_CMD_WRITE_MULT_BLOCK ((uint8_t)25) /*!< Continuously writes blocks of data until a STOP_TRANSMISSION follows. */
vladvana 0:23d1f73bf130 335 #define SD_CMD_PROG_CID ((uint8_t)26) /*!< Reserved for manufacturers. */
vladvana 0:23d1f73bf130 336 #define SD_CMD_PROG_CSD ((uint8_t)27) /*!< Programming of the programmable bits of the CSD. */
vladvana 0:23d1f73bf130 337 #define SD_CMD_SET_WRITE_PROT ((uint8_t)28) /*!< Sets the write protection bit of the addressed group. */
vladvana 0:23d1f73bf130 338 #define SD_CMD_CLR_WRITE_PROT ((uint8_t)29) /*!< Clears the write protection bit of the addressed group. */
vladvana 0:23d1f73bf130 339 #define SD_CMD_SEND_WRITE_PROT ((uint8_t)30) /*!< Asks the card to send the status of the write protection bits. */
vladvana 0:23d1f73bf130 340 #define SD_CMD_SD_ERASE_GRP_START ((uint8_t)32) /*!< Sets the address of the first write block to be erased. (For SD card only). */
vladvana 0:23d1f73bf130 341 #define SD_CMD_SD_ERASE_GRP_END ((uint8_t)33) /*!< Sets the address of the last write block of the continuous range to be erased. */
vladvana 0:23d1f73bf130 342 #define SD_CMD_ERASE_GRP_START ((uint8_t)35) /*!< Sets the address of the first write block to be erased. Reserved for each command
vladvana 0:23d1f73bf130 343 system set by switch function command (CMD6). */
vladvana 0:23d1f73bf130 344 #define SD_CMD_ERASE_GRP_END ((uint8_t)36) /*!< Sets the address of the last write block of the continuous range to be erased.
vladvana 0:23d1f73bf130 345 Reserved for each command system set by switch function command (CMD6). */
vladvana 0:23d1f73bf130 346 #define SD_CMD_ERASE ((uint8_t)38) /*!< Reserved for SD security applications. */
vladvana 0:23d1f73bf130 347 #define SD_CMD_FAST_IO ((uint8_t)39) /*!< SD card doesn't support it (Reserved). */
vladvana 0:23d1f73bf130 348 #define SD_CMD_GO_IRQ_STATE ((uint8_t)40) /*!< SD card doesn't support it (Reserved). */
vladvana 0:23d1f73bf130 349 #define SD_CMD_LOCK_UNLOCK ((uint8_t)42) /*!< Sets/resets the password or lock/unlock the card. The size of the data block is set by
vladvana 0:23d1f73bf130 350 the SET_BLOCK_LEN command. */
vladvana 0:23d1f73bf130 351 #define SD_CMD_APP_CMD ((uint8_t)55) /*!< Indicates to the card that the next command is an application specific command rather
vladvana 0:23d1f73bf130 352 than a standard command. */
vladvana 0:23d1f73bf130 353 #define SD_CMD_GEN_CMD ((uint8_t)56) /*!< Used either to transfer a data block to the card or to get a data block from the card
vladvana 0:23d1f73bf130 354 for general purpose/application specific commands. */
vladvana 0:23d1f73bf130 355 #define SD_CMD_NO_CMD ((uint8_t)64)
vladvana 0:23d1f73bf130 356
vladvana 0:23d1f73bf130 357 /**
vladvana 0:23d1f73bf130 358 * @brief Following commands are SD Card Specific commands.
vladvana 0:23d1f73bf130 359 * SDIO_APP_CMD should be sent before sending these commands.
vladvana 0:23d1f73bf130 360 */
vladvana 0:23d1f73bf130 361 #define SD_CMD_APP_SD_SET_BUSWIDTH ((uint8_t)6) /*!< (ACMD6) Defines the data bus width to be used for data transfer. The allowed data bus
vladvana 0:23d1f73bf130 362 widths are given in SCR register. */
vladvana 0:23d1f73bf130 363 #define SD_CMD_SD_APP_STATUS ((uint8_t)13) /*!< (ACMD13) Sends the SD status. */
vladvana 0:23d1f73bf130 364 #define SD_CMD_SD_APP_SEND_NUM_WRITE_BLOCKS ((uint8_t)22) /*!< (ACMD22) Sends the number of the written (without errors) write blocks. Responds with
vladvana 0:23d1f73bf130 365 32bit+CRC data block. */
vladvana 0:23d1f73bf130 366 #define SD_CMD_SD_APP_OP_COND ((uint8_t)41) /*!< (ACMD41) Sends host capacity support information (HCS) and asks the accessed card to
vladvana 0:23d1f73bf130 367 send its operating condition register (OCR) content in the response on the CMD line. */
vladvana 0:23d1f73bf130 368 #define SD_CMD_SD_APP_SET_CLR_CARD_DETECT ((uint8_t)42) /*!< (ACMD42) Connects/Disconnects the 50 KOhm pull-up resistor on CD/DAT3 (pin 1) of the card. */
vladvana 0:23d1f73bf130 369 #define SD_CMD_SD_APP_SEND_SCR ((uint8_t)51) /*!< Reads the SD Configuration Register (SCR). */
vladvana 0:23d1f73bf130 370 #define SD_CMD_SDIO_RW_DIRECT ((uint8_t)52) /*!< For SD I/O card only, reserved for security specification. */
vladvana 0:23d1f73bf130 371 #define SD_CMD_SDIO_RW_EXTENDED ((uint8_t)53) /*!< For SD I/O card only, reserved for security specification. */
vladvana 0:23d1f73bf130 372
vladvana 0:23d1f73bf130 373 /**
vladvana 0:23d1f73bf130 374 * @brief Following commands are SD Card Specific security commands.
vladvana 0:23d1f73bf130 375 * SD_CMD_APP_CMD should be sent before sending these commands.
vladvana 0:23d1f73bf130 376 */
vladvana 0:23d1f73bf130 377 #define SD_CMD_SD_APP_GET_MKB ((uint8_t)43) /*!< For SD card only */
vladvana 0:23d1f73bf130 378 #define SD_CMD_SD_APP_GET_MID ((uint8_t)44) /*!< For SD card only */
vladvana 0:23d1f73bf130 379 #define SD_CMD_SD_APP_SET_CER_RN1 ((uint8_t)45) /*!< For SD card only */
vladvana 0:23d1f73bf130 380 #define SD_CMD_SD_APP_GET_CER_RN2 ((uint8_t)46) /*!< For SD card only */
vladvana 0:23d1f73bf130 381 #define SD_CMD_SD_APP_SET_CER_RES2 ((uint8_t)47) /*!< For SD card only */
vladvana 0:23d1f73bf130 382 #define SD_CMD_SD_APP_GET_CER_RES1 ((uint8_t)48) /*!< For SD card only */
vladvana 0:23d1f73bf130 383 #define SD_CMD_SD_APP_SECURE_READ_MULTIPLE_BLOCK ((uint8_t)18) /*!< For SD card only */
vladvana 0:23d1f73bf130 384 #define SD_CMD_SD_APP_SECURE_WRITE_MULTIPLE_BLOCK ((uint8_t)25) /*!< For SD card only */
vladvana 0:23d1f73bf130 385 #define SD_CMD_SD_APP_SECURE_ERASE ((uint8_t)38) /*!< For SD card only */
vladvana 0:23d1f73bf130 386 #define SD_CMD_SD_APP_CHANGE_SECURE_AREA ((uint8_t)49) /*!< For SD card only */
vladvana 0:23d1f73bf130 387 #define SD_CMD_SD_APP_SECURE_WRITE_MKB ((uint8_t)48) /*!< For SD card only */
vladvana 0:23d1f73bf130 388
vladvana 0:23d1f73bf130 389 /**
vladvana 0:23d1f73bf130 390 * @brief Supported SD Memory Cards
vladvana 0:23d1f73bf130 391 */
vladvana 0:23d1f73bf130 392 #define STD_CAPACITY_SD_CARD_V1_1 ((uint32_t)0x00000000)
vladvana 0:23d1f73bf130 393 #define STD_CAPACITY_SD_CARD_V2_0 ((uint32_t)0x00000001)
vladvana 0:23d1f73bf130 394 #define HIGH_CAPACITY_SD_CARD ((uint32_t)0x00000002)
vladvana 0:23d1f73bf130 395 #define MULTIMEDIA_CARD ((uint32_t)0x00000003)
vladvana 0:23d1f73bf130 396 #define SECURE_DIGITAL_IO_CARD ((uint32_t)0x00000004)
vladvana 0:23d1f73bf130 397 #define HIGH_SPEED_MULTIMEDIA_CARD ((uint32_t)0x00000005)
vladvana 0:23d1f73bf130 398 #define SECURE_DIGITAL_IO_COMBO_CARD ((uint32_t)0x00000006)
vladvana 0:23d1f73bf130 399 #define HIGH_CAPACITY_MMC_CARD ((uint32_t)0x00000007)
vladvana 0:23d1f73bf130 400 /**
vladvana 0:23d1f73bf130 401 * @}
vladvana 0:23d1f73bf130 402 */
vladvana 0:23d1f73bf130 403
vladvana 0:23d1f73bf130 404 /* Exported macro ------------------------------------------------------------*/
vladvana 0:23d1f73bf130 405 /** @defgroup SD_Exported_macros SD Exported Macros
vladvana 0:23d1f73bf130 406 * @brief macros to handle interrupts and specific clock configurations
vladvana 0:23d1f73bf130 407 * @{
vladvana 0:23d1f73bf130 408 */
vladvana 0:23d1f73bf130 409
vladvana 0:23d1f73bf130 410 /**
vladvana 0:23d1f73bf130 411 * @brief Enable the SD device.
vladvana 0:23d1f73bf130 412 * @param __HANDLE__: SD Handle
vladvana 0:23d1f73bf130 413 * @retval None
vladvana 0:23d1f73bf130 414 */
vladvana 0:23d1f73bf130 415 #define __HAL_SD_SDIO_ENABLE(__HANDLE__) __SDIO_ENABLE((__HANDLE__)->Instance)
vladvana 0:23d1f73bf130 416
vladvana 0:23d1f73bf130 417 /**
vladvana 0:23d1f73bf130 418 * @brief Disable the SD device.
vladvana 0:23d1f73bf130 419 * @param __HANDLE__: SD Handle
vladvana 0:23d1f73bf130 420 * @retval None
vladvana 0:23d1f73bf130 421 */
vladvana 0:23d1f73bf130 422 #define __HAL_SD_SDIO_DISABLE(__HANDLE__) __SDIO_DISABLE((__HANDLE__)->Instance)
vladvana 0:23d1f73bf130 423
vladvana 0:23d1f73bf130 424 /**
vladvana 0:23d1f73bf130 425 * @brief Enable the SDIO DMA transfer.
vladvana 0:23d1f73bf130 426 * @param __HANDLE__: SD Handle
vladvana 0:23d1f73bf130 427 * @retval None
vladvana 0:23d1f73bf130 428 */
vladvana 0:23d1f73bf130 429 #define __HAL_SD_SDIO_DMA_ENABLE(__HANDLE__) __SDIO_DMA_ENABLE((__HANDLE__)->Instance)
vladvana 0:23d1f73bf130 430
vladvana 0:23d1f73bf130 431 /**
vladvana 0:23d1f73bf130 432 * @brief Disable the SDIO DMA transfer.
vladvana 0:23d1f73bf130 433 * @param __HANDLE__: SD Handle
vladvana 0:23d1f73bf130 434 * @retval None
vladvana 0:23d1f73bf130 435 */
vladvana 0:23d1f73bf130 436 #define __HAL_SD_SDIO_DMA_DISABLE(__HANDLE__) __SDIO_DMA_DISABLE((__HANDLE__)->Instance)
vladvana 0:23d1f73bf130 437
vladvana 0:23d1f73bf130 438 /**
vladvana 0:23d1f73bf130 439 * @brief Enable the SD device interrupt.
vladvana 0:23d1f73bf130 440 * @param __HANDLE__: SD Handle
vladvana 0:23d1f73bf130 441 * @param __INTERRUPT__: specifies the SDIO interrupt sources to be enabled.
vladvana 0:23d1f73bf130 442 * This parameter can be one or a combination of the following values:
vladvana 0:23d1f73bf130 443 * @arg SDIO_IT_CCRCFAIL: Command response received (CRC check failed) interrupt
vladvana 0:23d1f73bf130 444 * @arg SDIO_IT_DCRCFAIL: Data block sent/received (CRC check failed) interrupt
vladvana 0:23d1f73bf130 445 * @arg SDIO_IT_CTIMEOUT: Command response timeout interrupt
vladvana 0:23d1f73bf130 446 * @arg SDIO_IT_DTIMEOUT: Data timeout interrupt
vladvana 0:23d1f73bf130 447 * @arg SDIO_IT_TXUNDERR: Transmit FIFO underrun error interrupt
vladvana 0:23d1f73bf130 448 * @arg SDIO_IT_RXOVERR: Received FIFO overrun error interrupt
vladvana 0:23d1f73bf130 449 * @arg SDIO_IT_CMDREND: Command response received (CRC check passed) interrupt
vladvana 0:23d1f73bf130 450 * @arg SDIO_IT_CMDSENT: Command sent (no response required) interrupt
vladvana 0:23d1f73bf130 451 * @arg SDIO_IT_DATAEND: Data end (data counter, SDIDCOUNT, is zero) interrupt
vladvana 0:23d1f73bf130 452 * @arg SDIO_IT_STBITERR: Start bit not detected on all data signals in wide
vladvana 0:23d1f73bf130 453 * bus mode interrupt
vladvana 0:23d1f73bf130 454 * @arg SDIO_IT_DBCKEND: Data block sent/received (CRC check passed) interrupt
vladvana 0:23d1f73bf130 455 * @arg SDIO_IT_CMDACT: Command transfer in progress interrupt
vladvana 0:23d1f73bf130 456 * @arg SDIO_IT_TXACT: Data transmit in progress interrupt
vladvana 0:23d1f73bf130 457 * @arg SDIO_IT_RXACT: Data receive in progress interrupt
vladvana 0:23d1f73bf130 458 * @arg SDIO_IT_TXFIFOHE: Transmit FIFO Half Empty interrupt
vladvana 0:23d1f73bf130 459 * @arg SDIO_IT_RXFIFOHF: Receive FIFO Half Full interrupt
vladvana 0:23d1f73bf130 460 * @arg SDIO_IT_TXFIFOF: Transmit FIFO full interrupt
vladvana 0:23d1f73bf130 461 * @arg SDIO_IT_RXFIFOF: Receive FIFO full interrupt
vladvana 0:23d1f73bf130 462 * @arg SDIO_IT_TXFIFOE: Transmit FIFO empty interrupt
vladvana 0:23d1f73bf130 463 * @arg SDIO_IT_RXFIFOE: Receive FIFO empty interrupt
vladvana 0:23d1f73bf130 464 * @arg SDIO_IT_TXDAVL: Data available in transmit FIFO interrupt
vladvana 0:23d1f73bf130 465 * @arg SDIO_IT_RXDAVL: Data available in receive FIFO interrupt
vladvana 0:23d1f73bf130 466 * @arg SDIO_IT_SDIOIT: SD I/O interrupt received interrupt
vladvana 0:23d1f73bf130 467 * @arg SDIO_IT_CEATAEND: CE-ATA command completion signal received for CMD61 interrupt
vladvana 0:23d1f73bf130 468 * @retval None
vladvana 0:23d1f73bf130 469 */
vladvana 0:23d1f73bf130 470 #define __HAL_SD_SDIO_ENABLE_IT(__HANDLE__, __INTERRUPT__) __SDIO_ENABLE_IT((__HANDLE__)->Instance, (__INTERRUPT__))
vladvana 0:23d1f73bf130 471
vladvana 0:23d1f73bf130 472 /**
vladvana 0:23d1f73bf130 473 * @brief Disable the SD device interrupt.
vladvana 0:23d1f73bf130 474 * @param __HANDLE__: SD Handle
vladvana 0:23d1f73bf130 475 * @param __INTERRUPT__: specifies the SDIO interrupt sources to be disabled.
vladvana 0:23d1f73bf130 476 * This parameter can be one or a combination of the following values:
vladvana 0:23d1f73bf130 477 * @arg SDIO_IT_CCRCFAIL: Command response received (CRC check failed) interrupt
vladvana 0:23d1f73bf130 478 * @arg SDIO_IT_DCRCFAIL: Data block sent/received (CRC check failed) interrupt
vladvana 0:23d1f73bf130 479 * @arg SDIO_IT_CTIMEOUT: Command response timeout interrupt
vladvana 0:23d1f73bf130 480 * @arg SDIO_IT_DTIMEOUT: Data timeout interrupt
vladvana 0:23d1f73bf130 481 * @arg SDIO_IT_TXUNDERR: Transmit FIFO underrun error interrupt
vladvana 0:23d1f73bf130 482 * @arg SDIO_IT_RXOVERR: Received FIFO overrun error interrupt
vladvana 0:23d1f73bf130 483 * @arg SDIO_IT_CMDREND: Command response received (CRC check passed) interrupt
vladvana 0:23d1f73bf130 484 * @arg SDIO_IT_CMDSENT: Command sent (no response required) interrupt
vladvana 0:23d1f73bf130 485 * @arg SDIO_IT_DATAEND: Data end (data counter, SDIDCOUNT, is zero) interrupt
vladvana 0:23d1f73bf130 486 * @arg SDIO_IT_STBITERR: Start bit not detected on all data signals in wide
vladvana 0:23d1f73bf130 487 * bus mode interrupt
vladvana 0:23d1f73bf130 488 * @arg SDIO_IT_DBCKEND: Data block sent/received (CRC check passed) interrupt
vladvana 0:23d1f73bf130 489 * @arg SDIO_IT_CMDACT: Command transfer in progress interrupt
vladvana 0:23d1f73bf130 490 * @arg SDIO_IT_TXACT: Data transmit in progress interrupt
vladvana 0:23d1f73bf130 491 * @arg SDIO_IT_RXACT: Data receive in progress interrupt
vladvana 0:23d1f73bf130 492 * @arg SDIO_IT_TXFIFOHE: Transmit FIFO Half Empty interrupt
vladvana 0:23d1f73bf130 493 * @arg SDIO_IT_RXFIFOHF: Receive FIFO Half Full interrupt
vladvana 0:23d1f73bf130 494 * @arg SDIO_IT_TXFIFOF: Transmit FIFO full interrupt
vladvana 0:23d1f73bf130 495 * @arg SDIO_IT_RXFIFOF: Receive FIFO full interrupt
vladvana 0:23d1f73bf130 496 * @arg SDIO_IT_TXFIFOE: Transmit FIFO empty interrupt
vladvana 0:23d1f73bf130 497 * @arg SDIO_IT_RXFIFOE: Receive FIFO empty interrupt
vladvana 0:23d1f73bf130 498 * @arg SDIO_IT_TXDAVL: Data available in transmit FIFO interrupt
vladvana 0:23d1f73bf130 499 * @arg SDIO_IT_RXDAVL: Data available in receive FIFO interrupt
vladvana 0:23d1f73bf130 500 * @arg SDIO_IT_SDIOIT: SD I/O interrupt received interrupt
vladvana 0:23d1f73bf130 501 * @arg SDIO_IT_CEATAEND: CE-ATA command completion signal received for CMD61 interrupt
vladvana 0:23d1f73bf130 502 * @retval None
vladvana 0:23d1f73bf130 503 */
vladvana 0:23d1f73bf130 504 #define __HAL_SD_SDIO_DISABLE_IT(__HANDLE__, __INTERRUPT__) __SDIO_DISABLE_IT((__HANDLE__)->Instance, (__INTERRUPT__))
vladvana 0:23d1f73bf130 505
vladvana 0:23d1f73bf130 506 /**
vladvana 0:23d1f73bf130 507 * @brief Check whether the specified SD flag is set or not.
vladvana 0:23d1f73bf130 508 * @param __HANDLE__: SD Handle
vladvana 0:23d1f73bf130 509 * @param __FLAG__: specifies the flag to check.
vladvana 0:23d1f73bf130 510 * This parameter can be one of the following values:
vladvana 0:23d1f73bf130 511 * @arg SDIO_FLAG_CCRCFAIL: Command response received (CRC check failed)
vladvana 0:23d1f73bf130 512 * @arg SDIO_FLAG_DCRCFAIL: Data block sent/received (CRC check failed)
vladvana 0:23d1f73bf130 513 * @arg SDIO_FLAG_CTIMEOUT: Command response timeout
vladvana 0:23d1f73bf130 514 * @arg SDIO_FLAG_DTIMEOUT: Data timeout
vladvana 0:23d1f73bf130 515 * @arg SDIO_FLAG_TXUNDERR: Transmit FIFO underrun error
vladvana 0:23d1f73bf130 516 * @arg SDIO_FLAG_RXOVERR: Received FIFO overrun error
vladvana 0:23d1f73bf130 517 * @arg SDIO_FLAG_CMDREND: Command response received (CRC check passed)
vladvana 0:23d1f73bf130 518 * @arg SDIO_FLAG_CMDSENT: Command sent (no response required)
vladvana 0:23d1f73bf130 519 * @arg SDIO_FLAG_DATAEND: Data end (data counter, SDIDCOUNT, is zero)
vladvana 0:23d1f73bf130 520 * @arg SDIO_FLAG_STBITERR: Start bit not detected on all data signals in wide bus mode.
vladvana 0:23d1f73bf130 521 * @arg SDIO_FLAG_DBCKEND: Data block sent/received (CRC check passed)
vladvana 0:23d1f73bf130 522 * @arg SDIO_FLAG_CMDACT: Command transfer in progress
vladvana 0:23d1f73bf130 523 * @arg SDIO_FLAG_TXACT: Data transmit in progress
vladvana 0:23d1f73bf130 524 * @arg SDIO_FLAG_RXACT: Data receive in progress
vladvana 0:23d1f73bf130 525 * @arg SDIO_FLAG_TXFIFOHE: Transmit FIFO Half Empty
vladvana 0:23d1f73bf130 526 * @arg SDIO_FLAG_RXFIFOHF: Receive FIFO Half Full
vladvana 0:23d1f73bf130 527 * @arg SDIO_FLAG_TXFIFOF: Transmit FIFO full
vladvana 0:23d1f73bf130 528 * @arg SDIO_FLAG_RXFIFOF: Receive FIFO full
vladvana 0:23d1f73bf130 529 * @arg SDIO_FLAG_TXFIFOE: Transmit FIFO empty
vladvana 0:23d1f73bf130 530 * @arg SDIO_FLAG_RXFIFOE: Receive FIFO empty
vladvana 0:23d1f73bf130 531 * @arg SDIO_FLAG_TXDAVL: Data available in transmit FIFO
vladvana 0:23d1f73bf130 532 * @arg SDIO_FLAG_RXDAVL: Data available in receive FIFO
vladvana 0:23d1f73bf130 533 * @arg SDIO_FLAG_SDIOIT: SD I/O interrupt received
vladvana 0:23d1f73bf130 534 * @arg SDIO_FLAG_CEATAEND: CE-ATA command completion signal received for CMD61
vladvana 0:23d1f73bf130 535 * @retval The new state of SD FLAG (SET or RESET).
vladvana 0:23d1f73bf130 536 */
vladvana 0:23d1f73bf130 537 #define __HAL_SD_SDIO_GET_FLAG(__HANDLE__, __FLAG__) __SDIO_GET_FLAG((__HANDLE__)->Instance, (__FLAG__))
vladvana 0:23d1f73bf130 538
vladvana 0:23d1f73bf130 539 /**
vladvana 0:23d1f73bf130 540 * @brief Clear the SD's pending flags.
vladvana 0:23d1f73bf130 541 * @param __HANDLE__: SD Handle
vladvana 0:23d1f73bf130 542 * @param __FLAG__: specifies the flag to clear.
vladvana 0:23d1f73bf130 543 * This parameter can be one or a combination of the following values:
vladvana 0:23d1f73bf130 544 * @arg SDIO_FLAG_CCRCFAIL: Command response received (CRC check failed)
vladvana 0:23d1f73bf130 545 * @arg SDIO_FLAG_DCRCFAIL: Data block sent/received (CRC check failed)
vladvana 0:23d1f73bf130 546 * @arg SDIO_FLAG_CTIMEOUT: Command response timeout
vladvana 0:23d1f73bf130 547 * @arg SDIO_FLAG_DTIMEOUT: Data timeout
vladvana 0:23d1f73bf130 548 * @arg SDIO_FLAG_TXUNDERR: Transmit FIFO underrun error
vladvana 0:23d1f73bf130 549 * @arg SDIO_FLAG_RXOVERR: Received FIFO overrun error
vladvana 0:23d1f73bf130 550 * @arg SDIO_FLAG_CMDREND: Command response received (CRC check passed)
vladvana 0:23d1f73bf130 551 * @arg SDIO_FLAG_CMDSENT: Command sent (no response required)
vladvana 0:23d1f73bf130 552 * @arg SDIO_FLAG_DATAEND: Data end (data counter, SDIDCOUNT, is zero)
vladvana 0:23d1f73bf130 553 * @arg SDIO_FLAG_STBITERR: Start bit not detected on all data signals in wide bus mode
vladvana 0:23d1f73bf130 554 * @arg SDIO_FLAG_DBCKEND: Data block sent/received (CRC check passed)
vladvana 0:23d1f73bf130 555 * @arg SDIO_FLAG_SDIOIT: SD I/O interrupt received
vladvana 0:23d1f73bf130 556 * @arg SDIO_FLAG_CEATAEND: CE-ATA command completion signal received for CMD61
vladvana 0:23d1f73bf130 557 * @retval None
vladvana 0:23d1f73bf130 558 */
vladvana 0:23d1f73bf130 559 #define __HAL_SD_SDIO_CLEAR_FLAG(__HANDLE__, __FLAG__) __SDIO_CLEAR_FLAG((__HANDLE__)->Instance, (__FLAG__))
vladvana 0:23d1f73bf130 560
vladvana 0:23d1f73bf130 561 /**
vladvana 0:23d1f73bf130 562 * @brief Check whether the specified SD interrupt has occurred or not.
vladvana 0:23d1f73bf130 563 * @param __HANDLE__: SD Handle
vladvana 0:23d1f73bf130 564 * @param __INTERRUPT__: specifies the SDIO interrupt source to check.
vladvana 0:23d1f73bf130 565 * This parameter can be one of the following values:
vladvana 0:23d1f73bf130 566 * @arg SDIO_IT_CCRCFAIL: Command response received (CRC check failed) interrupt
vladvana 0:23d1f73bf130 567 * @arg SDIO_IT_DCRCFAIL: Data block sent/received (CRC check failed) interrupt
vladvana 0:23d1f73bf130 568 * @arg SDIO_IT_CTIMEOUT: Command response timeout interrupt
vladvana 0:23d1f73bf130 569 * @arg SDIO_IT_DTIMEOUT: Data timeout interrupt
vladvana 0:23d1f73bf130 570 * @arg SDIO_IT_TXUNDERR: Transmit FIFO underrun error interrupt
vladvana 0:23d1f73bf130 571 * @arg SDIO_IT_RXOVERR: Received FIFO overrun error interrupt
vladvana 0:23d1f73bf130 572 * @arg SDIO_IT_CMDREND: Command response received (CRC check passed) interrupt
vladvana 0:23d1f73bf130 573 * @arg SDIO_IT_CMDSENT: Command sent (no response required) interrupt
vladvana 0:23d1f73bf130 574 * @arg SDIO_IT_DATAEND: Data end (data counter, SDIDCOUNT, is zero) interrupt
vladvana 0:23d1f73bf130 575 * @arg SDIO_IT_STBITERR: Start bit not detected on all data signals in wide
vladvana 0:23d1f73bf130 576 * bus mode interrupt
vladvana 0:23d1f73bf130 577 * @arg SDIO_IT_DBCKEND: Data block sent/received (CRC check passed) interrupt
vladvana 0:23d1f73bf130 578 * @arg SDIO_IT_CMDACT: Command transfer in progress interrupt
vladvana 0:23d1f73bf130 579 * @arg SDIO_IT_TXACT: Data transmit in progress interrupt
vladvana 0:23d1f73bf130 580 * @arg SDIO_IT_RXACT: Data receive in progress interrupt
vladvana 0:23d1f73bf130 581 * @arg SDIO_IT_TXFIFOHE: Transmit FIFO Half Empty interrupt
vladvana 0:23d1f73bf130 582 * @arg SDIO_IT_RXFIFOHF: Receive FIFO Half Full interrupt
vladvana 0:23d1f73bf130 583 * @arg SDIO_IT_TXFIFOF: Transmit FIFO full interrupt
vladvana 0:23d1f73bf130 584 * @arg SDIO_IT_RXFIFOF: Receive FIFO full interrupt
vladvana 0:23d1f73bf130 585 * @arg SDIO_IT_TXFIFOE: Transmit FIFO empty interrupt
vladvana 0:23d1f73bf130 586 * @arg SDIO_IT_RXFIFOE: Receive FIFO empty interrupt
vladvana 0:23d1f73bf130 587 * @arg SDIO_IT_TXDAVL: Data available in transmit FIFO interrupt
vladvana 0:23d1f73bf130 588 * @arg SDIO_IT_RXDAVL: Data available in receive FIFO interrupt
vladvana 0:23d1f73bf130 589 * @arg SDIO_IT_SDIOIT: SD I/O interrupt received interrupt
vladvana 0:23d1f73bf130 590 * @arg SDIO_IT_CEATAEND: CE-ATA command completion signal received for CMD61 interrupt
vladvana 0:23d1f73bf130 591 * @retval The new state of SD IT (SET or RESET).
vladvana 0:23d1f73bf130 592 */
vladvana 0:23d1f73bf130 593 #define __HAL_SD_SDIO_GET_IT (__HANDLE__, __INTERRUPT__) __SDIO_GET_IT ((__HANDLE__)->Instance, __INTERRUPT__)
vladvana 0:23d1f73bf130 594
vladvana 0:23d1f73bf130 595 /**
vladvana 0:23d1f73bf130 596 * @brief Clear the SD's interrupt pending bits.
vladvana 0:23d1f73bf130 597 * @param __HANDLE__ : SD Handle
vladvana 0:23d1f73bf130 598 * @param __INTERRUPT__: specifies the interrupt pending bit to clear.
vladvana 0:23d1f73bf130 599 * This parameter can be one or a combination of the following values:
vladvana 0:23d1f73bf130 600 * @arg SDIO_IT_CCRCFAIL: Command response received (CRC check failed) interrupt
vladvana 0:23d1f73bf130 601 * @arg SDIO_IT_DCRCFAIL: Data block sent/received (CRC check failed) interrupt
vladvana 0:23d1f73bf130 602 * @arg SDIO_IT_CTIMEOUT: Command response timeout interrupt
vladvana 0:23d1f73bf130 603 * @arg SDIO_IT_DTIMEOUT: Data timeout interrupt
vladvana 0:23d1f73bf130 604 * @arg SDIO_IT_TXUNDERR: Transmit FIFO underrun error interrupt
vladvana 0:23d1f73bf130 605 * @arg SDIO_IT_RXOVERR: Received FIFO overrun error interrupt
vladvana 0:23d1f73bf130 606 * @arg SDIO_IT_CMDREND: Command response received (CRC check passed) interrupt
vladvana 0:23d1f73bf130 607 * @arg SDIO_IT_CMDSENT: Command sent (no response required) interrupt
vladvana 0:23d1f73bf130 608 * @arg SDIO_IT_DATAEND: Data end (data counter, SDIO_DCOUNT, is zero) interrupt
vladvana 0:23d1f73bf130 609 * @arg SDIO_IT_STBITERR: Start bit not detected on all data signals in wide
vladvana 0:23d1f73bf130 610 * bus mode interrupt
vladvana 0:23d1f73bf130 611 * @arg SDIO_IT_SDIOIT: SD I/O interrupt received interrupt
vladvana 0:23d1f73bf130 612 * @arg SDIO_IT_CEATAEND: CE-ATA command completion signal received for CMD61
vladvana 0:23d1f73bf130 613 * @retval None
vladvana 0:23d1f73bf130 614 */
vladvana 0:23d1f73bf130 615 #define __HAL_SD_SDIO_CLEAR_IT(__HANDLE__, __INTERRUPT__) __SDIO_CLEAR_IT((__HANDLE__)->Instance, (__INTERRUPT__))
vladvana 0:23d1f73bf130 616 /**
vladvana 0:23d1f73bf130 617 * @}
vladvana 0:23d1f73bf130 618 */
vladvana 0:23d1f73bf130 619
vladvana 0:23d1f73bf130 620 /* Exported functions --------------------------------------------------------*/
vladvana 0:23d1f73bf130 621 /** @addtogroup SD_Exported_Functions
vladvana 0:23d1f73bf130 622 * @{
vladvana 0:23d1f73bf130 623 */
vladvana 0:23d1f73bf130 624
vladvana 0:23d1f73bf130 625 /* Initialization and de-initialization functions **********************************/
vladvana 0:23d1f73bf130 626 /** @addtogroup SD_Exported_Functions_Group1
vladvana 0:23d1f73bf130 627 * @{
vladvana 0:23d1f73bf130 628 */
vladvana 0:23d1f73bf130 629 HAL_SD_ErrorTypedef HAL_SD_Init(SD_HandleTypeDef *hsd, HAL_SD_CardInfoTypedef *SDCardInfo);
vladvana 0:23d1f73bf130 630 HAL_StatusTypeDef HAL_SD_DeInit (SD_HandleTypeDef *hsd);
vladvana 0:23d1f73bf130 631 void HAL_SD_MspInit(SD_HandleTypeDef *hsd);
vladvana 0:23d1f73bf130 632 void HAL_SD_MspDeInit(SD_HandleTypeDef *hsd);
vladvana 0:23d1f73bf130 633 /**
vladvana 0:23d1f73bf130 634 * @}
vladvana 0:23d1f73bf130 635 */
vladvana 0:23d1f73bf130 636
vladvana 0:23d1f73bf130 637 /* I/O operation functions *****************************************************/
vladvana 0:23d1f73bf130 638 /** @addtogroup SD_Exported_Functions_Group2
vladvana 0:23d1f73bf130 639 * @{
vladvana 0:23d1f73bf130 640 */
vladvana 0:23d1f73bf130 641 /* Blocking mode: Polling */
vladvana 0:23d1f73bf130 642 HAL_SD_ErrorTypedef HAL_SD_ReadBlocks(SD_HandleTypeDef *hsd, uint32_t *pReadBuffer, uint64_t ReadAddr, uint32_t BlockSize, uint32_t NumberOfBlocks);
vladvana 0:23d1f73bf130 643 HAL_SD_ErrorTypedef HAL_SD_WriteBlocks(SD_HandleTypeDef *hsd, uint32_t *pWriteBuffer, uint64_t WriteAddr, uint32_t BlockSize, uint32_t NumberOfBlocks);
vladvana 0:23d1f73bf130 644 HAL_SD_ErrorTypedef HAL_SD_Erase(SD_HandleTypeDef *hsd, uint64_t Startaddr, uint64_t Endaddr);
vladvana 0:23d1f73bf130 645
vladvana 0:23d1f73bf130 646 /* Non-Blocking mode: Interrupt */
vladvana 0:23d1f73bf130 647 void HAL_SD_IRQHandler(SD_HandleTypeDef *hsd);
vladvana 0:23d1f73bf130 648
vladvana 0:23d1f73bf130 649 /* Callback in non blocking modes (DMA) */
vladvana 0:23d1f73bf130 650 void HAL_SD_DMA_RxCpltCallback(DMA_HandleTypeDef *hdma);
vladvana 0:23d1f73bf130 651 void HAL_SD_DMA_RxErrorCallback(DMA_HandleTypeDef *hdma);
vladvana 0:23d1f73bf130 652 void HAL_SD_DMA_TxCpltCallback(DMA_HandleTypeDef *hdma);
vladvana 0:23d1f73bf130 653 void HAL_SD_DMA_TxErrorCallback(DMA_HandleTypeDef *hdma);
vladvana 0:23d1f73bf130 654 void HAL_SD_XferCpltCallback(SD_HandleTypeDef *hsd);
vladvana 0:23d1f73bf130 655 void HAL_SD_XferErrorCallback(SD_HandleTypeDef *hsd);
vladvana 0:23d1f73bf130 656
vladvana 0:23d1f73bf130 657 /* Non-Blocking mode: DMA */
vladvana 0:23d1f73bf130 658 HAL_SD_ErrorTypedef HAL_SD_ReadBlocks_DMA(SD_HandleTypeDef *hsd, uint32_t *pReadBuffer, uint64_t ReadAddr, uint32_t BlockSize, uint32_t NumberOfBlocks);
vladvana 0:23d1f73bf130 659 HAL_SD_ErrorTypedef HAL_SD_WriteBlocks_DMA(SD_HandleTypeDef *hsd, uint32_t *pWriteBuffer, uint64_t WriteAddr, uint32_t BlockSize, uint32_t NumberOfBlocks);
vladvana 0:23d1f73bf130 660 HAL_SD_ErrorTypedef HAL_SD_CheckWriteOperation(SD_HandleTypeDef *hsd, uint32_t Timeout);
vladvana 0:23d1f73bf130 661 HAL_SD_ErrorTypedef HAL_SD_CheckReadOperation(SD_HandleTypeDef *hsd, uint32_t Timeout);
vladvana 0:23d1f73bf130 662 /**
vladvana 0:23d1f73bf130 663 * @}
vladvana 0:23d1f73bf130 664 */
vladvana 0:23d1f73bf130 665
vladvana 0:23d1f73bf130 666 /* Peripheral Control functions ************************************************/
vladvana 0:23d1f73bf130 667 /** @addtogroup SD_Exported_Functions_Group3
vladvana 0:23d1f73bf130 668 * @{
vladvana 0:23d1f73bf130 669 */
vladvana 0:23d1f73bf130 670 HAL_SD_ErrorTypedef HAL_SD_Get_CardInfo(SD_HandleTypeDef *hsd, HAL_SD_CardInfoTypedef *pCardInfo);
vladvana 0:23d1f73bf130 671 HAL_SD_ErrorTypedef HAL_SD_WideBusOperation_Config(SD_HandleTypeDef *hsd, uint32_t WideMode);
vladvana 0:23d1f73bf130 672 HAL_SD_ErrorTypedef HAL_SD_StopTransfer(SD_HandleTypeDef *hsd);
vladvana 0:23d1f73bf130 673 HAL_SD_ErrorTypedef HAL_SD_HighSpeed (SD_HandleTypeDef *hsd);
vladvana 0:23d1f73bf130 674 /**
vladvana 0:23d1f73bf130 675 * @}
vladvana 0:23d1f73bf130 676 */
vladvana 0:23d1f73bf130 677
vladvana 0:23d1f73bf130 678 /* Peripheral State functions **************************************************/
vladvana 0:23d1f73bf130 679 /** @addtogroup SD_Exported_Functions_Group4
vladvana 0:23d1f73bf130 680 * @{
vladvana 0:23d1f73bf130 681 */
vladvana 0:23d1f73bf130 682 HAL_SD_ErrorTypedef HAL_SD_SendSDStatus(SD_HandleTypeDef *hsd, uint32_t *pSDstatus);
vladvana 0:23d1f73bf130 683 HAL_SD_ErrorTypedef HAL_SD_GetCardStatus(SD_HandleTypeDef *hsd, HAL_SD_CardStatusTypedef *pCardStatus);
vladvana 0:23d1f73bf130 684 HAL_SD_TransferStateTypedef HAL_SD_GetStatus(SD_HandleTypeDef *hsd);
vladvana 0:23d1f73bf130 685 /**
vladvana 0:23d1f73bf130 686 * @}
vladvana 0:23d1f73bf130 687 */
vladvana 0:23d1f73bf130 688
vladvana 0:23d1f73bf130 689 /**
vladvana 0:23d1f73bf130 690 * @}
vladvana 0:23d1f73bf130 691 */
vladvana 0:23d1f73bf130 692
vladvana 0:23d1f73bf130 693 /**
vladvana 0:23d1f73bf130 694 * @}
vladvana 0:23d1f73bf130 695 */
vladvana 0:23d1f73bf130 696
vladvana 0:23d1f73bf130 697 /**
vladvana 0:23d1f73bf130 698 * @}
vladvana 0:23d1f73bf130 699 */
vladvana 0:23d1f73bf130 700
vladvana 0:23d1f73bf130 701 #ifdef __cplusplus
vladvana 0:23d1f73bf130 702 }
vladvana 0:23d1f73bf130 703 #endif
vladvana 0:23d1f73bf130 704
vladvana 0:23d1f73bf130 705 #endif /* STM32F103xE || STM32F103xG */
vladvana 0:23d1f73bf130 706
vladvana 0:23d1f73bf130 707 #endif /* __STM32F1xx_HAL_SD_H */
vladvana 0:23d1f73bf130 708
vladvana 0:23d1f73bf130 709 /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/