OpenEdv-开源电子网

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

STM32F767 fatfs+sd的例程,是最快的读写方法吗?急需提速

[复制链接]

2

主题

6

帖子

0

精华

新手上路

积分
21
金钱
21
注册时间
2020-7-23
在线时间
9 小时
发表于 2020-8-7 10:27:37 | 显示全部楼层 |阅读模式
10金钱
小弟按照原子哥fatfs例程做sd卡读取和存储试验,读的速度不影响,写的速度只有200KB/s,满足不了需求,请问大神有没有更快的写入方式?我看网上有说sdio等等方式,但我自己也辨别不了例程里用的是什么方式,求大神赐教。

目前情况是:
需要从一个文件里读数据,计算,然后得出结果写到一个新文件里。每次写四个float。
我用一个2048大小的缓存块,到了差不多2000多的大小就进行一次写操作。

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

使用道具 举报

2

主题

6

帖子

0

精华

新手上路

积分
21
金钱
21
注册时间
2020-7-23
在线时间
9 小时
 楼主| 发表于 2020-8-7 14:34:50 | 显示全部楼层
小弟求问大哥们鸭!!!顶顶
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165475
金钱
165475
注册时间
2010-12-1
在线时间
2115 小时
发表于 2020-8-8 01:04:13 | 显示全部楼层
F767例程就是用的SDIO方式。这样没毛病的,200KB是有点慢,你的卡是不是高速卡?是不是新卡?
回复

使用道具 举报

2

主题

6

帖子

0

精华

新手上路

积分
21
金钱
21
注册时间
2020-7-23
在线时间
9 小时
 楼主| 发表于 2020-9-7 10:03:16 | 显示全部楼层
正点原子 发表于 2020-8-8 01:04
F767例程就是用的SDIO方式。这样没毛病的,200KB是有点慢,你的卡是不是高速卡?是不是新卡?

原子哥您好!抱歉很久没回复!
使用的是新卡,任务工程是读取卡中数据,运算,然后输出到sd卡中。是SD HC卡,应该是高速卡,而且前文有所误解,是20kB/s 一分钟左右只能写1mb的数据
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165475
金钱
165475
注册时间
2010-12-1
在线时间
2115 小时
发表于 2020-9-8 03:00:49 | 显示全部楼层
octolsineb 发表于 2020-9-7 10:03
原子哥您好!抱歉很久没回复!
使用的是新卡,任务工程是读取卡中数据,运算,然后输出到sd卡中。是SD H ...

不应该这么慢啊
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

2

主题

6

帖子

0

精华

新手上路

积分
21
金钱
21
注册时间
2020-7-23
在线时间
9 小时
 楼主| 发表于 2020-9-8 11:35:00 | 显示全部楼层

您好!是不是跟我的程序内容有关?我程序内容是从一个txt文件读数据,运算,写入新txt,循环。或者是说在基本设置上有提升的空间呢?如果要修改基本设置,有哪些方面可以入手呢?我已经尝试了提升sdmmc的频率
回复

使用道具 举报

0

主题

6

帖子

0

精华

初级会员

Rank: 2

积分
66
金钱
66
注册时间
2020-8-10
在线时间
10 小时
发表于 2020-9-8 11:43:56 | 显示全部楼层
顶顶顶。。。
回复

使用道具 举报

2

主题

6

帖子

0

精华

新手上路

积分
21
金钱
21
注册时间
2020-7-23
在线时间
9 小时
 楼主| 发表于 2020-10-29 21:02:58 | 显示全部楼层
        while(reading_line_No<35000)
                {
               
               
               
        //*********************************************************&#209;-&#187;·&#182;áè&#161;£&#172;2¢&#199;ò&#184;3&#214;μ&#189;ó&#191;ú********************************************************
     new_data_read();
                 //data_read();
                       
                        LED0_Toggle;
                       
                       
                       

               

        //*********************************************************&#188;&#198;&#203;&#227;1y3ì**********************************************************************

                                GNSS_INS_Fusion_step();
                  GNSS_INS_Fusion_terminate();

        //********************************************************&#189;á1&#251;D′è&#235;D&#194;μ&#196;txt&#214;D*********************************************
      answer_write();
                       
                        reading_line_No++;
                }




