你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

stm32f7 sd通信读写错误

[复制链接]
xiang90721 提问时间:2017-8-29 14:11 /
悬赏5ST金币已解决
stm32f746开发板,挂载SD卡,硬件通信正常,使用fatfs文件系统,驱动使用的是官方746demo程序中sd卡驱动。可以正常挂载、读写操作,但是挂载成功后做大量文件读写测试发现问题:时不时的会出现写数据错误失败,传送函数调用的是stm32官方hal库V1.7最新版,调试发现错误号为16,既传送FIFO数据下溢(TXUNDERR)。

请教下传送FIFO数据下溢出现的一般情况是什么?由啥导致?理论上官方封装的发送函数应该考虑数据写FIFO的情况(我也看了,一次最大32字节符合要求)

ps:文件系统测试就是写8000次120字节内容,然后关闭文件后再打卡读取文件,将读取的数据进行对比是否正确。有少量次数完成了这整个过程,基本上是写了一部分后出现错误

最佳答案

查看完整内容

这个情况比较复杂。 但硬件一样,st的例子程序可以,你的程序不行,我只能认为是你程序的问题。比如线程栈和/或堆是否够大?优先级是否满足?是否SDIO使用了DMA?中断的配置如何?等等比较复杂,不能这么笼统的对比。
收藏 评论3 发布时间:2017-8-29 14:11

举报

3个回答
moyanming2013 回答时间:2017-8-29 14:11:44
xiang90721 发表于 2017-9-13 16:39
正常来说应该不需要使用硬件流控吧,虽然现在使用流控后问题可以解决!
然后就是有个问题:同样底层sd卡 ...

这个情况比较复杂。
但硬件一样,st的例子程序可以,你的程序不行,我只能认为是你程序的问题。比如线程栈和/或堆是否够大?优先级是否满足?是否SDIO使用了DMA?中断的配置如何?等等比较复杂,不能这么笼统的对比。
moyanming2013 回答时间:2017-8-29 14:50:17
看下具体你芯片的参考手册,
SDIO硬件流控制
硬件流控制功能用于避免 FIFO 下溢(发送模式)和上溢(接收模式)错误。
该功能可停止 SDIO_CK 并冻结 SDIO 状态机。数据传输将停止,而 FIFO 无法发送或接收 数据。只有由 SDIOCLK 提供时钟的状态机才会冻结,APB2 接口仍保持活动状态。因此, 即使激活流控制,仍可填充或清空 FIFO。
要使能硬件流控制,SDIO_CLKCR[14] 寄存器位必须置 1。复位后,流控制将禁止。


QQ截图20170829144846.jpg

评分

参与人数 1ST金币 +3 收起 理由
zero99 + 3

查看全部评分

xiang90721 回答时间:2017-9-13 16:39:52
moyanming2013 发表于 2017-8-29 14:50
看下具体你芯片的参考手册,
SDIO硬件流控制
硬件流控制功能用于避免 FIFO 下溢(发送模式)和上溢(接收模 ...

正常来说应该不需要使用硬件流控吧,虽然现在使用流控后问题可以解决!
然后就是有个问题:同样底层sd卡驱动(文件一个),在官方移植的那个fatfs文件系统中是没有使用流控的,可以正常读写,在我自己的rt-thread系统中配置fatfs,不使用流控一定会导致数据下溢,这是调用的问题?

所属标签

相似问题

关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版