請問一下CH376T用SPI通訊,SPI速率8M,寫入U(xiǎn)盤的速率一般是多少?剛測試才幾kB,差太遠(yuǎn)了,寫入函數(shù)用的是CH376ByteWrite()。
應(yīng)該是程序有問題,速率差太遠(yuǎn)了,是不是寫入函數(shù)調(diào)用錯(cuò)了?或者流程問題?有沒有寫入U(xiǎn)盤的例程?
請問一下CH376T用SPI通訊,SPI速率8M,寫入U(xiǎn)盤的速率一般是多少?剛測試才幾kB,差太遠(yuǎn)了,寫入函數(shù)用的是CH376ByteWrite()。
應(yīng)該是程序有問題,速率差太遠(yuǎn)了,是不是寫入函數(shù)調(diào)用錯(cuò)了?或者流程問題?有沒有寫入U(xiǎn)盤的例程?
SPI方式,數(shù)據(jù)流取決“時(shí)鐘頻率+數(shù)據(jù)間間隔時(shí)間”,
文件讀寫速度:
連續(xù)讀出或?qū)懭?> 打開+讀寫+關(guān)閉+打開+讀寫+關(guān)閉…循環(huán),
扇區(qū)方式操作(512Byte單位) > 字節(jié)方式操作(最小1Byte)
有看到說CH376S并口最高可以到200kB/s,CH376T SPI接口有測試過理論最高速率嗎?
理論讀取最大600K
寫入大概只有一半
您說的這個(gè)速率是k Byte還是k bit?我實(shí)際測試寫入只有16KByte/s,讀取19KByte/s,用secWrite寫入才9kByte/s,secRead讀會(huì)卡住,不清楚什么原因。
大佬能幫忙看下哪里有問題嗎?測試代碼如下:
#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函數(shù)還是失敗,一直卡住,另外,用10240Byte的buff進(jìn)行測試,單次寫入整個(gè)buff,10KB數(shù)據(jù),分別測試寫入1次和循環(huán)寫入5次,測試結(jié)果如下:
Sector:
??? 1. 一個(gè)sector512Byte,單次寫入20個(gè)sector,總計(jì)10KB數(shù)據(jù),用時(shí)898ms,速度11KB/s
??? 2. 單次寫入20個(gè)sector,循環(huán)5次,總計(jì)50KB數(shù)據(jù),用時(shí)4315ms,速度11KB/s
Byte:
??? 1. 單次寫入10240 Byte,總計(jì)10KB數(shù)據(jù),用時(shí)613ms,速度16KB/s
??? 2. 讀取10KB用時(shí)447ms,速度20KB/s。
??? 3. 單次寫入20個(gè)sector,循環(huán)5次,總計(jì)50KB數(shù)據(jù),用時(shí)2891ms,速度17KB/s
??? 4. 讀取50KB用時(shí)2371ms,速度21KB/s
為什么扇區(qū)寫入會(huì)比Byte寫入速率更慢?并且最高速度才21KB,和您說的200KB相差10倍!
我使用的是CH376T,SPI通訊速度8M,能幫忙看下是什么問題嗎?
主要遇到的困難:
扇區(qū)讀函數(shù)會(huì)卡死
扇區(qū)寫比Byte寫速度慢1倍
最快速度僅20KB/s,是貴司測試速度的十分之一
你芯片工作電壓是5V吧,還有376SPI最高到24M,你調(diào)到20M試試
CH376T的VCC給的是3.3V,datesheet中寫支持5V,3.3V,3V三種供電電壓,供電電路參考的是datesheet中的電路圖。SPI目前最高只能是8M,能上20M的給屏幕用了。
能麻煩您幫忙測一下8M SPI下U盤的讀寫速度嗎?分別測Byte讀寫和Sec讀寫。