void answer_write(void)
{
        sprintf(buf, "%.10lf \t",GNSS_INS_Fusion_Y.Yaw_INS);
        strcat(bufall,buf);
        memset(buf,0,sizeof(buf));
        sprintf(buf1, "%.10lf \t",GNSS_INS_Fusion_Y.Pos_new_Dec_single_lever[0]);
        strcat(bufall,buf1);
        memset(buf1,0,sizeof(buf1));
        sprintf(buf2, "%.10lf \t",GNSS_INS_Fusion_Y.Pos_new_Dec_single_lever[1]);
        strcat(bufall,buf2);
        memset(buf2,0,sizeof(buf2));
        sprintf(buf3, "%.10lf \r\n",GNSS_INS_Fusion_Y.Pos_new_Dec_single_lever[2]);
        strcat(bufall,buf3);
        memset(buf3,0,sizeof(buf3));
        if(strlen(bufall)>990){
                                f_lseek(&objtxt2,f_size(&objtxt2));
                                fr2=f_write(&objtxt2,bufall,strlen(bufall),&brs);
                                f_sync(&objtxt2);
                                memset(bufall,0,sizeof(bufall));
        }

}


void new_data_read(void)
{
        int count=0;
f_lseek(&objtxt, j);
f_read(&objtxt,buffer_gnss_data,400,&brs);
ptr= strchr(buffer_gnss_data,enter);
        buffer_gnss_data[ptr-buffer_gnss_data]=0x00;
        j=j+ptr-buffer_gnss_data;
        char*tokenPtr =strtok(buffer_gnss_data," ");
        while(tokenPtr != NULL)
        {
        temp[count]=atof(tokenPtr);
                tokenPtr = strtok(NULL, " ");
                count++;
        }
                                time=temp[0];
                                GNSS_INS_Fusion_U.IMU_ACC[0]=temp[1];
                                GNSS_INS_Fusion_U.IMU_ACC[1]=temp[2];
                    GNSS_INS_Fusion_U.IMU_ACC[2]=temp[3];
                                GNSS_INS_Fusion_U.IMU_Gyro[0]=temp[4];
                                GNSS_INS_Fusion_U.IMU_Gyro[1]=temp[5];
                                GNSS_INS_Fusion_U.IMU_Gyro[2]=temp[6];
                                GNSS_INS_Fusion_U.HeadingAngle_GNSS=temp[7];
                                GNSS_INS_Fusion_U.Latitude_GNSS_Int=temp[8];
                                GNSS_INS_Fusion_U.Longitude_GNSS_Int=temp[9];
                                GNSS_INS_Fusion_U.Latitude_GNSS_Dec=temp[10];
                                GNSS_INS_Fusion_U.Longitude_GNSS_Dec=temp[11];
                                GNSS_INS_Fusion_U.Pos_RMS_G[0]=temp[12];
                                GNSS_INS_Fusion_U.Pos_RMS_G[1]=temp[13];
                                GNSS_INS_Fusion_U.VehicleSpeed=temp[14];
                          GNSS_INS_Fusion_U. Quality_GNSS=temp[15];
                          GNSS_INS_Fusion_U.Vel_Level_GNSS=temp[16];
                          GNSS_INS_Fusion_U.Course_GNSS=temp[17];
                          GNSS_INS_Fusion_U.SteeringAngleValid=temp[18];
                          GNSS_INS_Fusion_U.SteeringAngle=temp[19];
                          GNSS_INS_Fusion_U.Heading_RMS_GNSS=temp[20];
                          GNSS_INS_Fusion_U.Soln_SVs_GNSS=temp[21];
                          GNSS_INS_Fusion_U.GNSS_Height=temp[22];
                                GNSS_INS_Fusion_U.Soln_SVs_Ante2_GNSS=temp[23];
                          GNSS_INS_Fusion_U.GNSS_Vel_Vertical=temp[24];
                          GNSS_INS_Fusion_U.GNSS_Vel_Latency=temp[25];
                          GNSS_INS_Fusion_U.Heading_time=temp[26];
                                GNSS_INS_Fusion_U.Pos_time=temp[27];
                          GNSS_INS_Fusion_U.Vel_time=temp[28];
                          GNSS_INS_Fusion_U.Pos_double[0]=temp[29];
                          GNSS_INS_Fusion_U.Pos_double[1]=temp[30];
                          GNSS_INS_Fusion_U.Pos_double[2]=temp[31];
                          GNSS_INS_Fusion_U.Lati_Dec_single=temp[32];
                          GNSS_INS_Fusion_U.Longi_Dec_single=temp[33];
                          GNSS_INS_Fusion_U.GNSS_Height_RMS=temp[34];
                          GNSS_INS_Fusion_U.IMU_TEMP=temp[35];
       
}
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-4-29 23:50

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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