测试1:字节方式读写CH376ByteRead,CH376ByteWrite,RAM缓存大小char buf[640];
测试2:字节方式读写CH376ByteRead,CH376ByteWrite,RAM缓存大小char buf[6400];
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);
以及串口打印结果:
串口打印写入字节数
终于发现问题了,原来是把DEF_SECTOR_SIZE和CH376_DAT_BLOCK_LEN给搞错了,原来USB的扇区大小是512字节,而不是64字节,Ch376的buf大小才为64字节,改过来就OK了。
测试结果,完全复制完需要5S,平均速度为72KB/S,使用扇区的方式拷贝的速度大大提高了。