请选择 进入手机版 | 继续访问电脑版

硬汉嵌入式论坛

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

[FatFs] 带FatFS的SD卡写数据出错情况测试记录,及其解决办法

  [复制链接]

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
105942
QQ
发表于 2015-7-31 16:13:00 | 显示全部楼层 |阅读模式
测试条件
1.  硬件STM32-V5开发板,8GB SD卡
(1)DIO_CK = SDIOCLK / (SDIO_TRANSFER_CLK_DIV + 2) = 48MHz / (0 + 2) = 24MHz。
(2)相应引脚速度设置为GPIO_Speed_25MHz。
(3)SDIO采用4线DMA方式。
2.  软件驱动:
(1)fatfs 0.10b
(2)固件库1.3.0
(3)SD卡驱动是1.0.2
(4)测试方法采用V5软件fatfs例子:V5-107a_FatFS文件系统例程(SD卡) 里面的函数static void WriteFileTest(void);
====================================================================
1.  #define TEST_FILE_LEN       (2*1024*1024)    /* 用于测试的文件长度 */
    #define BUF_SIZE                (512)                   /* 每次读写SD卡的最大数据长度 */


每次写512字节,一次测试连续写入TEST_FILE_LEN / 512  = 4086次,共测试了20次,一次也没有出错



2.  #define TEST_FILE_LEN       (2*1024*1024)    /* 用于测试的文件长度 */
    #define BUF_SIZE                (1024)                /* 每次读写SD卡的最大数据长度 */


每次写1024字节,一次测试连续写入TEST_FILE_LEN / 512  = 2048次,共测试了20次,4次出错



3.  #define TEST_FILE_LEN       (2*1024*1024)    /* 用于测试的文件长度 */
    #define BUF_SIZE                (2048)                /* 每次读写SD卡的最大数据长度 */


每次写2048字节,一次测试连续写入TEST_FILE_LEN / 2048  = 1024次,共测试了20次,11次出错



4.  #define TEST_FILE_LEN        (2*1024*1024)    /* 用于测试的文件长度 */   
     #define BUF_SIZE                (4096)                 /* 每次读写SD卡的最大数据长度 */

每次写4096字节,一次测试连续写入TEST_FILE_LEN / 4096= 512次,共测试了20次,5次出错

=============================================================================
感觉官方提供的SD卡驱动SD_WriteMultiBlocks有问题,而SD_WriteBlock却比较稳定。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
105942
QQ
 楼主| 发表于 2015-7-31 16:58:07 | 显示全部楼层
测试条件
1.  硬件STM32-V5开发板,8GB SD卡
(1)DIO_CK = SDIOCLK / (SDIO_TRANSFER_CLK_DIV + 2) = 48MHz / (0 + 2) = 24MHz。
(2)相应引脚速度设置为GPIO_Speed_25MHz。
(3)SDIO采用1线DMA方式。跟上面的不同就是采用1线了。
2.  软件驱动:
(1)fatfs 0.10b
(2)固件库1.3.0
(3)SD卡驱动是1.0.2
(4)测试方法采用V5软件fatfs例子:V5-107a_FatFS文件系统例程(SD卡) 里面的函数static void WriteFileTest(void);
====================================================================




4.  #define TEST_FILE_LEN        (2*1024*1024)    /* 用于测试的文件长度 */   
     #define BUF_SIZE                (4096)                 /* 每次读写SD卡的最大数据长度 */

每次写4096字节,一次测试连续写入TEST_FILE_LEN / 4096= 512次,共测试了20次,没有出错。

=============================================================================
SD_WriteMultiBlocks 比较稳定了。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
105942
QQ
 楼主| 发表于 2015-7-31 18:03:59 | 显示全部楼层
