ch375写U盘的速度怎么这么低

我在做U盘录音时,用的是CH375,怎么写一个扇区要20几毫秒啊,项目根本就不能做下去了,怎么办啊

CH375用库操作U盘的话,如果以扇区方式,大数据块(30K)读写的话速度可以达到100K--200K字节/S. 如果速度达不到要求的话,可以将375换成374芯片,两者功能相同,只是CH374是去掉了一些内置固件的纯接口芯片,因此速度比375要快。


按2楼的做法,CH375一般能调到200K到300K左右吧,1楼的速度低可参考CH375评估板资料中的一些速度说明


我在写数据时,要写FAT表,特别是跨扇区的,数据要快,数据采集要一定的程序时间,数据还要适时.再说我用的是IC的RAM空间只有2K,只能一个扇区一个扇区的写,比较的麻烦


按照你说的,你采集一个扇区的数据需要多长时间呢?现在要分析是我们写U盘的速度慢还是你程序别的地方出了问题,你可以单独的测下我们U盘写扇区的速度,你可以创建一个文件,往里面写一个大的数据,然后你计算下写的速度是多少?应该没那么慢,除非你的单片机速度很慢。


我的读写子程序:  写一个扇区的时间:28mS(512Bytes),读一个扇区的速度:2.2mS,电脑的速度速度是300K Bytes/S,是一个大文件,341M,里面有目录等各种文件,主要是图片,用了16分中, U盘是清华同创(型号TC508),另外测了朗科(型号U218 512)写U盘的速度是32mS一个扇区;这些都是主

测试方法: WHILE{    LED_PIN=0;    CH375_RD_PAGE(XXX);XXX=0X02    LED_PIN=1;    CH375_WR_PAGE(XXX); } 测试LED_PIN的方波的速度. unsigned char Ch375_RD_Page(unsigned long page_address) { idata volatile char Rd_nop; data char i,j; data int buff_counter=0x00; //000----512 data char rd_status; Ch375_Command(0x54); Ch375_WR_Data(page_address); Ch375_WR_Data(page_address>>8); Ch375_WR_Data(page_address>>16); Ch375_WR_Data(page_address>>24); Ch375_WR_Data(0x01);

for(i=0;i<8;i++) { while(J2a_INT==0) J2a_Encode_Loop(); rd_status=Ch375_Status(); if(rd_status != 0x1d) break; Ch375_Command(0x28); j=Ch375_RD_Data(); //过渡

P1MDOUT=0x00; P1=0xff; Ch375_CE=0; for(j=0;j<64;j++) { Ch375_RE=0; Rd_nop++; Rd_nop++; Fat_Data[buff_counter]=P1; Ch375_RE=1; for(Rd_nop=0;Rd_nop<2;Rd_nop) Rd_nop++; buff_counter++; } Ch375_CE=1; Ch375_Command(0x55); } if(i<8) //提前推出,出错 return(0x1f);

rd_status=Ch375_Status(); return(rd_status); } unsigned char Ch375_WR_Page(unsigned long page_address) { idata volatile char WR_nop; data char i,j; data int wr_pointer=0x00; //00---512 data char wr_status;

Ch375_Command(0x56); Ch375_WR_Data(page_address); Ch375_WR_Data(page_address>>8); Ch375_WR_Data(page_address>>16); Ch375_WR_Data(page_address>>24); Ch375_WR_Data(0x01); for(i=0;i<8;i++) { while(J2a_INT==0) J2a_Encode_Loop(); wr_status=Ch375_Status(); if(wr_status != 0x1e) break;

Ch375_Command(0x2b); Ch375_WR_Data(0x40);

P1MDOUT=0xff; Ch375_CE=0; for(j=0;j<64;j++) { P1=Fat_Data[wr_pointer]; Ch375_WE=0; WR_nop++; WR_nop++; Ch375_WE=1; for(WR_nop=0;WR_nop<2;WR_nop) WR_nop++;

wr_pointer++; } Ch375_CE=1; Ch375_Command(0x57); } if(i<8) return(0x1f);

wr_status=Ch375_Status(); return(wr_status); }

unsigned char Ch375_Status(void) { char int_status; while(Ch375_INT); Ch375_Command(0x22); int_status=Ch375_RD_Data(); if(int_status==0x16) Ch375_Mode=0x00;

return(int_status); }

void Ch375_Command(command) { idata volatile char nop_nop;

P1MDOUT=0xff; Ch375_A0=1; P1=command; Ch375_CE=0; Ch375_WE=0; nop_nop++; nop_nop++; nop_nop++; Ch375_WE=1; Ch375_CE=1; Ch375_A0=0;

for(nop_nop=0;nop_nop<5;nop_nop) nop_nop++; }

void Ch375_WR_Data(value) { idata volatile char nop_nop; P1MDOUT=0xff; P1=value; Ch375_CE=0; Ch375_WE=0; nop_nop++; nop_nop++; nop_nop++; Ch375_WE=1; Ch375_CE=1; for(nop_nop=0;nop_nop<2;nop_nop) nop_nop++; }

char Ch375_RD_Data(void) { idata volatile char nop_nop; unsigned char para;

P1MDOUT=0x00; P1=0xff; Ch375_CE=0; Ch375_RE=0; nop_nop++; nop_nop++; nop_nop++; para=P1; Ch375_RE=1; Ch375_CE=1; for(nop_nop=0;nop_nop<2;nop_nop) nop_nop++; return(para); }


读的速度可以达到230K字节/S,这个应该是正常的速度,而写的话和U盘本身的特性有关系,你可以换一个U盘试下看。 但是速度也不会这么慢啊,估计还有问题


经过测试发现,一次写一个扇区和一次写4个扇区所花的时间差不多,多2mS的时间,但我的MCU的RAM太小,看来的找个RAM比较大的MCU,但成本增加很多,没有办法,等着挨骂,


不知怎么搞的,我按照 公司提供的电路,可是不能读取,如果有成功读写的,请发个人信息保护,已隐藏 先谢谢你了


以前我也是不能读,后来根据南京公司提供的初始程序,就可以读了,你要先读 U盘的初始化,容量,是否准备好等过程,必须这样,才能读


以扇区为单位进行文件读写(写比读慢),并口连接方式的最高速度可达100K 到200K 字节; 这是ch375的帮助文档,关于怎么提高速度的: 1:如果将CH375 芯片换成CH374 芯片,并且提高单片机的时钟频率,那么速度还可以提高1 倍。 2:为了提高处理效率和速度,建议对USB 闪存盘使用FAT12 或者FAT16 文件系统


并口的话可以用个绝对地址定义,那样或许好些


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