单片机,ch375,主机并口方式,往U盘写入速度只能到186字节/秒,是否还能提高?该如何提高?请大虾们不吝赐教!
(1)有没有用子程序库,扇区方式还是字节方式,每次写入多少数据 (2)单片机机的速度是多少?模拟总线还是总线地址方式 (3)读速度是多少?我们只参考读速度,写过程涉及U盘自身的Flash擦写,这个时间不同的U盘不尽相同
用了子程序库,扇区方式; #define CMD_SET_PKT_P_SEC 0x0B /* 主机方式: 设置USB存储器的每扇区数据包总数 */,这个地方设置的0x0B,我不知道应该是多少数据包,是否还能设成别的值; 单片机的速度是22.1184M,用I/O模拟总线; 读速度不知道,因为我没用到读,只写入,U盘换过啦,但速度变化不大,估计不是U盘的事; 另外,在用子程序库的情况下,如何改变数据包长度及每扇区数据包数?
(1)写U盘的过程中需要进行读操作了,必须测试读速度,我们也只参考读的速度,原因前贴已经解释了 (2)单片机速度也不快,模拟I/O当然要慢许多,你实测一下模拟并口的速度是多少,用示波器看下CH375的CS可以估算出来 (3)CMD_SET_PKT_P_SEC命令由库完成,不需要用户参与,你只要每次写入的扇区数尽可能的大即可,如果是MCS51,根据单片机自身的硬件特性,调整一下:LIB_CFG_DISK_IO,LIB_CFG_FILE_IO,可以提高速度,具体的参考CH375HF.PDF中的CH375LibConfig解释及例程 (4)每扇区的包数,需要根据扇区大小计算,CH375与U盘通讯,单次最大数据量为64B,那么: 包数 = 扇区大小 / 64,然后通过CMD_SET_PKT_P_SEC设置
这样设置每扇区数据包数是否正确?为什么我这样操作时返回的值总不是CMD_RET_SUCCESS,写数据0x39和0x40之间是否要加延时? xWriteCH375Cmd(CMD_SET_PKT_P_SEC); mDelay1_2uS(); mDelay1_2uS(); xWriteCH375Data(0x39); mDelay1_2uS(); mDelay1_2uS(); xWriteCH375Data(0x40); mDelay1_2uS(); mDelay1_2uS(); do { unsigned char j; j=xReadCH375Data( ); mDelay1_2uS(); if(j==CMD_RET_SUCCESS) break; } while(j!=CMD_RET_SUCCESS) ; return(0x00);
(1)不知道这个命令的用法有没有详细看过手册,这个命令没有返回值;包数不可以随便设置的,必须按照前贴计算 (2)建议把延时与写命令、写数据、读数据的子程序整合在一起