测试条件
1.  硬件STM32-X3开发板,8GB SD卡
(1)DIO_CK = SDIOCLK / (SDIO_TRANSFER_CLK_DIV + 2) = 48MHz / (0 + 2) = 24MHz。
(2)相应引脚速度设置为GPIO_Speed_25MHz。
(3)SDIO采用4线DMA方式。
2.  软件驱动:
(1)fatfs 0.09b
(2)固件库1.0.2
(3)SD卡驱动是1.0.2
(4)测试方法采用V5软件fatfs例子:X3-005a_FatFS文件系统例程(SD卡)(V1.1)  里面的函数static void WriteFileTest(void);
====================================================================
1.  #define TEST_FILE_LEN        (2*1024*1024)    /* 用于测试的文件长度 */         
      #define BUF_SIZE                (4096)                 /* 每次读写SD卡的最大数据长度 */

每次写4096字节,一次测试连续写入TEST_FILE_LEN / 4096= 512次,共测试了20次,  多次出错。


====================================================================
当改为SDIO采用1线DMA方式时,没出错。


回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
105942
QQ
 楼主| 发表于 2015-7-31 19:27:57 | 显示全部楼层
测试条件
1.  硬件STM32-V5开发板,8GB SD卡
(1)DIO_CK = SDIOCLK / (SDIO_TRANSFER_CLK_DIV + 2) = 48MHz / (0 + 2) = 24MHz。
(2)相应引脚速度设置为GPIO_Speed_25MHz。
(3)SDIO采用4线DMA方式。
2.  软件驱动:
(1)fatfs 0.10b
(2)固件库1.3.0或者固件库1.5.0
(3)SD卡驱动是1.1.2

(4)测试方法采用V5软件fatfs例子:V5-107a_FatFS文件系统例程(SD卡) 里面的函数static void WriteFileTest(void);
===================================================================='
发现升级版的SD卡驱动1.1.2还不如早期的版本1.0.2,这个版本一旦写入数据失败后,再写入数据就一直是失败的状态,而早期的版
本反而失败后下次写入或者下下次写入就恢复了。


SDIO的四线DMA方式不稳定,multiblock写入还是容易出错。改成block写入或者1线DMA方式就很稳定了。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
105942
QQ
 楼主| 发表于 2015-7-31 19:49:38 | 显示全部楼层
总结:稳定的数据写入方法及其速度测试
1.  通过上面的测试可以得出
(1)采用4线DMA方式的话,建议调用f_write函数时,写入的数据不要超过512字节(SD卡扇区大小是512字节),这样比较稳定。
         如果超过512字节的话会调用multiblock传输,容易出错。

#define TEST_FILE_LEN        (2*1024*1024)    /* 用于测试的文件长度 */   
#define BUF_SIZE                 (512)                   /* 每次读写SD卡的最大数据长度 */

每次写4096字节,一次测试连续写入TEST_FILE_LEN / 512= 4096次,共测试了20次,没有出错。

3.png


#define TEST_FILE_LEN        (2*1024*1024)    /* 用于测试的文件长度 */   
#define BUF_SIZE                 (4096)                  /* 每次读写SD卡的最大数据长度 */

每次写4096字节,一次测试连续写入TEST_FILE_LEN / 4096= 512次,共测试了20次,开始出错了
主要是看下速度
4.png

(2)采用1线DAM方式的,比较稳定。速度测试如下:
#define TEST_FILE_LEN        (2*1024*1024)    /* 用于测试的文件长度 */   
#define BUF_SIZE                 (4096)                  /* 每次读写SD卡的最大数据长度 */

每次写4096字节,一次测试连续写入TEST_FILE_LEN / 4096= 512次,共测试了20次,没有出错。

1线DMA.png

#define TEST_FILE_LEN        (2*1024*1024)    /* 用于测试的文件长度 */   
#define BUF_SIZE                 (512)                   /* 每次读写SD卡的最大数据长度 */

每次写4096字节,一次测试连续写入TEST_FILE_LEN / 512= 4096次,共测试了20次,没有出错。

2.png
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
105942
QQ
 楼主| 发表于 2015-8-1 11:55:17 | 显示全部楼层
