硬汉嵌入式论坛

 找回密码
 立即注册
查看: 4720|回复: 11
收起左侧

[FatFs] SDIO DMA等待传输完成耗时不稳定

[复制链接]

1

主题

1

回帖

4

积分

新手上路

积分
4
发表于 2019-5-24 08:53:34 | 显示全部楼层 |阅读模式
大家好,最近在调试SDIO驱动TF卡,并使用FATFS文件系统,运行在UCOSIII环境下,实现功能是实时采集(定时器中断采样)心电信号然后存储在TF卡中,存储数据单独一个任务,但采集到的心电信号有掉数据的情况,如下图:
1.png
使用的心电信号发生器,每8个点(512字节)存储一次,这里明显丢了一次的数据。
开始一直以为是f_write的问题,后来又检查了一下代码,用IO输出高低电平的方式跟踪到disk_write函数内的这句代码用时不稳定:
Status = SD_WaitWriteOperation(); //SDIO工作在DMA模式,需检查DMA操作是否完成   
进入到函数内部
GPIO_SetBits(GPIOB,GPIO_Pin_3);
while(((SDIO->STA & SDIO_FLAG_TXACT)) && (timeout >0))//SDIO->STA状态寄存器
  {
   timeout--;  
  }
GPIO_ResetBits(GPIOB,GPIO_Pin_3);
得到如下示波器波形:
2.png
file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image003.gif
可以发现等待时长有时过长,直接影响了下一次存储。
不仅如此,采集到的心电信号还有这样的情况:
3.png
对应示波器波形如下:
4.png
在网上查了一下,说是SDIO DMA似乎就有这种情况,bug挺多,不只是否属实,所以请教一下大家这个问题如何解决了?我试着换成POLLING
方式,结果各种错误,功能都实现不了。
或者是否有其他方式避开这个问题?



回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
QQ
发表于 2019-5-24 09:36:37 | 显示全部楼层
fatfs+sd的方案不能做实时存储,一个文件存储到一定次数后,就不要再存储了,换一个文件,要不会导致越来越来卡,每次写数据速度越来越长。
考虑采用f_write+f_sync的方式,即文件打开后,不要关闭。

还有就是稳定性问题,看下这个帖子,可以使用单线DMA方式,每次写入不要超过512,会稳定些

带FatFS的SD卡写数据出错情况测试记录,及其解决办法
http://www.armbbs.cn/forum.php?m ... 1880&fromuid=58
(出处: 安富莱电子论坛)


回复

使用道具 举报

1

主题

1

回帖

4

积分

新手上路

积分
4
 楼主| 发表于 2019-5-24 11:00:17 | 显示全部楼层
eric2013 发表于 2019-5-24 09:36
fatfs+sd的方案不能做实时存储,一个文件存储到一定次数后,就不要再存储了,换一个文件,要不会导致越来越 ...

谢谢硬汉哥指导,我是用的f_write+f_sync的方式,只是觉得这个问题跟fatfs应该没什么关系,DMA传输说是解放了CPU,但是等待DMA传输完成时间却不稳定,造成数据存储错误,看来SDIO的DMA方式确实有bug。

如果换成SPI接口会不会好些了?我在想干脆重新做板子算了。

另外实时存储用什么方案比较好了?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
QQ
发表于 2019-5-25 00:51:40 | 显示全部楼层
草原狼_Sysyx 发表于 2019-5-24 11:00
谢谢硬汉哥指导,我是用的f_write+f_sync的方式,只是觉得这个问题跟fatfs应该没什么关系,DMA传输说是解 ...

1、单文件写入数据越来越慢是fat类文件系统的通病,你可以测试1万次f_write+f_sync执行时间看看。

2、数据错误问题,换成我说的单线DMA和小于512字节即可。相对已经稳定很多,可以多找几个卡测评下。
回复

使用道具 举报

4

主题

12

回帖

24

积分

新手上路

积分
24
发表于 2019-6-3 13:06:04 | 显示全部楼层
eric2013 发表于 2019-5-25 00:51
1、单文件写入数据越来越慢是fat类文件系统的通病,你可以测试1万次f_write+f_sync执行时间看看。

2、 ...

请问单线DMA在哪里修改,我用的bsp_sdio_sd.c
回复

使用道具 举报

4

主题

12

回帖

24

积分

新手上路

积分
24
发表于 2019-6-3 13:07:41 | 显示全部楼层
我现在做数据采集,也是这个问题,数据时不时错乱一下,毫无头绪
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
QQ
发表于 2019-6-3 13:29:28 | 显示全部楼层
yongxiangu 发表于 2019-6-3 13:06
请问单线DMA在哪里修改,我用的bsp_sdio_sd.c

这个帖子里面有写
带FatFS的SD卡写数据出错情况测试记录,及其解决办法
http://www.armbbs.cn/forum.ph ... 1880&fromuid=58
(出处: 安富莱电子论坛)


回复

使用道具 举报

4

主题

12

回帖

24

积分

新手上路

积分
24
发表于 2019-6-3 14:27:50 | 显示全部楼层
eric2013 发表于 2019-6-3 13:29
这个帖子里面有写
带FatFS的SD卡写数据出错情况测试记录,及其解决办法
http://www.armbbs.cn/forum ...

谢谢eric,这个帖子只有测试结果,没有代码
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
QQ
发表于 2019-6-4 09:39:29 | 显示全部楼层
yongxiangu 发表于 2019-6-3 14:27
谢谢eric,这个帖子只有测试结果,没有代码

在这里:
QQ截图20190604093935.jpg
回复

使用道具 举报

32

主题

262

回帖

363

积分

高级会员

积分
363
发表于 2019-6-13 23:35:19 | 显示全部楼层
有没有做字节对齐?
回复

使用道具 举报

3

主题

58

回帖

67

积分

初级会员

积分
67
发表于 2020-6-12 23:32:21 | 显示全部楼层
eric2013 发表于 2019-5-25 00:51
1、单文件写入数据越来越慢是fat类文件系统的通病,你可以测试1万次f_write+f_sync执行时间看看。

2、 ...

RL-FlashFS也是单文件写入越来越慢吗
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106660
QQ
发表于 2020-6-15 10:28:01 | 显示全部楼层
ruboss 发表于 2020-6-12 23:32
RL-FlashFS也是单文件写入越来越慢吗

使用嵌入式文件系统方式,操作SPI Flash也有这个问题。

最好分批写文件。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-4-29 04:19 , Processed in 0.195429 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表