stm32f746开发板,挂载SD卡,硬件通信正常,使用fatfs文件系统,驱动使用的是官方746demo程序中sd卡驱动。可以正常挂载、读写操作,但是挂载成功后做大量文件读写测试发现问题:时不时的会出现写数据错误失败,传送函数调用的是stm32官方hal库V1.7最新版,调试发现错误号为16,既传送FIFO数据下溢(TXUNDERR)。 请教下传送FIFO数据下溢出现的一般情况是什么?由啥导致?理论上官方封装的发送函数应该考虑数据写FIFO的情况(我也看了,一次最大32字节符合要求) ps:文件系统测试就是写8000次120字节内容,然后关闭文件后再打卡读取文件,将读取的数据进行对比是否正确。有少量次数完成了这整个过程,基本上是写了一部分后出现错误 |
这个情况比较复杂。
但硬件一样,st的例子程序可以,你的程序不行,我只能认为是你程序的问题。比如线程栈和/或堆是否够大?优先级是否满足?是否SDIO使用了DMA?中断的配置如何?等等比较复杂,不能这么笼统的对比。
SDIO硬件流控制
硬件流控制功能用于避免 FIFO 下溢(发送模式)和上溢(接收模式)错误。
该功能可停止 SDIO_CK 并冻结 SDIO 状态机。数据传输将停止,而 FIFO 无法发送或接收 数据。只有由 SDIOCLK 提供时钟的状态机才会冻结,APB2 接口仍保持活动状态。因此, 即使激活流控制,仍可填充或清空 FIFO。
要使能硬件流控制,SDIO_CLKCR[14] 寄存器位必须置 1。复位后,流控制将禁止。
评分
查看全部评分
正常来说应该不需要使用硬件流控吧,虽然现在使用流控后问题可以解决!
然后就是有个问题:同样底层sd卡驱动(文件一个),在官方移植的那个fatfs文件系统中是没有使用流控的,可以正常读写,在我自己的rt-thread系统中配置fatfs,不使用流控一定会导致数据下溢,这是调用的问题?