基于USB2.0的高性能移動(dòng)存儲(chǔ)設(shè)備的設(shè)計(jì)_第1頁(yè)
免費(fèi)預(yù)覽已結(jié)束,剩余1頁(yè)可下載查看

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、基于usb2.0的高性能移動(dòng)存儲(chǔ)設(shè)備的設(shè)計(jì):寫(xiě)使能信號(hào)。在其升高沿時(shí),指令、地址和數(shù)據(jù)鎖存到相應(yīng)的寄存器中。該信號(hào)與at89c5131芯片的p3.6 信號(hào)銜接。:讀使能信號(hào)。在其下降沿時(shí),輸出數(shù)據(jù)到i/o,同時(shí),它還可以對(duì)內(nèi)部數(shù)據(jù)地址舉行累加。該信號(hào)與at89c5131芯片的p3.7 信號(hào)銜接。cle:指令鎖存使能信號(hào)。當(dāng)cle為高電平常,指令在 升高沿通過(guò)i/o端口送入指令寄存器。該信號(hào)與at89c5131芯片的p1.0引腳銜接。ale:地址鎖存使能信號(hào)。當(dāng)ale為高電平常,地址在 升高沿送入地址寄存器。該信號(hào)與at89c5131芯片的p1.1引腳銜接。:片選信號(hào)。用于控制設(shè)備的挑選。當(dāng)設(shè)備

2、忙時(shí) 為高電平而被忽視,當(dāng)處于編程和擦除操作時(shí)設(shè)備不能回到備用狀態(tài)。該信號(hào)與at89c5131芯片的p1.2引腳銜接。r/ :預(yù)備好/忙輸出。當(dāng)它為低電平常,表示編程、擦除和隨機(jī)讀操作正在舉行,在操作完成后返回高電平;當(dāng)芯片沒(méi)被選中或輸出禁止時(shí),其為高電平常。該信號(hào)與 at89c5131芯片的p1.3引腳銜接。3. 固件設(shè)計(jì)實(shí)現(xiàn)本文設(shè)計(jì)的usb移動(dòng)存儲(chǔ)設(shè)備采納bulk-only傳輸方式,遵循ufi指令規(guī)范。移動(dòng)存儲(chǔ)設(shè)備固件的主要功能是響應(yīng)usb總線(xiàn)的各種標(biāo)準(zhǔn)哀求,向主機(jī)返回設(shè)備的狀態(tài)信息;同時(shí),解析接收到的scsi指令,舉行相應(yīng)的指令處理和數(shù)據(jù)讀寫(xiě)操作。固件設(shè)計(jì)采納中斷驅(qū)動(dòng),當(dāng)at89c513

3、1從總線(xiàn)上接收到哀求包時(shí),通過(guò)調(diào)用相應(yīng)的中斷大事處理函數(shù)來(lái)實(shí)現(xiàn),后臺(tái)處理usb傳輸,從而保證了閃存的迅速讀寫(xiě)速率。主要中斷大事有:(1)主循環(huán)等待usb中斷,設(shè)置相應(yīng)標(biāo)記位。移動(dòng)存儲(chǔ)設(shè)備插入主機(jī)后,主機(jī)向移動(dòng)閃存的控制斷點(diǎn)0發(fā)出標(biāo)準(zhǔn)哀求,固件進(jìn)入標(biāo)準(zhǔn)哀求處理函數(shù),設(shè)備回送給主機(jī)所要求的相應(yīng)描述符,調(diào)用相關(guān)驅(qū)動(dòng)程序。(2)當(dāng)usb主機(jī)通過(guò)bulk-in端口讀取閃存數(shù)據(jù)后,產(chǎn)生bulk-in端口中斷。(3)當(dāng)at89c5131通過(guò)bulk-out端口接收到主機(jī)發(fā)送的指令字cbw后,觸發(fā)bulk-out端口中斷。31 響應(yīng)usb總線(xiàn)標(biāo)準(zhǔn)哀求當(dāng)usb移動(dòng)存儲(chǔ)設(shè)備接入主機(jī)后,usb主機(jī)控制器對(duì)設(shè)備舉行總

4、線(xiàn)枚舉過(guò)程,首先向設(shè)備發(fā)送標(biāo)準(zhǔn)usb哀求get_descriptor來(lái)獲得最大數(shù)據(jù)包長(zhǎng)度;接著發(fā)出set address哀求,為設(shè)備分配地址;用法新分配的地址再次發(fā)出get_descriptor哀求,讀取設(shè)備的配置信息4,如設(shè)備描述符、配置描述符、接口描述符、端口描述符和字符串描述符等,并挑選合適的驅(qū)動(dòng)程序;最后,發(fā)出set configuration哀求配置端口屬性。usb設(shè)備通過(guò)控制端口響應(yīng)usb標(biāo)準(zhǔn)哀求,實(shí)現(xiàn)主機(jī)和設(shè)備間的通信。除控制端口外,bulk-only傳輸方式還需支持bulk-in和 bulk-out端口。端口初始化代碼如下:void usb_init(void)uepnum=0

5、x00; uepconx=0x80;/端口0,控制端口uepnum=0x01; uepconx=0x86;/端口1,bulk-in端口uepnum=0x02; uepconx=0x82;/端口2,bulk-out端口ueprst=0x07; ueprst= 0x00;/端口復(fù)位uepien=0x07; usbien|=eeofint;usbaddr=fen; /功能使能位當(dāng)控制端口配置勝利后,主機(jī)會(huì)發(fā)出inquiry、mode_sense、read_capacity等哀求,提供閃盤(pán)基本信息,如扇區(qū)大小、簇大小、閃盤(pán)容量等,當(dāng)哀求結(jié)果正確后,便會(huì)發(fā)出read(10)指令,進(jìn)入文件系統(tǒng)識(shí)別階段。3

