在stm32f407中SD卡的读写不正常,仿真分析了程序还是不太明白如何读取SDIO的FIFO。 通过仿真发现读取FIFO是通过stm32f4xx_ll_sdmmc.c中的SDIO_ReadFIFO()函数完成的。 /** * @brief Read data (word) from Rx FIFO in blocking mode (polling) * @param SDIOx Pointer to SDMMC register base * @retval HAL status */uint32_t SDIO_ReadFIFO(SDIO_TypeDef *SDIOx){ /* Read data from Rx FIFO */ return (SDIOx->FIFO);}我不明白这怎样的逻辑?SD卡的FIFO怎么知道程序已经读过了,并知道要移动FIFO?在HAL_SD_ReadBlocks()下没有设置这样的标志。
if(__HAL_SD_GET_FLAG(hsd, SDIO_FLAG_RXFIFOHF)){ /* 从SDIO Rx FIFO读取数据 */ for(count = 0U; count < 8U; count++) { *(tempbuff + count) = SDIO_ReadFIFO(hsd->Instance); } tempbuff += 8U;}
有没有懂行的高手能解释一下?查阅了数据手册、参考手册和代码文档,还是搞不太明白。
|