MCU型号:STM32F103VET6,使用SDIO 4bit模式操作SD卡,并配置了使用FATFS。
1秒写一次采集到传感器的数据到SD卡。
问题描述: SD卡读写操作时,经常出现卡死的情况。 通过J-Link调试,发现卡死时程序在HAL_SD_ReadBlocks()函数
while(!__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_RXOVERR | SDIO_FLAG_DCRCFAIL | SDIO_FLAG_DTIMEOUT | SDIO_FLAG_DATAEND | SDIO_FLAG_STBITERR))//卡在此句1 { if(__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_RXFIFOHF) && (dataremaining > 0U)) { /* Read data from SDIO Rx FIFO */ for(count = 0U; count < 8U; count++) { data = SDIO_ReadFIFO(hsd->Instance); *tempbuff = (uint8_t)(data & 0xFFU); tempbuff++; dataremaining--; *tempbuff = (uint8_t)((data >> 8U) & 0xFFU); tempbuff++; dataremaining--; *tempbuff = (uint8_t)((data >> 16U) & 0xFFU); tempbuff++; dataremaining--; *tempbuff = (uint8_t)((data >> 24U) & 0xFFU); tempbuff++; dataremaining--; } }
if(((HAL_GetTick()-tickstart) >= Timeout) || (Timeout == 0U))//卡在此句2 { /* Clear all the static flags */ __HAL_SD_CLEAR_FLAG(hsd, SDIO_STATIC_FLAGS); hsd->ErrorCode |= HAL_SD_ERROR_TIMEOUT; hsd->State= HAL_SD_STATE_READY; hsd->Context = SD_CONTEXT_NONE; return HAL_TIMEOUT; } } 请各位高手指点!!!!!!!!! |