* @param NumOfBlocks: Number of SD blocks to read
* @retval SD status
*/
+/*
uint8_t BSP_SD_ReadBlocks(uint8_t *pData, uint64_t BlockAddr, uint32_t NumOfBlocks)
{
if(HAL_SD_ReadBlocks_DMA(&hsd, pData, BlockAddr, NumOfBlocks) != HAL_OK)
return MSD_ERROR;
}
return MSD_OK;
-}
+}*/
/**
* @brief Writes block(s) to a specified address in an SD card, in polling mode.
* @param NumOfBlocks: Number of SD blocks to write
* @retval SD status
*/
-uint8_t BSP_SD_WriteBlocks(uint8_t *pData, uint64_t BlockAddr, uint32_t NumOfBlocks)
+/*uint8_t BSP_SD_WriteBlocks(uint8_t *pData, uint64_t BlockAddr, uint32_t NumOfBlocks)
{
if(HAL_SD_WriteBlocks_DMA(&hsd, pData, BlockAddr, NumOfBlocks) != HAL_OK)
{
return MSD_ERROR;
}
return MSD_OK;
-}
+}*/
/**
* @brief Reads block(s) from a specified address in an SD card, in DMA mode.
SD_state = MSD_OK;
}
- while (HAL_SD_GetCardState(&hsd) == HAL_SD_CARD_PROGRAMMING) {}
+ HAL_SD_CardStateTypeDef cardState = HAL_SD_GetCardState(&hsd);
+ while (cardState == HAL_SD_CARD_PROGRAMMING || cardState == HAL_SD_CARD_RECEIVING)
+ {
+ // Wait while the SD card is writing buffer to flash
+ // The card may remain in the RECEIVING state (even though it's programming) if
+ // it has buffer space to receive more data available.
+
+ cardState = HAL_SD_GetCardState(&hsd);
+ }
+
}
return SD_state;
uint8_t BSP_SD_ITConfig(void);
void BSP_SD_DetectIT(void);
__weak void BSP_SD_DetectCallback(void);
-uint8_t BSP_SD_ReadBlocks(uint8_t *pData, uint64_t BlockAddr, uint32_t NumOfBlocks);
-uint8_t BSP_SD_WriteBlocks(uint8_t *pData, uint64_t BlockAddr, uint32_t NumOfBlocks);
+//uint8_t BSP_SD_ReadBlocks(uint8_t *pData, uint64_t BlockAddr, uint32_t NumOfBlocks);
+//uint8_t BSP_SD_WriteBlocks(uint8_t *pData, uint64_t BlockAddr, uint32_t NumOfBlocks);
uint8_t BSP_SD_ReadBlocks_DMA(uint8_t *pData, uint64_t BlockAddr, uint32_t NumOfBlocks);
uint8_t BSP_SD_WriteBlocks_DMA(uint8_t *pData, uint64_t BlockAddr, uint32_t NumOfBlocks);
//uint8_t BSP_SD_Erase(uint64_t StartAddr, uint64_t EndAddr);
// Wait while keeping BSY.\r
}\r
\r
+ HAL_SD_CardStateTypeDef cardState = HAL_SD_GetCardState(&hsd);\r
+ while ((cardState == HAL_SD_CARD_PROGRAMMING || cardState == HAL_SD_CARD_RECEIVING) &&\r
+ s2s_elapsedTime_ms(dmaFinishTime) < 180)\r
+ {\r
+ // Wait while the SD card is writing buffer to flash\r
+ // The card may remain in the RECEIVING state (even though it's programming) if\r
+ // it has buffer space to receive more data available.\r
+ cardState = HAL_SD_GetCardState(&hsd);\r
+ }\r
+\r
if (i + sectors >= totalSDSectors &&\r
!underrun &&\r
(!parityError || !enableParity))\r
{\r
// Wait while keeping BSY.\r
}\r
- while (HAL_SD_GetCardState(&hsd) == HAL_SD_CARD_PROGRAMMING) \r
+\r
+ cardState = HAL_SD_GetCardState(&hsd);\r
+ while (cardState == HAL_SD_CARD_PROGRAMMING || cardState == HAL_SD_CARD_RECEIVING) \r
{\r
// Wait while the SD card is writing buffer to flash\r
+ // The card may remain in the RECEIVING state (even though it's programming) if\r
+ // it has buffer space to receive more data available.\r
+ cardState = HAL_SD_GetCardState(&hsd);\r
}\r
\r
if (underrun && (!parityError || !enableParity))\r