进一步分析锁定了出错的位置,在SD_WriteBlock或者SD_WriteMultiBlocks的这个地方:
1.png
==============================================================================================
使用新版的SD驱动在1线DMA方式时速度要比旧版的速度要快些。
下面是老版本:
1.png

下面的是新的1.1,2版本
2.png
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
105942
QQ
 楼主| 发表于 2015-8-5 17:47:20 | 显示全部楼层
对已STM32F10X的官方库,写数据的时候最好不要超过扇区大小512字节,不要很容易出错。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
105942
QQ
 楼主| 发表于 2016-2-28 00:02:07 | 显示全部楼层
测试F429,使用UCOS-III+STemWin+FatFS0.11A版本时,DMA单线模式也不太还用,偶然有出错,512字节比较好用些。
裸机下两种都好用,但是4线DMA外加超过512字节,还是会出错。
回复

使用道具 举报

6

主题

65

回帖

83

积分

初级会员

积分
83
发表于 2016-3-21 16:36:35 | 显示全部楼层
Eric,这个bug是不是无解了?看来SDIO驱动不是很稳定,难道要改用SPI接口来做SD卡驱动?[s:139]
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
105942
QQ
 楼主| 发表于 2016-3-21 16:54:48 | 显示全部楼层

回 drjloveyou 的帖子

drjloveyou:Eric,这个bug是不是无解了?看来SDIO驱动不是很稳定,难道要改用SPI接口来做SD卡驱动?[s:139]  (2016-03-21 16:36) 
小于等于512字节读写就行。
回复

使用道具 举报

1

主题

12

回帖

15

积分

新手上路

积分
15
发表于 2017-8-28 13:56:19 | 显示全部楼层
eric老大,最近使用fatfs,st的驱动,单线制,发现长时间写入,卡死了,能推荐个稍微好用的固件驱动程序吗?[s:142]
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
105942
QQ
 楼主| 发表于 2017-8-29 03:07:54 | 显示全部楼层

回 edaworld 的帖子

edaworld:eric老大,最近使用fatfs,st的驱动,单线制,发现长时间写入,卡死了,能推荐个稍微好用的固件驱动程序吗?[s:142]  (2017-08-28 13:56) 
保证每次读写小于512字节,会好点。
回复

使用道具 举报

5

主题

578

回帖

593

积分

版主

Rank: 7Rank: 7Rank: 7

积分
593
发表于 2017-8-29 12:10:39 | 显示全部楼层
有没有测试过用rl_fs的固件
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
105942
QQ
 楼主| 发表于 2017-8-30 01:12:34 | 显示全部楼层

回 myxiaonia 的帖子

myxiaonia:有没有测试过用rl_fs的固件 (2017-08-29 12:10) 
RL-FlashFS没有这个帖子中的问题,比较好用,只要FatFS挂载成功的,RL-FlashFS一定够挂载成功,但是反过来就不一定了。
回复

使用道具 举报

5

主题

578

回帖

593

积分

版主

Rank: 7Rank: 7Rank: 7

积分
593
发表于 2017-8-30 07:55:04 | 显示全部楼层

回 eric2013 的帖子

eric2013:RL-FlashFS没有这个帖子中的问题,比较好用,只要FatFS挂载成功的,RL-FlashFS一定够挂载成功,但是反过来就不一定了。 (2017-08-30 01:12) 
不会是keil家的外设库做的比st自己家还要好,不过st库有时候只能当demo用呢
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
105942
QQ
 楼主| 发表于 2017-8-31 02:03:13 | 显示全部楼层

回 myxiaonia 的帖子

myxiaonia:不会是keil家的外设库做的比st自己家还要好,不过st库有时候只能当demo用呢 (2017-08-30 07:55) 
KEIL做的非常棒,特别是MDK5里面带的CMSIS-Driver,驱动做的比较ST的强很多。下载了STM32的软件包后,就看到KEIL做的了。
苦于现在一直没有精力去研究。
回复

使用道具 举报

6

主题

35

回帖

53

积分

初级会员

积分
53
发表于 2017-10-17 13:48:32 | 显示全部楼层
SD_WriteMultiBlocks()现在能不能一次性连续写入4096个字节以上
多个写入现在还有BUG?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
105942
QQ
 楼主| 发表于 2017-10-18 00:53:00 | 显示全部楼层

回 zz1179842922 的帖子

zz1179842922:SD_WriteMultiBlocks()现在能不能一次性连续写入4096个字节以上
多个写入现在还有BUG? (2017-10-17 13:48) 
我测试的是标准库的,官方近期没有再更新过了,问题依旧,还是写512字节靠谱。
回复

使用道具 举报

6

主题

35

回帖

53

积分

初级会员

积分
53
发表于 2017-10-18 08:08:00 | 显示全部楼层

回 eric2013 的帖子

eric2013:我测试的是标准库的,官方近期没有再更新过了,问题依旧,还是写512字节靠谱。 (2017-10-18 00:53) 
好的 谢谢
回复

使用道具 举报

1

主题

6

回帖

9

积分

新手上路

积分
9
发表于 2017-11-7 14:14:09 | 显示全部楼层

PC资源管理器中无法写入SD卡文件,求助大神

我用新的stm32f1xx_HAL库1.6版,驱动SD卡,SDIO--4线查询模式,并附加USB mass storage中间件驱动。
    SD卡驱动进行读写都OK,FATFS 单独读写文件也没有问题,接入USB后在PC资源管理器中能够正确读取U盘文件,但就是无法通过资源管理器改写文件,也无法copy文件到SD卡。在改写SD卡中文件时候,当时能够看到改写成功,但下次接入USB后发现SD卡中文件改写失败,类似的PC管理器拷贝的文件也没有写入SD卡。不知什么原因,希望得到各位大神们指教!
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
105942
QQ
 楼主| 发表于 2017-11-8 01:39:43 | 显示全部楼层

回 librazorro 的帖子

librazorro:    我用新的stm32f1xx_HAL库1.6版,驱动SD卡,SDIO--4线查询模式,并附加USB mass storage中间件驱动。
    SD卡驱动进行读写都OK,FATFS 单独读写文件也没有问题,接入USB后在PC资源管理器中能够正确读取U盘文件,但就是无法通过资源管 .. (2017-11-07 14:14) 
极有可能是你的USB接口函数有问题,即USB读写SD卡的那部分函数。
回复

使用道具 举报

0

主题

3

回帖

3

积分

新手上路

积分
3
发表于 2019-11-7 11:59:24 | 显示全部楼层
这个SD卡写入不超过512个字节包括空格吗?比如50 50 60 60 70 70 3f 3f 3f 3f 90 90 a0 a0 b0 b0 c0 c0 d0 d0 e0 e0 f0 f0 10 10 20 20 30 30 40 40 50 50 60 60 70 70 3f 3f 3f 3f 90 90 a0 a0 b0 b0 c0 c0 d0 d0 e0 e0 f0 f0 10 10 20 20 30 30 40 40 50 50 60 60 70 70 3f 3f 3f 3f 90 90 a0 a0 b0 b0 c0 c0 d0 d0 e0 e0 f0 f0 10 10 20 20 30 30 40 40 50 50 60 60 70 70 3f 3f 3f 3f 90 90 a0 a0 b0 b0 c0 c0 d0 d0 e0 e0 f0 f0 10 10 20 20 30 30 40 40 50 50 60 60 70 70 3f 3f 3f 3f 90 90 a0 a0 b0 b0 c0 c0 d0 d0 e0 e0 f0 f0 10 10 20 20 30 30 40 40 50 50 60 60 70 70 3f 3f 3f 3f 90 90 a0 a0 b0 b0 c0 c0 d0 d0 e0 e0 f0 f0 10 10 20 20 30 30 40 40 50 50 60 60 70 70 3f 3f
捕获.PNG
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
105942
QQ
 楼主| 发表于 2019-11-7 12:06:05 | 显示全部楼层
