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


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


android 判断 u盘 非FAT32格式_全局变量

startup_stm32f10x_hd.s设置

 


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


      测试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



使用扇区方式读写时发现,每次读出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);

以及串口打印结果:

android 判断 u盘 非FAT32格式_缓存_02

串口打印写入字节数

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


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