我用CH375的Device方式做優(yōu)盤,選擇外置固件模式,采用BUlK-Only和UFI協(xié)議,現(xiàn)在發(fā)現(xiàn)優(yōu)盤數(shù)據(jù)讀取沒有問題,而寫入時速度非常慢,文件稍微大一點就會出錯無法寫入,用BUS HOUND監(jiān)測,發(fā)現(xiàn)寫一個8K的文件,光從PC接受4096個字節(jié)的數(shù)據(jù)就用了將近1秒鐘,寫入之后總共耗時2.3秒,這種現(xiàn)象是不是有問題?怎么解決?有哪些因素會 影響U盤的寫入速度?
你每次下傳的數(shù)據(jù)都是滿包64字節(jié)的數(shù)據(jù)嗎?還有就是和你的程序的優(yōu)化也有關系,前面的如果不是滿包的話,速度會降很多。
是的,都是每64個滿包接收,達到512字節(jié)之后再寫FLASH扇區(qū). 問題是4096個字節(jié)按每次64字節(jié)接收,不寫入flash只接受都花了984ms!
這個肯定和你的程序有關系,拿51單片機來說,24M晶振,傳輸4096個字節(jié)的時間在20MS左右,也就是說傳輸?shù)乃俣仍?00K字節(jié)/S。
case 0x2a://Write LCD_Clear(); LCD_GotoXY(32,0); LCD_DispStr("Write "); RequestSense[2]=0x00; add=add+(uint32)buf[17]<<24;//邏輯扇區(qū)號 add=add+(uint32)buf[18]<<16; add=add+(uint32)buf[19]<<8; add=add+(uint32)buf[20];
templen=0; templen=templen+(uint16)buf[22]<<8; templen=templen+(uint16)buf[23]; templen=templen*512; i=0; sum=0; while(sum { USB_COMW(CMD_RD_USB_DATA); length=USB_DATR(); sum=sum+length; if(length>0) { for(len=0;len!=length;len++) buffer[64*i+len]=USB_DATR(); i++; } DelayMS(10); if((sum%512)==0) { parameter.SectorIndex = add; parameter.RsvdForLow =0x01; parameter.Buf = buffer; // FlashCommand(DISK_SECTOR_WRITE, ?meter); add++; i=0; } }
break; 這是我處理寫命令的程序段,幫我看看有沒有什么問題? 還有,我的晶振是12M,這個有沒有什么影響?
速度慢的問題已經(jīng)基本解決,現(xiàn)在發(fā)現(xiàn)不能寫入word文檔,Excel和文本文件可以寫入,這是為什么?
怎么解決的,說來聽聽