基于USB2.0的高性能移動存儲設(shè)備的設(shè)計
K9K2G08U0A編程器件以頁為單位編程,它允許在單頁編程周期中對部分頁或一個甚至連續(xù)的多達2112個連續(xù)字節(jié)編程。一個頁編程周期由2個階段組成[3]:(1)串行數(shù)據(jù)加載階段:數(shù)據(jù)被加載到數(shù)據(jù)寄存器中,以輸入命令80h為標志,緊接著是5個字節(jié)的地址輸入和串行數(shù)據(jù)加載;(2)非易失性的編程階段:命令10h標志著該編程階段的開始,將已加載的數(shù)據(jù)寫入實際的存儲單元,編程典型時間為200μs。之后R/ 跳低,進入閃存內(nèi)部編程,最后進入讀狀態(tài)確認操作,命令70h表示讀狀態(tài)命令,I/O0表示讀到的狀態(tài)。頁編程實現(xiàn)代碼如下:
void PageWrite(void ) //頁編程
{
CheckBlock(startpage); //檢測壞塊列表
if(FirstP)
// FirstP為1,開始對一頁進行寫操作,否則為0
{//片選信號有效
F_CE=0; F_RE=1; F_ALE=0;F_CLE=1;F_WE=0;
OutputCommand(0x80); //輸入命令0x80
F_WE=1;
F_ALE=1;//發(fā)送地址開始
AddrOut (addr1); //得到頁地址,五個周期
AddrOut (addr2); AddrOut (addr3); AddrOut (addr4); AddrOut (addr5);
F_ALE=0;
FirstP =0; }
WriteData(BuffBlock); //將數(shù)據(jù)寫入緩沖區(qū)
FlagWrite =0;
Do{
F_WE=0;
WriteFlash(); //將數(shù)據(jù)寫入flash
FlagWrite++;
F_WE=1;
}while(FlagWrite64); //寫滿一頁數(shù)據(jù)
OutputCommand (0x10); //輸入命令0x10
while(!F_RB); //等待讀信號有效
OutputCommand (0x70); //輸入命令0x70
Wait();
F_CE=1; //片選結(jié)束
startpage++; //繼續(xù)寫下一頁
FirstP =1;
}
4.結(jié)束語
本文在充分研究USB2.0協(xié)議、Bulk-Only傳輸協(xié)議和SCSI指令規(guī)范的基礎(chǔ)上,設(shè)計出USB2.0高性能移動存儲設(shè)備。本文作者創(chuàng)新點:將FLASH作為數(shù)據(jù)采集系統(tǒng)中的存儲單元,應(yīng)用在與計算機交互數(shù)據(jù)的采集過程之中;并采用中斷驅(qū)動設(shè)計固件程序,提高了讀寫效率。實驗證明,其性能穩(wěn)定可靠,讀寫數(shù)據(jù)速度達到了令人滿意的效果。移動數(shù)據(jù)的交換和存儲是目前IT行業(yè)的熱點,可以在此基礎(chǔ)上,不斷完善現(xiàn)有設(shè)計方案,繼續(xù)研究開發(fā)嵌入式USB主機系統(tǒng),使得在PC機不參與的情況下同樣可以進行數(shù)據(jù)的存儲與交換。
評論