6、2 解析scsi指令并處理ufi 指令規(guī)范基于 sff-8070i 和 scsi-2 的規(guī)范,總共定義了19個(gè)固定12字節(jié)長(zhǎng)度的操作指令,用于 usb主機(jī)和 usb 移動(dòng)存儲(chǔ)設(shè)備之間舉行指令字cbw (command block wrapper)、一般數(shù)據(jù)、狀態(tài)字csw (command status wrapper)的交換。usb移動(dòng)存儲(chǔ)設(shè)備接收到來(lái)自于usb主機(jī)bulk-out端口發(fā)給其的cbw指令字后,根據(jù)scsi的指令格式舉行解析,得到其中的指令信息,如:格式化設(shè)備、查詢(xún)?cè)O(shè)備信息、讀寫(xiě)設(shè)備等,對(duì)移動(dòng)存儲(chǔ)設(shè)備執(zhí)行相應(yīng)的指令后,向主機(jī)bulk-in端口返回狀態(tài)字 csw,報(bào)告指令執(zhí)行狀況,

7、主機(jī)按照反饋的狀態(tài)字打算是否繼續(xù)發(fā)送指令字或是數(shù)據(jù)。33 閃存的操作實(shí)現(xiàn)k9k2g08u0a芯片以頁(yè)為單位來(lái)舉行讀寫(xiě),以塊為單位舉行擦除。k9k2g08u0a支持的操作主要有幾種:讀操作(read)、頁(yè)編程 (page program)、緩存編程(cache program)、塊擦除(block erase)、塊復(fù)制(copy-back program)、隨機(jī)數(shù)據(jù)輸入(random data input)、隨機(jī)數(shù)據(jù)輸出(random data output)、復(fù)位(reset)、讀設(shè)備號(hào)(readid)、讀狀態(tài)(read status)等操作。在舉行寫(xiě)操作之前,必需對(duì)寫(xiě)單元所在塊舉行擦除,因此

8、事先需要對(duì)所擦除塊內(nèi)容舉行保存。假如閃存存在壞塊,則在舉行讀、頁(yè)編程、塊擦除、塊復(fù)制等操作時(shí)會(huì)失敗,因此對(duì)壞塊要舉行提前檢測(cè)并舉行標(biāo)注。芯片在出廠時(shí),在每塊的第一頁(yè)和其次頁(yè)的2048列的首字節(jié)做出好壞標(biāo)志,假如標(biāo)記位不是ffh則為壞塊,基于此建立壞塊列表。基于篇幅的緣由,這里以寫(xiě)操作過(guò)程為例描述閃存用法辦法。普通閃存的用法挨次是:塊擦除-編程-多次讀取-塊擦除, 對(duì)k9k2g08u0a芯片舉行數(shù)據(jù)寫(xiě)的步驟如下:(1)將寫(xiě)入數(shù)據(jù)扇區(qū)地址與壞塊列表對(duì)比,檢查錯(cuò)誤扇區(qū)。若存在壞區(qū),則繼續(xù)檢查下一扇區(qū);(2)開(kāi)拓緩沖區(qū)域,將寫(xiě)入數(shù)據(jù)扇區(qū)的原始數(shù)據(jù)利用copy-back program方式保存到緩沖區(qū);

9、(3) 利用block erase擦除要寫(xiě)入的數(shù)據(jù)扇區(qū);(4) 利用 page program操作將主機(jī)傳輸?shù)臄?shù)據(jù)寫(xiě)到閃存中;(5)利用copy-back program操作將緩沖區(qū)的數(shù)據(jù)寫(xiě)入指定扇區(qū)。k9k2g08u0a編程器件以頁(yè)為單位編程,它允許在單頁(yè)編程周期中對(duì)部分頁(yè)或一個(gè)甚至延續(xù)的多達(dá)2112個(gè)延續(xù)字節(jié)編程。一個(gè)頁(yè)編程周期由2個(gè)階段組成3:(1)串行數(shù)據(jù)加載階段:數(shù)據(jù)被加載到數(shù)據(jù)寄存器中,以輸入指令80h為標(biāo)記,緊接著是5個(gè)字節(jié)的地址輸入和串行數(shù)據(jù)加載;(2)非易失性的編程階段:指令10h標(biāo)記著該編程階段的開(kāi)頭,將已加載的數(shù)據(jù)寫(xiě)入實(shí)際的存儲(chǔ)單元,編程典型時(shí)光為200s。之后r/ 跳低

10、,進(jìn)入閃存內(nèi)部編程,最后進(jìn)入讀狀態(tài)確認(rèn)操作,指令70h表示讀狀態(tài)指令,i/o0表示讀到的狀態(tài)。頁(yè)編程實(shí)現(xiàn)代碼如下:void pagewrite(void ) /頁(yè)編程checkblock(startpage); /檢測(cè)壞塊列表if(firstp)/ firstp為1,開(kāi)頭對(duì)一頁(yè)舉行寫(xiě)操作,否則為0/片選信號(hào)有效f_ce=0; f_re=1; f_ale=0;f_cle=1;f_we=0;outputcommand(0x80); /輸入指令0x80f_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); /將數(shù)據(jù)寫(xiě)入

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論