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 | } |