草原狼_Sysyx 发表于 2019-5-24 08:53:34

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

大家好,最近在调试SDIO驱动TF卡,并使用FATFS文件系统,运行在UCOSIII环境下,实现功能是实时采集(定时器中断采样)心电信号然后存储在TF卡中,存储数据单独一个任务,但采集到的心电信号有掉数据的情况,如下图:
使用的心电信号发生器,每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);得到如下示波器波形:
file:///C:/Users/ADMINI~1/AppData/Local/Temp/msohtmlclip1/01/clip_image003.gif可以发现等待时长有时过长,直接影响了下一次存储。 不仅如此,采集到的心电信号还有这样的情况:
对应示波器波形如下:
在网上查了一下,说是SDIO DMA似乎就有这种情况,bug挺多,不只是否属实,所以请教一下大家这个问题如何解决了?我试着换成POLLING方式,结果各种错误,功能都实现不了。或者是否有其他方式避开这个问题?


eric2013 发表于 2019-5-24 09:36:37

fatfs+sd的方案不能做实时存储,一个文件存储到一定次数后,就不要再存储了,换一个文件,要不会导致越来越来卡,每次写数据速度越来越长。
考虑采用f_write+f_sync的方式,即文件打开后,不要关闭。

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

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


草原狼_Sysyx 发表于 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接口会不会好些了?我在想干脆重新做板子算了。

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

eric2013 发表于 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字节即可。相对已经稳定很多,可以多找几个卡测评下。

yongxiangu 发表于 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

yongxiangu 发表于 2019-6-3 13:07:41

我现在做数据采集,也是这个问题,数据时不时错乱一下,毫无头绪

eric2013 发表于 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
(出处: 安富莱电子论坛)


yongxiangu 发表于 2019-6-3 14:27:50

eric2013 发表于 2019-6-3 13:29
这个帖子里面有写
带FatFS的SD卡写数据出错情况测试记录,及其解决办法
http://www.armbbs.cn/forum ...

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

eric2013 发表于 2019-6-4 09:39:29

yongxiangu 发表于 2019-6-3 14:27
谢谢eric,这个帖子只有测试结果,没有代码
在这里:

在水一方 发表于 2019-6-13 23:35:19

有没有做字节对齐?

ruboss 发表于 2020-6-12 23:32:21

eric2013 发表于 2019-5-25 00:51
1、单文件写入数据越来越慢是fat类文件系统的通病,你可以测试1万次f_write+f_sync执行时间看看。

2、 ...

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

eric2013 发表于 2020-6-15 10:28:01

ruboss 发表于 2020-6-12 23:32
RL-FlashFS也是单文件写入越来越慢吗

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

最好分批写文件。
页: [1]
查看完整版本: SDIO DMA等待传输完成耗时不稳定