关于CH376拷贝U盘文件速度的测试比较

       测试目的,实验在使用CH376对U盘内文件进行拷贝,测试拷贝速度。

       实验条件,STM32103VC(内部64KRAM,256Kflash),72Mhz,SPI 18Mhz,CH376,测试文件:MODBUS.PDF, 文件大小366 KB

       测试1字节方式读写CH376ByteRead,CH376ByteWrite,RAM缓存大小char buf[640];

       测试结果,完全复制完需要19S,平均速度为19KB/S,感觉不是一般的慢。

       测试2字节方式读写CH376ByteRead,CH376ByteWrite,RAM缓存大小char buf[6400];

       测试结果,程序不能运行,究其原因,发现启动文件的设置:


startup_stm32f10x_hd.s设置

 

       因为局部变量被分配在堆上,由启动文件设置可以看出其不能超过1024字节,所以当设置buf为6400时就出现错误了。

      测试3使用更大的buf,放在flash中,字节方式读写CH376ByteRead,CH376ByteWrite,缓存大小全局变量char buf[6400];

       测试结果,完全复制完需要10S,平均速度为36.6KB/S

      测试4使用更大的buf,放在flash中,字节方式读写CH376ByteRead,CH376ByteWrite,缓存大小全局变量char buf[6400];//不能接近48K

       测试结果,完全复制完需要10S,平均速度为36.6KB/S,居然与方法3相同,可见使用字节方式对于速度的提升使用更大的buffer不能提升速度了,因此在上述方法的基础上改用扇区方式读写进行测试

       测试5扇区方式读写CH376SecRead,CH376SecWrite,RAM缓存大小char buf[640];

       测试结果,完全复制完需要好几分钟,不知道为什么比字节模式还慢

      测试6扇区方式读写CH376SecRead,CH376SecWrite,RAM缓存大小char buf[6400];将堆栈段改为0x2800,即10240,10KB

       测试结果,完全复制完需要好几分钟,不知道为什么比字节模式还慢。

       原因发现CH376SecRead开始都能读出100个扇区,但是明明还没读完就只能读出33个扇区了,以后都只能读出一个扇区了,所以异常的慢。

使用扇区方式读写时发现,每次读出100个扇区,开始的时候是正确的,后来就不对了,不到100个,但是显然源文件数据刚读取了一点点,就不正确了,这是为什么呢,一下是一段扇区方式读取文件的代码:

(CH376_DAT_BLOCK_LEN 为64,sizeof(buf)= 6400)

ByteCount = 0;

sec_num =sizeof(buf)/ DEF_SECTOR_SIZE; //一次可以处理的总扇区

do{

   strcpy(SrcName, FILENAME);

   s = CH376FileOpen(SrcName);                 /* 打开文件 */

   if ( s != USB_INT_SUCCESS )

       mStopIfError(s );

   s = CH376SecLocate(ByteCount/CH376_DAT_BLOCK_LEN ); /* 以扇区为单位移动当前文件指针到上次复制结束位置 */

   if ( s != USB_INT_SUCCESS )

       mStopIfError( s );

   //printf( "Reading...\r\n" );

   s =CH376SecRead( buf, sec_num , &ThisSecLen );

   if ( s != USB_INT_SUCCESS )

       mStopIfError( s );

   s = CH376FileClose(TRUE);                 /* 关闭文件 */

   if ( s != USB_INT_SUCCESS )

       mStopIfError( s );

    ByteCount+= ThisSecLen*CH376_DAT_BLOCK_LEN;  //已经读出的总字节

printf( "read ThisSecLen = %ld\r\n",ThisSecLen);  //打印每次读出实际扇区数

    printf("ByteCount=%ld,FileSize=%ld\r\n", ByteCount,FileSize ); //打印已经读出字节数与文件总数 

}while(ByteCount<FileSize);

以及串口打印结果:


串口打印写入字节数

       终于发现问题了,原来是把DEF_SECTOR_SIZE和CH376_DAT_BLOCK_LEN给搞错了,原来USB的扇区大小是512字节,而不是64字节,Ch376的buf大小才为64字节,改过来就OK了。

       测试结果,完全复制完需要5S,平均速度为72KB/S,使用扇区的方式拷贝的速度大大提高了。

       粗心大意害死人阿, 在以后做测试前最好把关键参数搞清楚,不要像这样走太大的弯路。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值