随风落 发表于 2019-11-7 11:59
这个SD卡写入不超过512个字节包括空格吗?比如50 50 60 60 70 70 3f 3f 3f 3f 90 90 a0 a0 b0 b0 c0 c0 d0  ...

包括,另外注意此贴:

F4系列标准库库SDIO的FatFS例子修改一个bug,可提升4线SDIO的DMA稳定性
http://www.armbbs.cn/forum.php?m ... 4492&fromuid=58
(出处: 硬汉嵌入式论坛)
回复

使用道具 举报

0

主题

3

回帖

3

积分

新手上路

积分
3
发表于 2019-11-7 13:02:10 | 显示全部楼层
SD卡写入不超过512个字节是单只数据内容还是加上空格,比如这是200个数据和200个空格50 50 60 60 70 70 3f 3f 3f 3f 90 90 a0 a0 b0 b0 c0 c0 d0 d0 e0 e0 f0 f0 10 10 20 20 30 30 40 40 50 50 60 60 70 70 3f 3f 3f 3f 90 90 a0 a0 b0 b0 c0 c0 d0 d0 e0 e0 f0 f0 10 10 20 20 30 30 40 40 50 50 60 60 70 70 3f 3f 3f 3f 90 90 a0 a0 b0 b0 c0 c0 d0 d0 e0 e0 f0 f0 10 10 20 20 30 30 40 40 50 50 60 60 70 70 3f 3f 3f 3f 90 90 a0 a0 b0 b0 c0 c0 d0 d0 e0 e0 f0 f0 10 10 20 20 30 30 40 40 50 50 60 60 70 70 3f 3f 3f 3f 90 90 a0 a0 b0 b0 c0 c0 d0 d0 e0 e0 f0 f0 10 10 20 20 30 30 40 40 50 50 60 60 70 70 3f 3f 3f 3f 90 90 a0 a0 b0 b0 c0 c0 d0 d0 e0 e0 f0 f0 10 10 20 20 30 30 40 40 50 50 60 60 70 70 3f 3f
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
105942
QQ
 楼主| 发表于 2019-11-7 14:10:15 | 显示全部楼层
随风落 发表于 2019-11-7 13:02
SD卡写入不超过512个字节是单只数据内容还是加上空格,比如这是200个数据和200个空格50 50 60 60 70 70 3f  ...

算空格,这些都是数据。
回复

使用道具 举报

0

主题

3

回帖

3

积分

新手上路

积分
3
发表于 2019-11-7 14:36:04 | 显示全部楼层
eric2013 发表于 2019-11-7 14:10
算空格,这些都是数据。

非常感谢,回复的太及时了,太感谢了
回复

使用道具 举报

3

主题

12

回帖

21

积分

新手上路

积分
21
发表于 2020-3-11 14:19:50 | 显示全部楼层
H7 DMA 文件系统写入单次最好多大的?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
105942
QQ
 楼主| 发表于 2020-3-11 15:45:34 | 显示全部楼层
pursue 发表于 2020-3-11 14:19
H7 DMA 文件系统写入单次最好多大的?

如果有4字节对齐问题的话,小于等于512字节最好使,有效避免对齐问题。
回复

使用道具 举报

3

主题

12

回帖

21

积分

新手上路

积分
21
发表于 2020-3-11 16:22:35 | 显示全部楼层
一直有个疑问,H7 SD卡底层DMA驱动,每次写完之后要等待DMA传输完成的标志,这样等待是不是就失去了DMA的意义了。我尝试改成下次写判断上次有没有完成,如果完成了再写,但是不行,无法写入。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
105942
QQ
 楼主| 发表于 2020-3-11 17:18:12 | 显示全部楼层
pursue 发表于 2020-3-11 16:22
一直有个疑问,H7 SD卡底层DMA驱动,每次写完之后要等待DMA传输完成的标志,这样等待是不是就失去了DMA的意 ...

