STM32
直播中

刘超

7年用户 1447经验值
私信 关注
[问答]

STM32H743间隔几秒读写TF卡,长时间运行后不定时卡死的原因?怎么处理?

STM32H743,采用轮询读写SD卡的方式,用的是freertos操作系统,长时间运行,间隔几秒读写一次TF卡会卡死在HAL_StatusTypeDef HAL_SD_WriteBlocks(SD_HandleTypeDef *hsd, uint8_t *pData, uint32_t BlockAdd, uint32_t NumberOfBlocks, uint32_t timeout)这个函数里的
while(!__HAL_SD_GET_FLAG(hsd, SDMMC_FLAG_TXUNDERR | SDMMC_FLAG_DCRCFAIL | SDMMC_FLAG_DTIMEOUT | SDMMC_FLAG_DATAEND))这个循环了。
有碰到的伙伴吗?

回帖(1)

可能的原因是读写TF卡的操作超时或引发了错误。导致卡死的原因可能有以下几点:

1. 长时间运行导致TF卡或SDMMC控制器出现异常。长时间读写TF卡可能会使卡片或控制器出现错误,导致卡死。

2. 轮询读写SD卡导致任务阻塞。如果读写操作超时或发生错误,轮询读写SD卡的任务可能会阻塞,导致卡死。

为了解决这个问题,可以尝试以下几个方案:

1. 确保TF卡和SDMMC控制器的连接稳定。检查TF卡插槽和连接线是否良好,如果可能的话,可以尝试更换TF卡。

2. 调整读写操作的超时参数。如果读写操作的超时参数设置得太短,可能会导致读写操作失败。可以尝试适当增加超时时间,以确保读写操作能够成功完成。

3. 使用DMA进行读写操作。使用DMA进行读写操作可以减少CPU的工作负载,降低出错的可能性。

4. 添加错误处理机制。在读写操作发生错误时,及时处理错误,例如重试操作、打印错误信息等。

5. 使用信号量或消息队列来同步读写操作。可以使用FreeRTOS的信号量或消息队列机制来同步读写操作,以避免任务阻塞。

总结起来,解决卡死问题需要综合考虑硬件连接、读写超时、任务阻塞等方面的因素,并逐个排查和优化相应的因素,以提高读写TF卡的可靠性和稳定性。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分