ch376读取u盘的速度问题!

我用12MHZ的mega8的spi控制ch376,用你们CH376EVT.ZIP中的程序,读mp3的速度很快,差不多有200-300k/s,可是写mp3的速度还是很慢,只有2k/s左右.换个u盘也只有6-7k/s.不知道有什么原因导致这样,求教啊!

写速度与U盘本身性能有关,写需要擦写Flash,这需要花时间 采用扇区方式写,每次尽可能多写一些数据,速度会快一些


按照正常的测试来说,一般读的速度是写的速度的一倍,如果你读能达到200-300KB/S的话,写的速度应该能到100-150KB/S.当然不排除特殊情况,经验值供你参考.写的时候推荐按照1楼的方法.按照扇区方式.


谢谢了,你们看下我的函数是不是有什么问题? void spi_init(void) { SPCR = (1< SPSR = 0x01;//倍速 } //--------------------------------------- //spi读写 read and write one byte //--------------------------------------- unsigned char SPI_WRByte(unsigned char val) { SPDR = val; while(!(SPSR & (1< return SPDR; }

/---------向CH376写命令------------ void xWriteCH376Cmd(UINT8 mCmd) { UINT8 i; CH376_SPI_SCS = 1; CH376_SPI_SCS = 0;//选通 SPI_WRByte(mCmd);//发出命令码 for ( i = 30; i != 0 && CH376_SPI_BZ; -- i );//SPI忙状态查询,等待CH376不忙, }

//------------向CH376写数据------------ void xWriteCH376Data( UINT8 mData ) { SPI_WRByte(mData); } //------------从CH376读数据------------ UINT8 xReadCH376Data(void) { return(SPI_WRByte(0xFF)); } 应用函数是用的CH376EVT.ZIP中的函数,写测试是将一个固定的512字节的数组写入,不知是否有问题 UINT8 ch376test(void) { UINT8 temp,s,TarName,TarFileName[20] = "\\12341.BIN"; UINT8 TarUpDirClust; UINT16 ThisLen,i; UINT32 ByteCount=0,FileSize=1024*1024; //初始化 for(i=0;i<512;i++) buf[i] = 0x31; ThisLen = sizeof(buf);

if((temp =mInitCH376Host()) == ERR_USB_UNKNOWN) return temp; while ( 1 ) { WDR(); //ByteCount=0; //FileSize=1024*50; while ( CH376DiskConnect() != USB_INT_SUCCESS ) { //检查U盘是否连接,等待U盘插入 WDR(); } for(i=0;i<100;i++)//最长等待5s { WDR(); delay_ms(50); s = CH376DiskMount( ); // 初始化磁盘并测试磁盘是否就绪 if ( s == USB_INT_SUCCESS ) break; // 准备好 else if ( s == ERR_DISK_DISCON ) break; // 检测到断开,重新检测并计时 } if(s == ERR_DISK_DISCON) continue;//检测到断开,重新检测并计时 TarName = CH376SeparatePath( TarFileName );//从路径中分离出最后一级文件名或目录名,返回最后一级文件名或目录名的偏移 if ( TarName ) {//是多级目录 s = CH376FileOpenDir( TarFileName, TarName );//打开多级目录下的最后一级目录,即打开新建文件的上级目录 if ( s != ERR_OPEN_DIR ) {//因为是打开上级目录,所以,如果不是成功打开了目录,那么说明有问题 //上级目录出错 } TarUpDirClust = CH376ReadVar32( VAR_START_CLUSTER );//上级目录的起始簇? } else TarUpDirClust = 0;//默认是根目录的起始簇? s = CH376FileCreate( &TarFileName[TarName] );//在根目录或者当前目录下新建文件,如果文件已经存在那么先删除 if ( s != USB_INT_SUCCESS ) return( s ); do { CH376WriteVar32( VAR_START_CLUSTER, TarUpDirClust );//将目标文件所在的上级目录的起始簇号设置为当前簇号,相当于打开上级目录 s = CH376FileOpen( &TarFileName[TarName] ); //打开文件 if ( s != USB_INT_SUCCESS ) return( s ); s = CH376ByteLocate( ByteCount );//以字节为单位移动当前文件指针到上次复制结束位置 if ( s != USB_INT_SUCCESS ) return( s ); s = CH376ByteWrite( buf, ThisLen, NULL);//以字节为单位向当前位置写入数据块,除非没有磁盘空间,否则返回实际长度总是与ThisLen相等 if ( s != USB_INT_SUCCESS ) return( s ); s = CH376FileClose( TRUE ); //关闭文件,对于字节读写建议自动更新文件长度 if ( s != USB_INT_SUCCESS ) return( s ); ByteCount += ThisLen; } while( ByteCount < FileSize ); setled; while ( CH376DiskConnect( ) == USB_INT_SUCCESS ) { /* 检查U盘是否连接,等待U盘拔出 */ WDR(); } clrled; //LED灭 delay_ms( 100 ); }//end while(1) }


另外一个问题是我单片机的内存就1k,我用了512个字节数组用扇区读写方式也只能每次读写一个扇区,我试过了,速度还是快不了。


你是用字节模式写的,这个很慢.你修改为按照扇区实验一下,看速度能达到多少?


用扇区写和用字节写的速度一样,只相差几秒。 还有问下376能和上位机通讯吗?有关的例程吗?


(1)每次尽可能多写一些扇区,速度才能快一些 (2)可以做设备与PC通讯,下载CH376EVT.ZIP,参考\CH376EVT\EVT\EXAM\EXAM0设备例程 另CH376的设备模式与CH372完全兼容,可参考CH372EVT.ZIP


上位机的例子程序看CH372EVT.ZIP中的例子


只有登录才能回复,可以选择微信账号登录