58

帖子

0

TA的资源

一粒金砂(初级)

21
 
                                 专业的问题,怎么就没人回答了呢?是不是大家都认为这个片子的SDIO很好用了呢?好像不是吧
此帖出自stm32/stm8论坛
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

22
 
建议你仔细看下ST的SDCAR.C 和SDIO的例子,再看下SD_ReadBlock和SD_ReadMultiBlocks的区别,看你前面的代码只用了SDIO_READ_SINGLE_BLOCK模式,我想你该再试下SDIO_READ_MULT_BLOCK模式,要想再提高速度,SD_ReadMultiBlocks是必须的。不好用很多时候是不会用,ST的SDIO很好用,我们的一个SDIO设备跑到36M都没有问题(更高的速度没试)。你可以再具体分析下速度到底是慢在SDIO上还是USB上。我前面的LOG信息是用的SDCARD.C的函数在FATFS下的测试结果。没有通过USB. 附上我的测试代码:
#define BUFSIZE 512*4
#define FAT_READ_TEST
#define FAT_WRITE_TEST

void FatFS_Test()
{
//        FILINFO finfo;
        UINT len,wlen;
        UINT bufsize=1024;
        DWORD tlen,maxsize;
        u8 name[32];
        u32 i;
        u8 k;
test:
#ifdef FAT_READ_TEST
        fr = f_open(&fp,"test.bin",FA_OPEN_EXISTING | FA_READ);
        if(fr != FR_OK)
        {       
                printf("\r\nopen file fail!");
                return;
        }               
        printf("\r\nRead File %d bufsize=%d",fp.fsize,bufsize);
        //printf("\r\nFileSize:%Ld\r\n",fp.fsize);
        tm_count=0;
        SysCount(1);
        tlen=0;
        while(1)
        {
                fr =         f_read(&fp,buf,bufsize,&len);
                if(fr != FR_OK && len==0)
                {       
                        printf("\r\nread from  file fail!");
                        break;
                }
                else
                {
                }               
                //USART_SendData(USART1,'.');
                if(len<bufsize) {break; }
        }
        tm = SysCount(0);
        f_close(&fp);
        printf("\r\n Read bufsize=%d  %d/%d =  %4.3f MB/S\r\n",bufsize,fp.fsize, tm,(float)fp.fsize/(tm) );
#endif


#ifdef FAT_WRITE_TEST
        tm_count=0;
        SysCount(1);
        tlen=0;
        maxsize = 8*1024*1024L;
        //bufsize = 1024;
        //for(i=0;i<bufsize;i++) (u8)buf=i;
        sprintf((char *)name,"WRA_%d.bin",bufsize);
        fr = f_open(&fp2, (const char *)name, FA_CREATE_ALWAYS | FA_WRITE);
        if( fr != FR_OK)
        {
                 printf("\r\nCreate File Failed");
        }                 
        else
                printf("\r\nCreate File OK!");
  len = bufsize;
        k='A';
        while(1)
        {

                memset(buf,k++,len);
                fr = f_write(&fp2,buf,len,&wlen);
                if( fr != FR_OK)
                {
                         printf("\r\nWrite File Failed!\r\n");
                        break;
                }                       
                else
                {
                        tlen +=wlen;
                        if(tlen>=maxsize)  break;
                }
        }
        tm = SysCount(0);                       
        //printf(".");
        printf("\r\n Write bufsize=%d  %d/%d =  %4.3f MB/S\r\n",bufsize,maxsize, tm,(float)maxsize/(tm) );
        f_close(&fp2);
#endif
        if( bufsize>=16384) {        printf("\r\n FatFS Test OK!"); return; }
        else
        {
                bufsize=bufsize<<1;
                goto test;
        }
此帖出自stm32/stm8论坛
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

23
 
                                 我也用过这个FATFS测试过,速度也并不比USB下快,读写速度都是差不多的,刷一块480X240的TFT慢死了,FSMC的速度已经达到了6M,读的速度500k/s左右,LS能不能把你的读写SD_ReadBlock和SD_WriteBlock贴出来,我参考下,或者如果不方便的话,能不能留个联系方式,我们私聊下,交个朋友!
此帖出自stm32/stm8论坛
 
 

回复

72

帖子

0

TA的资源

一粒金砂(中级)

24
 
                                 SD_ReadBlock和SD_WriteBlock 都是直接调用SDCARD.C里面的。没有改动。
此帖出自stm32/stm8论坛
 
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

25
 
                                 不会吧,我也问了其他人,他们说读写速度都是300~400k/s,在没有改变这两个函数的情况下,你的居然能跑1.2M/s,你的是什么卡?是不是卡引起的?能不能说说你测试的环境啊?
此帖出自stm32/stm8论坛
 
 
 

回复

85

帖子

0

TA的资源

一粒金砂(初级)

26
 
                                 
FATFS 读速度测试
此帖出自stm32/stm8论坛
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

27
 
楼主,可能你的USB驱动有问题
SDIO我也用的ST的代码 OK!
此帖出自stm32/stm8论坛
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

28
 
STM32的SDIO功能还不错。
ST的SDIO演示代码是没有问题的。程序考虑的非常全,SDHC支持也很好。
SD卡读写可以进一步优化。
代码中 DMA模式 在传送数据的时候CPU依然是用的查询方式,查询标志位
待传送数据结束后在继续下一个操作,可以加大缓冲区,同时把这部分时间利用起来 切换给其他任务用。这涉及到操作系统相关的东西。
等有时间我整理一下我的代码。
此帖出自stm32/stm8论坛
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

29
 
我在用STM32的SDIO时
SD_ReadMultiBlocks很正常,测试了N张卡,读取一个20MB的TXT,平均速度10.06MB/S
但是SD_WriteMultiBlocks就不正常了,创建一个文件竟然内容全是0x00,说明根本就没写进去,然后我用SD_WriteBlock来一块一块得写,总算是能正常写入了,但是速度仅有60~150KB/S,慢得没法接受..
此帖出自stm32/stm8论坛
 
 
 

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

查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条
立即报名 | 2025 瑞萨电子工业以太网技术日即将开启!
3月-4月 深圳、广州、北京、苏州、西安、上海 走进全国6城
2025瑞萨电子工业以太网技术巡回沙龙聚焦工业4.0核心需求,为工程师与企业决策者提供实时通信技术最佳解决方案。
预报从速,好礼等您拿~

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved