请问一下CH376T用SPI通讯,SPI速率8M,写入U盘的速率一般是多少?刚测试才几kB,差太远了,写入函数用的是CH376ByteWrite()。
应该是程序有问题,速率差太远了,是不是写入函数调用错了?或者流程问题?有没有写入U盘的例程?
请问一下CH376T用SPI通讯,SPI速率8M,写入U盘的速率一般是多少?刚测试才几kB,差太远了,写入函数用的是CH376ByteWrite()。
应该是程序有问题,速率差太远了,是不是写入函数调用错了?或者流程问题?有没有写入U盘的例程?
SPI方式,数据流取决“时钟频率+数据间间隔时间”,
文件读写速度:
连续读出或写入 > 打开+读写+关闭+打开+读写+关闭…循环,
扇区方式操作(512Byte单位) > 字节方式操作(最小1Byte)
有看到说CH376S并口最高可以到200kB/s,CH376T SPI接口有测试过理论最高速率吗?
理论读取最大600K
写入大概只有一半
您说的这个速率是k Byte还是k bit?我实际测试写入只有16KByte/s,读取19KByte/s,用secWrite写入才9kByte/s,secRead读会卡住,不清楚什么原因。
大佬能帮忙看下哪里有问题吗?测试代码如下:
#define SEC_NUM 10
UINT8 writedata[512], readbuf[512];
UINT8 RealReadCount = 0, RealWriteCount = 0;
memset(writedata, 'A', sizeof(writedata));
xLastTickCount = xTaskGetTickCount();
NRF_LOG_INFO("now systick:%d", xLastTickCount);
//Write
s = CH376FileOpen("/SEC.TXT");
if(s = ERR_MISS_FILE) {
s = CH376FileCreate("/SEC.TXT");
}
if ( s == USB_INT_SUCCESS ) {
NRF_LOG_INFO("Open, write .txt file");
for(i = 0; i < SEC_NUM; i++) {
CH376SecWrite(writedata, 1, &RealWriteCount);
}
CH376FileClose( TRUE );
NRF_LOG_INFO("write cnt: %d, total:%d", RealWriteCount, RealWriteCount*i*512);
}
else {
NRF_LOG_INFO("error:0x%x", s);
}
xTickCount = xTaskGetTickCount();
times = xTickCount - xLastTickCount;
speed = RealWriteCount * i * 512 * 1000 / 1024 / times;
NRF_LOG_INFO("write tick count: %d, speed:%d kb/s", times, speed);
filesize = CH376GetFileSize( );
NRF_LOG_INFO( "File size = %ld\n", filesize );
xLastTickCount = xTaskGetTickCount();
vTaskDelay(20);
xTickCount = xTaskGetTickCount();
NRF_LOG_INFO("delay cnt:%d\n", xTickCount - xLastTickCount);
//Read
s = CH376FileOpen("/SEC.TXT");
if ( s == USB_INT_SUCCESS ) {
NRF_LOG_INFO("Open, read .txt file");
CH376SecLocate( 0 );
for(i = 0; i < SEC_NUM; i++) {
CH376SecRead( readbuf, 1, &RealReadCount );
}
CH376FileClose( TRUE );
NRF_LOG_INFO("read cnt: %d, total byte: %d", RealReadCount, RealReadCount*i*512);
}
else {
NRF_LOG_INFO("error:0x%x", s);
}
xTickCount = xTaskGetTickCount();
times = xTickCount - xLastTickCount;
speed = RealReadCount * i * 512 * 1000 / 1024 / times;
NRF_LOG_INFO("read tick count: %d, speed:%d kb/s", times, speed);
CH376SecRead函数还是失败,一直卡住,另外,用10240Byte的buff进行测试,单次写入整个buff,10KB数据,分别测试写入1次和循环写入5次,测试结果如下:
Sector:
1. 一个sector512Byte,单次写入20个sector,总计10KB数据,用时898ms,速度11KB/s
2. 单次写入20个sector,循环5次,总计50KB数据,用时4315ms,速度11KB/s
Byte:
1. 单次写入10240 Byte,总计10KB数据,用时613ms,速度16KB/s
2. 读取10KB用时447ms,速度20KB/s。
3. 单次写入20个sector,循环5次,总计50KB数据,用时2891ms,速度17KB/s
4. 读取50KB用时2371ms,速度21KB/s
为什么扇区写入会比Byte写入速率更慢?并且最高速度才21KB,和您说的200KB相差10倍!
我使用的是CH376T,SPI通讯速度8M,能帮忙看下是什么问题吗?
主要遇到的困难:
扇区读函数会卡死
扇区写比Byte写速度慢1倍
最快速度仅20KB/s,是贵司测试速度的十分之一
你芯片工作电压是5V吧,还有376SPI最高到24M,你调到20M试试
CH376T的VCC给的是3.3V,datesheet中写支持5V,3.3V,3V三种供电电压,供电电路参考的是datesheet中的电路图。SPI目前最高只能是8M,能上20M的给屏幕用了。
能麻烦您帮忙测一下8M SPI下U盘的读写速度吗?分别测Byte读写和Sec读写。