[求助]关于U盘读取数据时间较长的问题请教

我用的是成品模块,串口的方式与单片机(STC)进行通讯的(TTL电平),现在需要将仪器上24C512地址里的数据(64K)用U盘读出来在电脑上显示。假如从24C512里读出的为以下数据,显示格式要求为: 年/月/日 时 :分 剩余液量 工作状态 /*标题内容*/ 2009/05/20 08 : 45 105.8 正常 /*存储器中的数据*/ 2009/05/20 09 : 00 80.8 异常 /*存储器中的数据*/ 2009/05/20 10 : 12 120.0 加油 /*存储器中的数据*/ 2009/05/21 12 : 45 110.5 正常 2009/05/22 09 : 45 101.8 正常 2009/05/22 10 : 15 90.3 正常 2009/05/22 10 : 45 80.1 正常 . . . 共计8150行。 我现在用贵公司提供的例子,用数据进行模拟测试后,发现要把这8000多行的数据给U盘写完,大概需要15分钟左右,时间太长,我不清楚用什么方式可以减少U盘的读取时间,请求帮助。我是这样测试的。 for(page=0;page<815;page++)//仪器画面中显示共可存储815页 { dizhi1=page*80; //不同页面对应的不同地址 for(a=0;a<10;a++) //每页存储10行数据 { as++; //测试读取数据的行数 dizhi=((a*8)+dizhi1); year=2000+8;/*read_iic(dizhi+1);*/ //先用数据进行模拟测试 month=12;//read_iic(dizhi+2); //先用数据进行模拟测试 date=23;//read_iic(dizhi+3); hour=15;//read_iic(dizhi+4); min=25;//read_iic(dizhi+5); adc=5670;//(read_iic(dizhi+6)*100)+read_iic(dizhi+7); //a7=read_iic(dizhi+7); //工作状态标志位,不同数据工作状态不同 len = sprintf( mCmdParam.ByteWrite.mByteBuffer, "%04d/%02d/%02d %02d ", year, (U16)month, date, (U16)hour); /* 将二制制数据格式为一行字符串 */ mCmdParam.ByteWrite.mByteCount = (unsigned char)len; /* 指定本次写入的字节数,不能超过MAX_BYTE_IO,否则另用缓冲区分多次写入 */ i = ExecCommand( CMD_ByteWrite, (unsigned char)(len+1) ); /* 以字节为单位向文件写入数据 */ mStopIfError( i ); len = sprintf( mCmdParam.ByteWrite.mByteBuffer, ": %02d ADC=%u %02d\xd\xa", (U16)min,adc,as); /* 将二制制数据格式为一行字符串 */ mCmdParam.ByteWrite.mByteCount = (unsigned char)len; /* 指定本次写入的字节数,不能超过MAX_BYTE_IO,否则另用缓冲区分多次写入 */ i = ExecCommand( CMD_ByteWrite, (unsigned char)(len+1) ); /* 以字节为单位向文件写入数据 */ } } 程序说明:我是参考SER_ADC中读取ADC参数的例子测试的.

首先你需要确定的一个问题就是你串口通信的波特率是多少?我们模块默认的波特率为4800,按照这个速度来说的话,速度在0.5K字节/S,同时你在写数据的时候按照自己方式写,速度也会相应的减小. 建议按照下面的方式来操作U盘: 1,提高通信波特率,可以把波特率调到115200(10K字节/S). 2,可以把字节方式写数据修改成扇区写数据,速度也会提高. 按照上述的调整的话,速度应该可以做到8K字节/S的速度.


谢谢楼上的回答,我设的波特率为9600,我再把波特率提高试试。


继续请教,我把波特率提高到115200,测试了后大概需要8分钟左右,时间还是比较长,想能再把时间缩短,还有就是上面的程序,我给U盘每写一行就需要给len = sprintf( mCmdParam.ByteWrite.mByteBuffer,"......)这个缓冲区写两次才能完成(写一次好象数据溢出了),怎样设置就每给U盘写一行,就只给缓冲区写一次即可。


不知道你想需要什么样的速度,115200也就是10KB,实际也达不到,如果你想超过这个速度,串口版无法满足,只能改用并口或SPI口版


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