OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4086|回复: 6

如何提高FATFS的存储频率,有何限制?

[复制链接]

2

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
120
金钱
120
注册时间
2020-3-24
在线时间
54 小时
发表于 2023-3-24 16:56:18 | 显示全部楼层 |阅读模式
50金钱
stm32F103ZET6使用FATFS存储数据到SD卡的频率最高能多少?我每次存大概一百字节的ADC数据的话,大概只能50-60HZ。有什么方法提速吗?arduino存储都可以达到500HZ。以下是我调用存储的函数

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
120
金钱
120
注册时间
2020-3-24
在线时间
54 小时
 楼主| 发表于 2023-3-24 17:01:01 | 显示全部楼层
void write_txt(char file_name[],unsigned long int num,FIL fnew,float *volta)
{
        //дÈëtxt
          u8 i;
    uint32_t fil_size;  //ÎļþÖ¸Õë
          UINT fnum;        //Îļþ³É¹¦¶ÁдÊýÁ¿
          char name[23]="0:/";//¿ªÍ·
                char wrap[] = "\r\n"; //»»ÐÐ
          char space[] = " ";   //¼ä¸ô
          char  tab[]="\t";
          char WriteBuffer[9];        //Ò»¸öÊý¾ÝÕ¼9λ
          char ch_num[8];//×î´ó°ÙÍò¼Æ´Î
                strcat(name,file_name);
                            f_open(&fnew,name, FA_OPEN_ALWAYS|FA_WRITE);                //´ò¿ª/´´½¨Îļþ¶ÔÏó
                                         fil_size = f_size(&fnew);  //»ñµÃÎļþ´óС
                                        f_lseek(&fnew,fil_size);//Îļþ¶ÔÏóµÄ¶ÁдָÕëÒƶ¯µ½Îļþ½áÊø
                sprintf(ch_num,"%ld",num);  //ת»¯¸ñʽ
                            f_write(&fnew, ch_num , strlen(ch_num), &fnum);//¼ÆÊý
                f_write(&fnew, tab , sizeof(tab)-1, &fnum);   //ÖƱí·û
        for(i=0;i<12;i++)
        {
                  sprintf(WriteBuffer,"%f",*(volta+i));  //×&#170;&#187;&#175;&#184;&#241;&#202;&#189;&#163;&#172;&#184;&#161;&#181;&#227;&#202;&#253;&#181;&#189;×&#214;·&#251;&#180;&#174;
                        f_write(&fnew, WriteBuffer , sizeof(WriteBuffer)-1, &fnum);//&#208;&#180;&#200;&#235;&#202;&#253;&#190;&#221;&#163;&#172;×&#214;·&#251;&#180;&#174;&#210;&#212;/0&#189;á&#202;&#248;&#163;&#172;-1&#201;&#190;&#200;&#165;
                  f_write(&fnew, space , sizeof(space)-1, &fnum);   //&#208;&#180;&#200;&#235;&#191;&#213;&#184;&#241;
        }
                  f_write(&fnew, wrap , sizeof(wrap)-1, &fnum);//&#187;&#187;&#208;&#208;
            f_sync(&fnew);  //&#187;&#186;&#180;&#230;&#178;&#187;&#202;&#199;&#185;&#216;±&#213;&#163;&#172;&#181;&#244;&#181;&#231;±&#163;&#187;¤&#163;&#172;&#188;&#245;&#201;&#217;&#191;&#170;&#185;&#216;&#206;&#196;&#188;&#254;
}
回复

使用道具 举报

3

主题

821

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3329
金钱
3329
注册时间
2011-11-10
在线时间
207 小时
发表于 2023-3-25 11:45:07 | 显示全部楼层
两次写之间是有时间限制的。所以你不要频繁写入,应该把数据先保存在RAM里,数据达到一定量后再一次写入。
回复

使用道具 举报

2

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
120
金钱
120
注册时间
2020-3-24
在线时间
54 小时
 楼主| 发表于 2023-3-25 20:03:52 | 显示全部楼层
c2007s 发表于 2023-3-25 11:45
两次写之间是有时间限制的。所以你不要频繁写入,应该把数据先保存在RAM里,数据达到一定量后再一次写入。

但是为什么arduino可以一直写呢?我看他们直接采集存储都可以好几百HZ。要是我中途断了,好像就存不了了
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165352
金钱
165352
注册时间
2010-12-1
在线时间
2108 小时
发表于 2023-3-26 20:27:45 | 显示全部楼层
不要这么干, 存储的时候, 以512字节的倍数,比如1024,或者2048,或者4096 去存储,  不要100字节100字节的写.  比如以4096字节写一次,你搞个5个buffer,每个buffer4096字节, 先入先出, 这样实现循环写入, 速度才能上去. FATFS写时间是不固定的,有时候快,有时候慢
回复

使用道具 举报

2

主题

12

帖子

0

精华

初级会员

Rank: 2

积分
120
金钱
120
注册时间
2020-3-24
在线时间
54 小时
 楼主| 发表于 2023-4-2 15:32:28 | 显示全部楼层
正点原子 发表于 2023-3-26 20:27
不要这么干, 存储的时候, 以512字节的倍数,比如1024,或者2048,或者4096 去存储,  不要100字节100字节的写.  ...

主要我想在存的同时也通过串口发送数据,我试试看在定时器里能不能发送
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165352
金钱
165352
注册时间
2010-12-1
在线时间
2108 小时
发表于 2023-4-4 00:58:10 | 显示全部楼层
FZUxiu 发表于 2023-4-2 15:32
主要我想在存的同时也通过串口发送数据,我试试看在定时器里能不能发送

存储按512倍数,按前面我说的。
发送串口的话,用dma,也是可以的。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-24 11:27

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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