Rev 56 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 56 | Rev 61 | ||
|---|---|---|---|
| Line 423... | Line 423... | ||
| 423 | 423 | ||
| 424 | /* Disable SDIO Clock */ |
424 | /* Disable SDIO Clock */ |
| 425 | __HAL_SD_DISABLE(hsd); |
425 | __HAL_SD_DISABLE(hsd); |
| 426 | 426 | ||
| 427 | /* Set Power State to ON */ |
427 | /* Set Power State to ON */ |
| 428 | status = SDIO_PowerState_ON(hsd->Instance); |
428 | (void)SDIO_PowerState_ON(hsd->Instance); |
| 429 | if(status != HAL_OK) |
- | |
| 430 | { |
- | |
| 431 | return HAL_ERROR; |
- | |
| 432 | } |
- | |
| 433 | 429 | ||
| 434 | /* Enable SDIO Clock */ |
430 | /* Enable SDIO Clock */ |
| 435 | __HAL_SD_ENABLE(hsd); |
431 | __HAL_SD_ENABLE(hsd); |
| 436 | 432 | ||
| 437 | /* Identify card operating voltage */ |
433 | /* Identify card operating voltage */ |
| Line 450... | Line 446... | ||
| 450 | hsd->State = HAL_SD_STATE_READY; |
446 | hsd->State = HAL_SD_STATE_READY; |
| 451 | hsd->ErrorCode |= errorstate; |
447 | hsd->ErrorCode |= errorstate; |
| 452 | return HAL_ERROR; |
448 | return HAL_ERROR; |
| 453 | } |
449 | } |
| 454 | 450 | ||
| - | 451 | /* Set Block Size for Card */ |
|
| - | 452 | errorstate = SDMMC_CmdBlockLength(hsd->Instance, BLOCKSIZE); |
|
| - | 453 | if(errorstate != HAL_SD_ERROR_NONE) |
|
| - | 454 | { |
|
| - | 455 | /* Clear all the static flags */ |
|
| - | 456 | __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_FLAGS); |
|
| - | 457 | hsd->ErrorCode |= errorstate; |
|
| - | 458 | hsd->State = HAL_SD_STATE_READY; |
|
| - | 459 | return HAL_ERROR; |
|
| - | 460 | } |
|
| - | 461 | ||
| 455 | return HAL_OK; |
462 | return HAL_OK; |
| 456 | } |
463 | } |
| 457 | 464 | ||
| 458 | /** |
465 | /** |
| 459 | * @brief De-Initializes the SD card. |
466 | * @brief De-Initializes the SD card. |
| Line 590... | Line 597... | ||
| 590 | if(hsd->SdCard.CardType != CARD_SDHC_SDXC) |
597 | if(hsd->SdCard.CardType != CARD_SDHC_SDXC) |
| 591 | { |
598 | { |
| 592 | add *= 512U; |
599 | add *= 512U; |
| 593 | } |
600 | } |
| 594 | 601 | ||
| 595 | /* Set Block Size for Card */ |
- | |
| 596 | errorstate = SDMMC_CmdBlockLength(hsd->Instance, BLOCKSIZE); |
- | |
| 597 | if(errorstate != HAL_SD_ERROR_NONE) |
- | |
| 598 | { |
- | |
| 599 | /* Clear all the static flags */ |
- | |
| 600 | __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_FLAGS); |
- | |
| 601 | hsd->ErrorCode |= errorstate; |
- | |
| 602 | hsd->State = HAL_SD_STATE_READY; |
- | |
| 603 | return HAL_ERROR; |
- | |
| 604 | } |
- | |
| 605 | - | ||
| 606 | /* Configure the SD DPSM (Data Path State Machine) */ |
602 | /* Configure the SD DPSM (Data Path State Machine) */ |
| 607 | config.DataTimeOut = SDMMC_DATATIMEOUT; |
603 | config.DataTimeOut = SDMMC_DATATIMEOUT; |
| 608 | config.DataLength = NumberOfBlocks * BLOCKSIZE; |
604 | config.DataLength = NumberOfBlocks * BLOCKSIZE; |
| 609 | config.DataBlockSize = SDIO_DATABLOCK_SIZE_512B; |
605 | config.DataBlockSize = SDIO_DATABLOCK_SIZE_512B; |
| 610 | config.TransferDir = SDIO_TRANSFER_DIR_TO_SDIO; |
606 | config.TransferDir = SDIO_TRANSFER_DIR_TO_SDIO; |
| Line 816... | Line 812... | ||
| 816 | if(hsd->SdCard.CardType != CARD_SDHC_SDXC) |
812 | if(hsd->SdCard.CardType != CARD_SDHC_SDXC) |
| 817 | { |
813 | { |
| 818 | add *= 512U; |
814 | add *= 512U; |
| 819 | } |
815 | } |
| 820 | 816 | ||
| 821 | /* Set Block Size for Card */ |
- | |
| 822 | errorstate = SDMMC_CmdBlockLength(hsd->Instance, BLOCKSIZE); |
- | |
| 823 | if(errorstate != HAL_SD_ERROR_NONE) |
- | |
| 824 | { |
- | |
| 825 | /* Clear all the static flags */ |
- | |
| 826 | __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_FLAGS); |
- | |
| 827 | hsd->ErrorCode |= errorstate; |
- | |
| 828 | hsd->State = HAL_SD_STATE_READY; |
- | |
| 829 | return HAL_ERROR; |
- | |
| 830 | } |
- | |
| 831 | - | ||
| 832 | /* Configure the SD DPSM (Data Path State Machine) */ |
817 | /* Configure the SD DPSM (Data Path State Machine) */ |
| 833 | config.DataTimeOut = SDMMC_DATATIMEOUT; |
818 | config.DataTimeOut = SDMMC_DATATIMEOUT; |
| 834 | config.DataLength = NumberOfBlocks * BLOCKSIZE; |
819 | config.DataLength = NumberOfBlocks * BLOCKSIZE; |
| 835 | config.DataBlockSize = SDIO_DATABLOCK_SIZE_512B; |
820 | config.DataBlockSize = SDIO_DATABLOCK_SIZE_512B; |
| 836 | config.TransferDir = SDIO_TRANSFER_DIR_TO_CARD; |
821 | config.TransferDir = SDIO_TRANSFER_DIR_TO_CARD; |
| Line 1013... | Line 998... | ||
| 1013 | if(hsd->SdCard.CardType != CARD_SDHC_SDXC) |
998 | if(hsd->SdCard.CardType != CARD_SDHC_SDXC) |
| 1014 | { |
999 | { |
| 1015 | add *= 512U; |
1000 | add *= 512U; |
| 1016 | } |
1001 | } |
| 1017 | 1002 | ||
| 1018 | /* Set Block Size for Card */ |
- | |
| 1019 | errorstate = SDMMC_CmdBlockLength(hsd->Instance, BLOCKSIZE); |
- | |
| 1020 | if(errorstate != HAL_SD_ERROR_NONE) |
- | |
| 1021 | { |
- | |
| 1022 | /* Clear all the static flags */ |
- | |
| 1023 | __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_FLAGS); |
- | |
| 1024 | hsd->ErrorCode |= errorstate; |
- | |
| 1025 | hsd->State = HAL_SD_STATE_READY; |
- | |
| 1026 | return HAL_ERROR; |
- | |
| 1027 | } |
- | |
| 1028 | - | ||
| 1029 | /* Configure the SD DPSM (Data Path State Machine) */ |
1003 | /* Configure the SD DPSM (Data Path State Machine) */ |
| 1030 | config.DataTimeOut = SDMMC_DATATIMEOUT; |
1004 | config.DataTimeOut = SDMMC_DATATIMEOUT; |
| 1031 | config.DataLength = BLOCKSIZE * NumberOfBlocks; |
1005 | config.DataLength = BLOCKSIZE * NumberOfBlocks; |
| 1032 | config.DataBlockSize = SDIO_DATABLOCK_SIZE_512B; |
1006 | config.DataBlockSize = SDIO_DATABLOCK_SIZE_512B; |
| 1033 | config.TransferDir = SDIO_TRANSFER_DIR_TO_SDIO; |
1007 | config.TransferDir = SDIO_TRANSFER_DIR_TO_SDIO; |
| Line 1121... | Line 1095... | ||
| 1121 | if(hsd->SdCard.CardType != CARD_SDHC_SDXC) |
1095 | if(hsd->SdCard.CardType != CARD_SDHC_SDXC) |
| 1122 | { |
1096 | { |
| 1123 | add *= 512U; |
1097 | add *= 512U; |
| 1124 | } |
1098 | } |
| 1125 | 1099 | ||
| 1126 | /* Set Block Size for Card */ |
- | |
| 1127 | errorstate = SDMMC_CmdBlockLength(hsd->Instance, BLOCKSIZE); |
- | |
| 1128 | if(errorstate != HAL_SD_ERROR_NONE) |
- | |
| 1129 | { |
- | |
| 1130 | /* Clear all the static flags */ |
- | |
| 1131 | __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_FLAGS); |
- | |
| 1132 | hsd->ErrorCode |= errorstate; |
- | |
| 1133 | hsd->State = HAL_SD_STATE_READY; |
- | |
| 1134 | return HAL_ERROR; |
- | |
| 1135 | } |
- | |
| 1136 | - | ||
| 1137 | /* Write Blocks in Polling mode */ |
1100 | /* Write Blocks in Polling mode */ |
| 1138 | if(NumberOfBlocks > 1U) |
1101 | if(NumberOfBlocks > 1U) |
| 1139 | { |
1102 | { |
| 1140 | hsd->Context = (SD_CONTEXT_WRITE_MULTIPLE_BLOCK| SD_CONTEXT_IT); |
1103 | hsd->Context = (SD_CONTEXT_WRITE_MULTIPLE_BLOCK| SD_CONTEXT_IT); |
| 1141 | 1104 | ||
| Line 1225... | Line 1188... | ||
| 1225 | hsd->hdmarx->XferErrorCallback = SD_DMAError; |
1188 | hsd->hdmarx->XferErrorCallback = SD_DMAError; |
| 1226 | 1189 | ||
| 1227 | /* Set the DMA Abort callback */ |
1190 | /* Set the DMA Abort callback */ |
| 1228 | hsd->hdmarx->XferAbortCallback = NULL; |
1191 | hsd->hdmarx->XferAbortCallback = NULL; |
| 1229 | 1192 | ||
| - | 1193 | /* Force DMA Direction */ |
|
| - | 1194 | hsd->hdmarx->Init.Direction = DMA_PERIPH_TO_MEMORY; |
|
| - | 1195 | MODIFY_REG(hsd->hdmarx->Instance->CCR, DMA_CCR_DIR, hsd->hdmarx->Init.Direction); |
|
| - | 1196 | ||
| 1230 | /* Enable the DMA Channel */ |
1197 | /* Enable the DMA Channel */ |
| 1231 | if(HAL_DMA_Start_IT(hsd->hdmarx, (uint32_t)&hsd->Instance->FIFO, (uint32_t)pData, (uint32_t)(BLOCKSIZE * NumberOfBlocks)/4U) != HAL_OK) |
1198 | if(HAL_DMA_Start_IT(hsd->hdmarx, (uint32_t)&hsd->Instance->FIFO, (uint32_t)pData, (uint32_t)(BLOCKSIZE * NumberOfBlocks)/4U) != HAL_OK) |
| 1232 | { |
1199 | { |
| 1233 | __HAL_SD_DISABLE_IT(hsd, (SDIO_IT_DCRCFAIL | SDIO_IT_DTIMEOUT | SDIO_IT_RXOVERR | SDIO_IT_DATAEND)); |
1200 | __HAL_SD_DISABLE_IT(hsd, (SDIO_IT_DCRCFAIL | SDIO_IT_DTIMEOUT | SDIO_IT_RXOVERR | SDIO_IT_DATAEND)); |
| 1234 | __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_FLAGS); |
1201 | __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_FLAGS); |
| Line 1244... | Line 1211... | ||
| 1244 | if(hsd->SdCard.CardType != CARD_SDHC_SDXC) |
1211 | if(hsd->SdCard.CardType != CARD_SDHC_SDXC) |
| 1245 | { |
1212 | { |
| 1246 | add *= 512U; |
1213 | add *= 512U; |
| 1247 | } |
1214 | } |
| 1248 | 1215 | ||
| 1249 | /* Set Block Size for Card */ |
- | |
| 1250 | errorstate = SDMMC_CmdBlockLength(hsd->Instance, BLOCKSIZE); |
- | |
| 1251 | if(errorstate != HAL_SD_ERROR_NONE) |
- | |
| 1252 | { |
- | |
| 1253 | /* Clear all the static flags */ |
- | |
| 1254 | __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_FLAGS); |
- | |
| 1255 | hsd->ErrorCode |= errorstate; |
- | |
| 1256 | hsd->State = HAL_SD_STATE_READY; |
- | |
| 1257 | return HAL_ERROR; |
- | |
| 1258 | } |
- | |
| 1259 | - | ||
| 1260 | /* Configure the SD DPSM (Data Path State Machine) */ |
1216 | /* Configure the SD DPSM (Data Path State Machine) */ |
| 1261 | config.DataTimeOut = SDMMC_DATATIMEOUT; |
1217 | config.DataTimeOut = SDMMC_DATATIMEOUT; |
| 1262 | config.DataLength = BLOCKSIZE * NumberOfBlocks; |
1218 | config.DataLength = BLOCKSIZE * NumberOfBlocks; |
| 1263 | config.DataBlockSize = SDIO_DATABLOCK_SIZE_512B; |
1219 | config.DataBlockSize = SDIO_DATABLOCK_SIZE_512B; |
| 1264 | config.TransferDir = SDIO_TRANSFER_DIR_TO_SDIO; |
1220 | config.TransferDir = SDIO_TRANSFER_DIR_TO_SDIO; |
| Line 1355... | Line 1311... | ||
| 1355 | if(hsd->SdCard.CardType != CARD_SDHC_SDXC) |
1311 | if(hsd->SdCard.CardType != CARD_SDHC_SDXC) |
| 1356 | { |
1312 | { |
| 1357 | add *= 512U; |
1313 | add *= 512U; |
| 1358 | } |
1314 | } |
| 1359 | 1315 | ||
| 1360 | /* Set Block Size for Card */ |
- | |
| 1361 | errorstate = SDMMC_CmdBlockLength(hsd->Instance, BLOCKSIZE); |
- | |
| 1362 | if(errorstate != HAL_SD_ERROR_NONE) |
- | |
| 1363 | { |
- | |
| 1364 | /* Clear all the static flags */ |
- | |
| 1365 | __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_FLAGS); |
- | |
| 1366 | hsd->ErrorCode |= errorstate; |
- | |
| 1367 | hsd->State = HAL_SD_STATE_READY; |
- | |
| 1368 | return HAL_ERROR; |
- | |
| 1369 | } |
- | |
| 1370 | - | ||
| 1371 | /* Write Blocks in Polling mode */ |
1316 | /* Write Blocks in Polling mode */ |
| 1372 | if(NumberOfBlocks > 1U) |
1317 | if(NumberOfBlocks > 1U) |
| 1373 | { |
1318 | { |
| 1374 | hsd->Context = (SD_CONTEXT_WRITE_MULTIPLE_BLOCK | SD_CONTEXT_DMA); |
1319 | hsd->Context = (SD_CONTEXT_WRITE_MULTIPLE_BLOCK | SD_CONTEXT_DMA); |
| 1375 | 1320 | ||
| Line 1394... | Line 1339... | ||
| 1394 | } |
1339 | } |
| 1395 | 1340 | ||
| 1396 | /* Enable SDIO DMA transfer */ |
1341 | /* Enable SDIO DMA transfer */ |
| 1397 | __HAL_SD_DMA_ENABLE(hsd); |
1342 | __HAL_SD_DMA_ENABLE(hsd); |
| 1398 | 1343 | ||
| - | 1344 | /* Force DMA Direction */ |
|
| - | 1345 | hsd->hdmatx->Init.Direction = DMA_MEMORY_TO_PERIPH; |
|
| - | 1346 | MODIFY_REG(hsd->hdmatx->Instance->CCR, DMA_CCR_DIR, hsd->hdmatx->Init.Direction); |
|
| - | 1347 | ||
| 1399 | /* Enable the DMA Channel */ |
1348 | /* Enable the DMA Channel */ |
| 1400 | if(HAL_DMA_Start_IT(hsd->hdmatx, (uint32_t)pData, (uint32_t)&hsd->Instance->FIFO, (uint32_t)(BLOCKSIZE * NumberOfBlocks)/4U) != HAL_OK) |
1349 | if(HAL_DMA_Start_IT(hsd->hdmatx, (uint32_t)pData, (uint32_t)&hsd->Instance->FIFO, (uint32_t)(BLOCKSIZE * NumberOfBlocks)/4U) != HAL_OK) |
| 1401 | { |
1350 | { |
| 1402 | __HAL_SD_DISABLE_IT(hsd, (SDIO_IT_DCRCFAIL | SDIO_IT_DTIMEOUT | SDIO_IT_TXUNDERR | SDIO_IT_STBITERR)); |
1351 | __HAL_SD_DISABLE_IT(hsd, (SDIO_IT_DCRCFAIL | SDIO_IT_DTIMEOUT | SDIO_IT_TXUNDERR | SDIO_IT_STBITERR)); |
| 1403 | __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_FLAGS); |
1352 | __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_FLAGS); |
| Line 2158... | Line 2107... | ||
| 2158 | */ |
2107 | */ |
| 2159 | HAL_StatusTypeDef HAL_SD_GetCardStatus(SD_HandleTypeDef *hsd, HAL_SD_CardStatusTypeDef *pStatus) |
2108 | HAL_StatusTypeDef HAL_SD_GetCardStatus(SD_HandleTypeDef *hsd, HAL_SD_CardStatusTypeDef *pStatus) |
| 2160 | { |
2109 | { |
| 2161 | uint32_t sd_status[16]; |
2110 | uint32_t sd_status[16]; |
| 2162 | uint32_t errorstate; |
2111 | uint32_t errorstate; |
| - | 2112 | HAL_StatusTypeDef status = HAL_OK; |
|
| 2163 | 2113 | ||
| 2164 | errorstate = SD_SendSDStatus(hsd, sd_status); |
2114 | errorstate = SD_SendSDStatus(hsd, sd_status); |
| 2165 | if(errorstate != HAL_SD_ERROR_NONE) |
2115 | if(errorstate != HAL_SD_ERROR_NONE) |
| 2166 | { |
2116 | { |
| 2167 | /* Clear all the static flags */ |
2117 | /* Clear all the static flags */ |
| 2168 | __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_FLAGS); |
2118 | __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_FLAGS); |
| 2169 | hsd->ErrorCode |= errorstate; |
2119 | hsd->ErrorCode |= errorstate; |
| 2170 | hsd->State = HAL_SD_STATE_READY; |
2120 | hsd->State = HAL_SD_STATE_READY; |
| 2171 | return HAL_ERROR; |
2121 | status = HAL_ERROR; |
| 2172 | } |
2122 | } |
| 2173 | else |
2123 | else |
| 2174 | { |
2124 | { |
| 2175 | pStatus->DataBusWidth = (uint8_t)((sd_status[0] & 0xC0U) >> 6U); |
2125 | pStatus->DataBusWidth = (uint8_t)((sd_status[0] & 0xC0U) >> 6U); |
| 2176 | 2126 | ||
| Line 2192... | Line 2142... | ||
| 2192 | pStatus->EraseTimeout = (uint8_t)((sd_status[3] & 0xFC00U) >> 10U); |
2142 | pStatus->EraseTimeout = (uint8_t)((sd_status[3] & 0xFC00U) >> 10U); |
| 2193 | 2143 | ||
| 2194 | pStatus->EraseOffset = (uint8_t)((sd_status[3] & 0x0300U) >> 8U); |
2144 | pStatus->EraseOffset = (uint8_t)((sd_status[3] & 0x0300U) >> 8U); |
| 2195 | } |
2145 | } |
| 2196 | 2146 | ||
| - | 2147 | /* Set Block Size for Card */ |
|
| - | 2148 | errorstate = SDMMC_CmdBlockLength(hsd->Instance, BLOCKSIZE); |
|
| - | 2149 | if(errorstate != HAL_SD_ERROR_NONE) |
|
| - | 2150 | { |
|
| - | 2151 | /* Clear all the static flags */ |
|
| - | 2152 | __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_FLAGS); |
|
| - | 2153 | hsd->ErrorCode = errorstate; |
|
| - | 2154 | hsd->State = HAL_SD_STATE_READY; |
|
| - | 2155 | status = HAL_ERROR; |
|
| - | 2156 | } |
|
| - | 2157 | ||
| 2197 | return HAL_OK; |
2158 | return status; |
| 2198 | } |
2159 | } |
| 2199 | 2160 | ||
| 2200 | /** |
2161 | /** |
| 2201 | * @brief Gets the SD card info. |
2162 | * @brief Gets the SD card info. |
| 2202 | * @param hsd: Pointer to SD handle |
2163 | * @param hsd: Pointer to SD handle |
| Line 2231... | Line 2192... | ||
| 2231 | */ |
2192 | */ |
| 2232 | HAL_StatusTypeDef HAL_SD_ConfigWideBusOperation(SD_HandleTypeDef *hsd, uint32_t WideMode) |
2193 | HAL_StatusTypeDef HAL_SD_ConfigWideBusOperation(SD_HandleTypeDef *hsd, uint32_t WideMode) |
| 2233 | { |
2194 | { |
| 2234 | SDIO_InitTypeDef Init; |
2195 | SDIO_InitTypeDef Init; |
| 2235 | uint32_t errorstate; |
2196 | uint32_t errorstate; |
| - | 2197 | HAL_StatusTypeDef status = HAL_OK; |
|
| 2236 | 2198 | ||
| 2237 | /* Check the parameters */ |
2199 | /* Check the parameters */ |
| 2238 | assert_param(IS_SDIO_BUS_WIDE(WideMode)); |
2200 | assert_param(IS_SDIO_BUS_WIDE(WideMode)); |
| 2239 | 2201 | ||
| 2240 | /* Change State */ |
2202 | /* Change State */ |
| Line 2273... | Line 2235... | ||
| 2273 | if(hsd->ErrorCode != HAL_SD_ERROR_NONE) |
2235 | if(hsd->ErrorCode != HAL_SD_ERROR_NONE) |
| 2274 | { |
2236 | { |
| 2275 | /* Clear all the static flags */ |
2237 | /* Clear all the static flags */ |
| 2276 | __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_FLAGS); |
2238 | __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_FLAGS); |
| 2277 | hsd->State = HAL_SD_STATE_READY; |
2239 | hsd->State = HAL_SD_STATE_READY; |
| 2278 | return HAL_ERROR; |
2240 | status = HAL_ERROR; |
| 2279 | } |
2241 | } |
| 2280 | else |
2242 | else |
| 2281 | { |
2243 | { |
| 2282 | /* Configure the SDIO peripheral */ |
2244 | /* Configure the SDIO peripheral */ |
| 2283 | Init.ClockEdge = hsd->Init.ClockEdge; |
2245 | Init.ClockEdge = hsd->Init.ClockEdge; |
| Line 2287... | Line 2249... | ||
| 2287 | Init.HardwareFlowControl = hsd->Init.HardwareFlowControl; |
2249 | Init.HardwareFlowControl = hsd->Init.HardwareFlowControl; |
| 2288 | Init.ClockDiv = hsd->Init.ClockDiv; |
2250 | Init.ClockDiv = hsd->Init.ClockDiv; |
| 2289 | (void)SDIO_Init(hsd->Instance, Init); |
2251 | (void)SDIO_Init(hsd->Instance, Init); |
| 2290 | } |
2252 | } |
| 2291 | 2253 | ||
| - | 2254 | /* Set Block Size for Card */ |
|
| - | 2255 | errorstate = SDMMC_CmdBlockLength(hsd->Instance, BLOCKSIZE); |
|
| - | 2256 | if(errorstate != HAL_SD_ERROR_NONE) |
|
| - | 2257 | { |
|
| - | 2258 | /* Clear all the static flags */ |
|
| - | 2259 | __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_FLAGS); |
|
| - | 2260 | hsd->ErrorCode |= errorstate; |
|
| - | 2261 | status = HAL_ERROR; |
|
| - | 2262 | } |
|
| - | 2263 | ||
| 2292 | /* Change State */ |
2264 | /* Change State */ |
| 2293 | hsd->State = HAL_SD_STATE_READY; |
2265 | hsd->State = HAL_SD_STATE_READY; |
| 2294 | 2266 | ||
| 2295 | return HAL_OK; |
2267 | return status; |
| 2296 | } |
2268 | } |
| 2297 | 2269 | ||
| 2298 | /** |
2270 | /** |
| 2299 | * @brief Gets the current sd card data state. |
2271 | * @brief Gets the current sd card data state. |
| 2300 | * @param hsd: pointer to SD handle |
2272 | * @param hsd: pointer to SD handle |
| Line 3107... | Line 3079... | ||
| 3107 | if(errorstate != HAL_SD_ERROR_NONE) |
3079 | if(errorstate != HAL_SD_ERROR_NONE) |
| 3108 | { |
3080 | { |
| 3109 | return errorstate; |
3081 | return errorstate; |
| 3110 | } |
3082 | } |
| 3111 | 3083 | ||
| 3112 | while(!__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_RXOVERR | SDIO_FLAG_DCRCFAIL | SDIO_FLAG_DTIMEOUT | SDIO_FLAG_DBCKEND)) |
3084 | while(!__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_RXOVERR | SDIO_FLAG_DCRCFAIL | SDIO_FLAG_DTIMEOUT)) |
| 3113 | { |
3085 | { |
| 3114 | if(__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_RXDAVL)) |
3086 | if(__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_RXDAVL)) |
| 3115 | { |
3087 | { |
| 3116 | *(tempscr + index) = SDIO_ReadFIFO(hsd->Instance); |
3088 | *(tempscr + index) = SDIO_ReadFIFO(hsd->Instance); |
| 3117 | index++; |
3089 | index++; |
| 3118 | } |
3090 | } |
| - | 3091 | else if(!__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_RXACT)) |
|
| - | 3092 | { |
|
| - | 3093 | break; |
|
| - | 3094 | } |
|
| 3119 | 3095 | ||
| 3120 | if((HAL_GetTick() - tickstart) >= SDMMC_DATATIMEOUT) |
3096 | if((HAL_GetTick() - tickstart) >= SDMMC_DATATIMEOUT) |
| 3121 | { |
3097 | { |
| 3122 | return HAL_SD_ERROR_TIMEOUT; |
3098 | return HAL_SD_ERROR_TIMEOUT; |
| 3123 | } |
3099 | } |