这个分情况,像ADC,DAC这种使用DMA,可以有效发挥,而SD卡如果我们不使用FatFS也可以发挥优势,使用了FatFS就比较麻烦,不能有效利用DMA的非阻塞方式。
对于这种情况,使用RTOS时,单独放到一个任务里面,优势就明显了,等待期间可以去执行其它任务。
回复

使用道具 举报

0

主题

1

回帖

1

积分

新手上路

积分
1
发表于 2020-5-6 22:17:42 | 显示全部楼层
请问这个需要考虑字节对齐的问题吗?谢谢
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
105942
QQ
 楼主| 发表于 2020-5-7 10:22:58 | 显示全部楼层
CWQ111111 发表于 2020-5-6 22:17
请问这个需要考虑字节对齐的问题吗?谢谢

F4系列标准库库SDIO的FatFS例子修改一个bug,可提升4线SDIO的DMA稳定性
http://www.armbbs.cn/forum.php?m ... 4492&fromuid=58
(出处: 硬汉嵌入式论坛)
回复

使用道具 举报

0

主题

1

回帖

1

积分

新手上路

积分
1
发表于 2022-9-3 18:05:22 | 显示全部楼层
老板这个程序在哪里哈?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
105942
QQ
 楼主| 发表于 2022-9-4 02:20:45 | 显示全部楼层
ppetrel 发表于 2022-9-3 18:05
老板这个程序在哪里哈?

继续提升STM32F4的4线SDIO DMA方式的读写稳定性,发布新版案例(2020-06-30)
https://www.armbbs.cn/forum.php? ... 8560&fromuid=58
(出处: 硬汉嵌入式论坛)
回复

使用道具 举报

0

主题

4

回帖

4

积分

新手上路

积分
4
发表于 2023-6-21 17:48:46 | 显示全部楼层
这边跟卡也有很大的关系,工业级卡闪迪 雷克沙有专门对小数据的优化写.
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
105942
QQ
 楼主| 发表于 2023-6-22 11:18:05 | 显示全部楼层
hthometown 发表于 2023-6-21 17:48
这边跟卡也有很大的关系,工业级卡闪迪 雷克沙有专门对小数据的优化写.

是的,这也是一个原因。

早期ST的SD卡驱动做的不太行,错误率太高,现在好很多了
回复

使用道具 举报

0

主题

3

回帖

3

积分

新手上路

积分
3
发表于 2023-8-8 11:21:18 | 显示全部楼层
您好,我使用sdio+fatfs系统,每5ms向sd卡里保存数据,数据小于512字节,发现使用f_write指令的时间长短不一,大多数时候能在5ms内保存下来,极少数会时间过长,导致丢帧,程序开始运行即打开文件,用按键触发关闭文件,向请教一下,您有遇到过以及如何解决嘛
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
105942
QQ
 楼主| 发表于 2023-8-8 11:45:14 | 显示全部楼层
fsdfd 发表于 2023-8-8 11:21
您好,我使用sdio+fatfs系统,每5ms向sd卡里保存数据,数据小于512字节,发现使用f_write指令的时间长短不 ...

现在是怎么个实现方法,是f_write+f_sync方式吗,不推荐频繁open和close,随着文件加大,这种方式时间非常长。

如果已经是f_write+f_sync了,可以考虑开个buffer,凑够2K或者4K了写一次,因为从底层的实现来讲,SDIO的多扇区操作,比单扇区要高效很多。
回复

使用道具 举报

0

主题

3

回帖

3

积分

新手上路

积分
3
发表于 2023-8-10 10:19:33 | 显示全部楼层
程序开头就打开f_open,之后循环里一直f_write,通过按键触发f_close,使用过f_write+f_sync方式,但是发现丢帧情况更为严重,怀疑这两个指令的执行时间有时会大于5ms
回复

使用道具 举报

0

主题

3

回帖

3

积分

新手上路

积分
3
发表于 2023-8-10 10:20:15 | 显示全部楼层
想请问下一次发这么多字节的数据,能在5ms内发送完嘛
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-29 14:52 , Processed in 0.309810 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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