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

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管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版