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