基于ARM的U盤設計
基于ARM的U盤設計,基于,arm,設計
基于ARM的U盤設計 基于ARM的U盤設計福建師范大學 2006級 網(wǎng)絡工程 【摘要】:USB(Universal Serial Bus,通用串行總線)是計算機一種新型的接口技術,它能夠使得計算機與外部設備的鏈接更加方便與快捷?,F(xiàn)在,許多設備都開始應用USB接口來開發(fā),比如鍵盤.鼠標.移動硬盤.打印機.數(shù)碼相機等。在實際應用中,也越來越多地開發(fā)開始采用USB技術,比如數(shù)據(jù)收集等,USB的開發(fā)設計和應用現(xiàn)已成為現(xiàn)代電子設計的一個非常很要的部分。 【關鍵詞】:D12、USB_HUB、ARM、Mass Storage協(xié)議.FAT區(qū).綜述目錄1 引言31.1 USB 接口的分析31.2 USB 器件的選擇31.3 Mass Storage協(xié)議與FAT16文件系統(tǒng)42 系統(tǒng)應用技術的概述42.1 嵌入式系統(tǒng)42.1.1ARM的初步介紹42.2 PDIUSBD12芯片介紹52.2.1PDIUSBD12芯片的性能與特點53 USB系統(tǒng)原理和結構53.1 USB 總線拓撲結53.2.1 USB設備63.2.2 USB HUB73.2.4 設備電源73.2.5 設備的掛起73.3 USB主機83.4 USB設備接口的固件程序設計83.5 USB數(shù)據(jù)流104 應用的協(xié)議134.1 Mass Storage 協(xié)議134.2 BulkOnly傳輸協(xié)議164.3 SCSI指令集185 程序的實現(xiàn)215.1主循環(huán)MAINLOOP.C215.2中斷服務程序215.3控制端點處理225.4普通端點處理235.5數(shù)據(jù)提交函數(shù)24六 固件調(diào)試256.1固件調(diào)試256.2 USB器件的檢查256.3提供描述符256.4 BULK_ONLY傳輸協(xié)議命令處理266.5 SCSI 命令集276.6 系統(tǒng)調(diào)試測試29七 總結32參考文獻331 引言1.1 USB 接口的分析USB 是一種價格低廉、體積很小、效率高、速度快和支持熱插拔的新型串行通信接口。它能夠支持許多個外部設備的同時連接和通信,而且即插即用方便的特點能夠使用戶可以不重新啟動計算機的情況下直接把USB接口的外部設備連接到計算機直接開始通信。USB設計規(guī)范性為計算機與外部設備的通信提供了一個比較完整的解決策略,它與舊式的計算機接口相比較,USB總線特性有下面的特點:1、它的接口小巧。與舊式的計算機接口相比較,USB的接口有非常明顯的體積優(yōu)勢,朝著計算機與外部設備便攜化和小型化發(fā)展的大趨勢。2、USB是共享式接口。USB接口運用了“菊花鏈”方式,能夠支持許多個外設的連接。經(jīng)過USB集線器,單個USB主控制器它能偶可以連接最多126個外部設備,它大大提高了計算機的外部設備功能擴展和應用能力。3、它能夠支持即插即用和熱插拔。當一個USB外部設備連接到計算機時,系統(tǒng)能夠自動監(jiān)測到該設備,同時加載相應的驅(qū)動程序。因此,USB可以自動配置,用戶可以不需要其他任何手動配置,當連接設備時不要重新啟動計算機;用戶也能夠隨時斷開USB設備和計算機的連接,同時并不會損害計算機與外部設備。4、它能夠節(jié)省系統(tǒng)資源。系統(tǒng)中給USB主控制器分配一根IRQ線盒幾個I/O地址,它再給外部設備分配唯一的一個地址。5、USB能夠支持許多種操作。3種傳輸速率:低速1.5Mbit/s、全速2Mbit/s、高速80 Mbit/s。同時,4種類型的傳輸模式:塊傳輸、中斷傳輸、同步傳輸、控制傳輸。這樣USB就能夠滿足不同種外部設備的功能需求。6、USB成本很低?,F(xiàn)在,市場上USB的主控與從控芯片的價格都十分便宜,比如USB電纜等也非常的便宜,再加上USB具有很高的性能,使USB成為性價比非常高的計算機接口。7、USB能夠提供電源。當外部設備耗電不大,能夠可以考慮用USB接口直接供電的方式,這樣十分方便與便攜。8、USB同時擁有的很好的兼容性。1.2 USB 器件的選擇在對一個USB設備開發(fā)之初,首要根據(jù)具體情況要求選擇適當?shù)腢SB控制器。現(xiàn)在,市面上供應的USB控制器大體有兩種:一種是帶USB接口的單片機(MCU),另一種是純粹的USB接口芯片。1、 帶USB接口的單片機從應用上能夠可以分成兩大類:(1)專門應用于底層設計USB控制的單片機(2)增加了USB接口的普通單片機。如果USB 接口芯片僅僅處理USB通信,那么必須得有一個外部微處理器來進行數(shù)據(jù)交換和協(xié)議處理。比較有特點的產(chǎn)品有Philips公司的PDIUSBD12(并行接口),NS公司的USBN9603/9604(并行接口)和NetChip公司的NET2888 等。USB接口芯片的主要特點是接口方便、價格便宜、可靠性高,特別是在適合于產(chǎn)品的改型設計方面上(軟件只需要增添微處理器的USB中斷處理和數(shù)據(jù)交換程序、PC機的USB接口通信程序,不需要對原有的產(chǎn)品系統(tǒng)結構上作很大的變動,在硬件上只需要對并行總線和中斷進行變動)。1.3 Mass Storage協(xié)議與FAT16文件系統(tǒng)USB組織在定義了海量存儲設備類(Mass Storage Class)的規(guī)范制,而且這個類規(guī)范又包括四個獨立的子類規(guī)范, 1. USB Mass Storage Class Control/Bulk/Interrupt (CBI) Transport 2. USBMass Storage Class Bulk-Only Transport 3. USB Mass Storage Class ATA Command Block 4.USB Mass Storage Class UFI Command Specification。1和2子規(guī)范在定義了數(shù)據(jù)、命令、狀態(tài)USB上的傳輸方法。Bulk- Only傳輸規(guī)范只是使用Bulk端點傳送數(shù)據(jù)、命令、狀態(tài),CBI傳輸規(guī)范使用了Control、Bulk和Interrupt三種類型的端點在進行數(shù)據(jù)、命令、狀態(tài)傳送。3和4子規(guī)范是定義了存儲介質(zhì)上的操作命令。ATA命令僅規(guī)范用于在硬盤上,UFI的命令規(guī)范只是對USB移動存儲。Microsoft Windows中提供了對Mass Storage協(xié)議的支持,所以USB移動設備只是需要遵循Mass Storage協(xié)議來組織數(shù)據(jù)和處理命令,就能夠?qū)崿F(xiàn)和PC機進行交換數(shù)據(jù)。但是Flash的存儲單元的組織形式是用FAT16文件系統(tǒng),因此,就能夠直接把Windows的瀏覽器上經(jīng)過可移動磁盤來進行交換數(shù)據(jù)了,Windows可以對FAT16文件系統(tǒng)的管理,因此,USB設備并不需要干預FAT16文件系統(tǒng)操作的完整細節(jié)。主機 (USB Host)圖1.3 USB 移動存儲結構大容量存儲設備 (USB Peripheral)USB總線API接口UFI/ATA驅(qū)動USB傳輸驅(qū)動(CBI或Bulk Only)USB總線接口存儲介質(zhì)接口USB傳輸處理UFI/ATA命令處理存儲介質(zhì)(硬盤、閃存等)2 系統(tǒng)應用技術的概述2.1 嵌入式系統(tǒng) 2.1.1ARM的初步介紹ARM是Advanced RISC Machines 的縮寫,是微處理器行業(yè)非常知名的一家企業(yè)。ARM在設計上不僅實現(xiàn)了小體積化而且高性能的結構。ARM處理器簡單的結構使得ARM的內(nèi)核非常小,因此使得工作期間的低功耗。ARM處理器核具有卓越的性能和非常突出的優(yōu)點,不僅成為高效率、低消耗、低成本嵌入式處理器核的代名詞,同時也得到許多廠家的大力支持。ARM處理器是在32位高端嵌入式系統(tǒng)中使用的主流芯片之一,占有了絕大部分的市場,而且提供了在數(shù)字處理和移動通信等消費類嵌入式產(chǎn)品非常好的解決方案。ARM處理器是精簡指令集計算機RISC體系結構的計算機系統(tǒng),它不僅集成了非常典型的RISC結構特性,RISC是指Reduced Instruction Set Computer 的縮寫,比如:1.具有簡單的尋址模式,全部加載/存儲的地址都是由寄存器的內(nèi)容與指令域來決定;2.每一條數(shù)據(jù)處理指令最大限度和利用ALU和移位器;3.實現(xiàn)了最大的數(shù)據(jù)吞吐量多寄存器加載和存儲指令;4.實現(xiàn)了最快速所有指令代碼執(zhí)行的條件;因此這些在基本的RISC結構上增強的特征,使得ARM處理器在低功耗、高性能和體積小方面上得到非常良好的平衡與穩(wěn)定1。2.2 PDIUSBD12芯片介紹2.2.1PDIUSBD12芯片的性能與特點PDIUSBD12是PHILIPS運用在USB1.1協(xié)議設備端上使用最廣的芯片之一,帶有并行總線與局部DMA傳輸能力的高速的USB接口器件。在芯片內(nèi)集成了具有卓越性能的USB接口器件、SIE和FIFO存儲器以及電壓調(diào)整器等,能夠給任何外部微控制器與微處理器達成高速并行接口。PDIUSBD12芯片的功能框圖如圖2.2.1所示圖2.2.1 D12的功能框圖PDIUSBD12是一種性價上非常高的USB器件,它提供了28PIN腳模式,有SO28與TSSOP28封裝,SIE達到了全部的USB協(xié)議層,并且全部由硬件實現(xiàn)而不需要固件的參與。具體功能如下:同步方式識別、并/串轉換、比特填充/解填充、CRC校驗/生成、PID確認/生成、地址識別和握手信號的鑒定/生成、批處理數(shù)據(jù)傳輸可達1MB/s,30.3V雙極性輸入范圍,可接受4.55.5V工作電壓、工業(yè)級標準工作環(huán)境溫度范圍為-40+854。3 USB系統(tǒng)原理和結構3.1 USB 總線拓撲結USB總線的物理連接是一種有層次性的星型結構,每個星型結構以集線器(HUB)為中心。PC機就是主機和根HUB,用戶能夠?qū)⑼庠O或者附加的HUB同它相連,而且這些附加的HUB能夠連接另外的外部設備以及下層HUB。USB最多可以支持5個HUB層以及127個外設。下圖中描述了總線的物理拓撲結構。圖3.1 USB總線拓撲結構3.2.1 USB設備USB設備中包括HUB與功能設備,而且功能設備又能夠細分為定位設備與字符設備等等。為達到進一步敘述,給出端點(endpoint)與管道(pipe)的觀念。端點:每一個USB設備在主機看來就是一個端點的集合,主機只能通過端點與設備進行通訊,以使用設備的功能。每一個端點實際上就是一個一定大小的數(shù)據(jù)緩沖區(qū),這些端點在設備出廠時就已經(jīng)定義好了。在USB系統(tǒng)中,每一個端點都有唯一的地址,這是由設備地址和端點號給出的。每個端點都有一定的特性。其中包括:傳輸方式、總線訪問頻率、帶寬、端點號、數(shù)據(jù)包的最大容量等等。除端點0外,其它端點必須在設備配置后才能生效。 端點0通常為控制端點,用于設備初始化參數(shù)等,端點1、2等一般用作數(shù)據(jù)端點,存放主機與設備間往來的數(shù)據(jù)。 管道:一個USB管道是驅(qū)動程序的一個數(shù)據(jù)緩沖區(qū)與一個外設端點的連接,它代表了一種在兩者之間移動數(shù)據(jù)的能力。一旦設備被配置,管道就存在了。管道由兩種類型,數(shù)據(jù)流管道(其中的數(shù)據(jù)沒有USB定義的結構)與消息管道(其中的數(shù)據(jù)必須由USB定義的結構)。管道只是一個邏輯上的概念。 所有的設備必須支持端點0以作為設備的控制管道。通過控制管道可以獲取完全描述USB設備的信息,包括:設備類型、電源管理、配置、端點描述等等。只要設備連接到USB上并上電,端點0就可以被訪問,與之對應的控制管道就存在了。一個USB設備可以分為三個層。最底層是總線接口,用來發(fā)送與接收包。中間層處理總線接口與不同的端點之間的數(shù)據(jù)流通。一個端點是數(shù)據(jù)最終的使用者或提供者,它可以看作是數(shù)據(jù)源或是數(shù)據(jù)接收端。最上層就是USB設備所提供的功能,比如鼠標或鍵盤等。圖3.2.1 USB設備層次結構3.2.2 USB HUBUSB結構中HUB是一個關鍵,它提供了附加的USB節(jié)點,USB節(jié)點被又稱為端口。HUB能夠檢測出每一個下行端口的狀態(tài),而且能夠給下端的設備提供電源。下圖描述了一個非常典型的HUB結構。圖3.2.2 USB HUB3.2.4 設備電源 USB設備的電源能夠由USB總線供給,而且也能夠自備電源。一個USB設備能夠有這兩種供電方式,但同一時間只能為一種供電方式。這兩種供電方式是可以進行切換的。3.2.5 設備的掛起為了節(jié)電,當設備在指定的時間內(nèi)沒有總線傳輸,USB設備自動進入掛起狀態(tài)。如果設備所接的HUB的端口被禁止了,設備也將進入掛起狀態(tài)(稱之為選擇掛起)。當然主機也可以進入掛起狀態(tài)。 USB設備當總線活動時,就會離開掛起狀態(tài)。一個設備也可以通過電信號來遠程喚醒進入掛起狀態(tài)的主機。這個能力是可選的,如果一個設備具有這個能力,主機有能力禁止或允許使用這種能力。3.3 USB主機USB主機在USB系統(tǒng)中處于中心地位,能夠?qū)SB及其連接的設備有著特殊的任務。主機控制著全部對USB的訪問,一個外部設備只能有主機同意才能夠有訪問總線的權利。主機也同時檢測著USB的結構。USB主機有三層結構:設備驅(qū)動程序、USB系統(tǒng)軟件、USB主控制器(主機的總線接口)。另外,還有兩個軟件接口:主機控制驅(qū)動(HCD)接口,USB驅(qū)動(USBD)接口。圖3.3 主機的層次結構3.4 USB設備接口的固件程序設計在整個USB接口設計中USB設備接口固件的開發(fā)具有舉足輕重的地位。設備接口硬件需要軟件的協(xié)同來完成相應的工作,然而在固件的編制上不會受到具體的微處理器種類限制。相對于開發(fā)者來說,接口硬件在工作上具有著不可見性,能夠看到的的是接口固件在控制整個接口時所做的工作。完全的中斷驅(qū)動由PDIUSBD12的固件設計成,當一個CPU處理前臺任務的時候,后臺進行的是USB的傳輸。這也就能夠確保了最好的傳輸速率與更好的軟件結構,而且同時也能夠簡化了編程與調(diào)試。事件標志“EPPFLAGS”和Setup包數(shù)據(jù)緩沖區(qū)“CONROL_XFER”來實現(xiàn)是由后臺ISR(中斷服務程序)和前臺主程序循環(huán)之間的數(shù)據(jù)交換,其原理如圖3.4.1所示圖3.4.1 前后臺工作原理對于這種結構,主循環(huán)就可以不用來考慮數(shù)據(jù)的來源,它只要檢查循環(huán)緩沖區(qū)中需要處理的新數(shù)據(jù)。這樣,主循環(huán)就能夠?qū)W⒂糜跀?shù)據(jù)的處理,而ISR能可以以最大可能的速度來進行數(shù)據(jù)的傳輸。 D12固件在編寫成分層結構簡潔且能夠進行更加簡單的修改和測試。不僅增加了程序的通用性,同時也增加了代碼的可讀性。固件的積木式結構如圖3.4.2所示.圖3.4.2 固件結構和數(shù)據(jù)流向各模塊程序的分工如下:硬件提取層:對單片機的I/O口、數(shù)據(jù)總線等硬件接口進行操作。PDIUSBD12命令接口:對PDIUSBD12器件進行操作的模塊子程序集。中斷服務程序:當PDIUSBD12向單片機發(fā)出中斷請求時,讀取PDIUSBD12的中斷傳輸來的數(shù)據(jù),并設定事件標志“EPPFLAGS”和Setup包數(shù)據(jù)緩沖區(qū)“CONROL_XFER”傳輸給主循環(huán)程序。標準請求處理程序: 對USB的標準設備請求進行處理。主循環(huán)程序:發(fā)送USB請求、處理USB總線事件和用戶功能處理等。廠商請求處理程序:對用戶添加的廠商請求進行處理。3.5 USB數(shù)據(jù)流圖3.5.1 USB數(shù)據(jù)流過程從邏輯上講,USB數(shù)據(jù)的傳輸是通過管道進行的。USB系統(tǒng)軟件通過缺省管道(與端點0相對應)管道設備,設備驅(qū)動程序通過其它的管道來管理設備的功能接口。實際的數(shù)據(jù)傳輸過程是這樣的:設備驅(qū)動程序通過對USBD接口(USB driver interface)的調(diào)用發(fā)出輸入輸出請求(IRP, I/O Request Packet);USB驅(qū)動程序接到請求后,調(diào)用HCD接口(host controller driver interface),將IRP轉化為USB的傳輸(transfer),一個IRP可以包含一個或多個USB傳輸;然后HCD將USB傳輸分解為總線操作(transaction),由主控制器以包(packet)的形式發(fā)出。需要注意的是:所有的數(shù)據(jù)傳輸都是由主機開始的,任何外設都無權開始一個傳輸。IRP是由操作系統(tǒng)定義的,而USB傳輸與總線操作是USB規(guī)范定義的。為了進一步說明USB傳輸,這里引出幀(frame)的概念。 幀:USB總線將1ms定義為一幀,每幀以一個SOF包為開始,在這1ms里USB進行一系列的總線操作。引入幀的概念主要是為了支持與時間有關的總線操作。為了滿足不同外設和用戶的要求,USB提供了四中傳輸方式:控制傳輸;同步傳輸;中斷傳輸;批傳輸。它們在數(shù)據(jù)格式、傳輸方向、數(shù)據(jù)包容量限制、總線訪問限制等方面有著各自不同的特征:控制傳輸(Control Transfer)1. 通常用于配置、命令、狀態(tài)等情形;2. 其中的設置操作(setup)和狀態(tài)操作(status)的數(shù)據(jù)包具有USB定義的結構,因此控制傳輸只能通過消息管道進行;3. 支持雙向傳輸;4. 對與高速設備,允許數(shù)據(jù)包最大容量為8,16,32或64字節(jié),對于低速設備只有8字節(jié)一種選擇;5. 端點不能指定總線訪問的頻率和占用總線的時間,USB系統(tǒng)軟件會做出限制;6. 具有數(shù)據(jù)傳輸保證,在必要時可以重試。同步傳輸(Isochronous Transfer)1. 是一種周期的、連續(xù)的傳輸方式,通常用于與時間有密切關系的信息的傳輸;2. 數(shù)據(jù)沒有USB定義的結構(數(shù)據(jù)流管道);3. 單向傳輸,如果一個外設需要雙向傳輸,則必須使用另一個端點;4. 只能用于高速設備,數(shù)據(jù)包的最大容量可以從0到1023個字節(jié);5. 具有帶寬保證,并且保持數(shù)據(jù)傳輸?shù)乃俾屎愣ǎ總€同步管道每幀傳輸一個數(shù)據(jù)包);6. 沒有數(shù)據(jù)重發(fā)機制,要求具有一定的容錯性;7. 與中斷方式一起,占用總線的時間不得超過一幀的90。中斷傳輸(Interrupt Transfer)1. 用于非周期的、自然發(fā)生的、數(shù)據(jù)量很小的信息的傳輸,如鍵盤、鼠標等。2. 數(shù)據(jù)沒有USB定義的結構(數(shù)據(jù)流管道);3. 只有輸入這一種傳輸方式(即外設到主機);4. 對于高速設備,允許數(shù)據(jù)包最大容量為小于或等于64字節(jié),對于低速設備只能小于或等于8字節(jié);5. 具有最大服務周期保證,即在規(guī)定時間內(nèi)保證有一次數(shù)據(jù)傳輸;6. 與同步方式一起,占用總線的時間不得超過一幀的90;7. 具有數(shù)據(jù)傳輸保證,在不要時可以重試。批傳輸(Bulk Transfer)1. 用于大量的、對時間沒有要求的數(shù)據(jù)傳輸;2. 數(shù)據(jù)沒有USB定義的結構(數(shù)據(jù)流管道);3. 單向傳輸,如果一個外設需要雙向傳輸,則必須使用另一個端點;4. 只能用于高速設備,允許數(shù)據(jù)包最大容量為8,16,32或64字節(jié);5. 沒有帶寬的保證,只要有總線空閑,就允許傳輸數(shù)據(jù)(優(yōu)先級小于控制傳輸);6. 具有數(shù)據(jù)傳輸保證,在必要時可以重試,以保證數(shù)據(jù)的準確性。圖3.5.2 USB數(shù)據(jù)傳輸4 應用的協(xié)議4.1 Mass Storage 協(xié)議USB協(xié)議可以在啟動或者當設備插入系統(tǒng)時對設備進行備置。USB設備被分成以下幾類:通訊設備(Communication devices)、人機輸入(Human input)、顯示器(Monitors)、音頻設備(Audio)、海量存儲(Mass storage)。特定類(class)的設備又能夠劃分成子類(subclass),劃分子類的后軟件就能夠搜索總線而且可以選擇所有它能夠可以支持的設備。每一個設備可以有一個或者多個配置(Configuration),配置可以用來定義設備的功能。如果其中的某個設備具有幾種不同的功能,那么每個功能都只需要一個配置。配置(configuration)是接口(interface)的集合。接口指定設備中的哪些硬件和USB交換數(shù)據(jù)。而每一個和USB交換數(shù)據(jù)的硬件就叫做一個端點(endpoint)。所以,接口就是端點的集合。在USB的設備類別定義(USB Device Class Definitions)定義特定類或者子類中的設備又需要提供的缺省配置、端點和接口。描述符(descriptor)能夠描述配置、設備、接口和端點的一般信息。下圖為USB 描述符的層次結構。圖4.1.1 USB描述符層次結構USB(Host)唯一通過描述符了解設備的有關信息,根據(jù)這些信息建立起通信,在這些描述符中,規(guī)定了設備所使用的協(xié)議、端點情況等。因此,正確地提供描述符,是USB設備正常工作的先決條件。USB海量存儲設備(USB Mass Storage Class)包括General Mass Storage Subclass、CDROM、Tape、Solid State。Mass Storage Class只需要支持一個接口,即數(shù)據(jù)(Data)接口,選擇缺省配置時此接口即被激活。數(shù)據(jù)接口允許與設備之間進行數(shù)據(jù)傳輸,它提供三個端點:Bulk Input 端點、Bulk Output 端點和中斷端點。通用海量存儲設備(General Mass Storage Device)是隨機存取、基于塊扇區(qū)存儲的設備。它只能存儲和取回來自CPU 的數(shù)據(jù)。這種設備的接口遵循SCSI2標準的直接存取存儲設備(Direct Access Storage Device)協(xié)議。USB設置上的介質(zhì)使用與SCSI2設備相同的邏輯塊(logical blocks)方式尋址。下面介紹基于Bulk Only(批量傳輸)模式的Mass Storage 設備的描述符:每個USB設備都必須有一個設備描述符8。圖4.1.2 設備(Device)描述符圖4.1.3 配置(Configuration)描述符圖4.1.4接口(Interface)描述符圖4.1.5 BulkIn 端點描述符圖4.1.6 BulkOut 端點描述符圖4.1.7 bInterfaceSubClass 處的工業(yè)標準命令塊代碼圖4.1.8 Mass Storage 傳輸協(xié)議4.2 BulkOnly傳輸協(xié)議設備插入到USB后,USB即對設備進行搜索,并要求設備提供相應的描述符。在USB Host 得到上述描述符后,即完成了設備的配置,識別出為BulkOnly的Mass Storage設備,然后即進入BulkOnly傳輸方式。在此方式下,USB與設備間的所有數(shù)據(jù)均通過BulkIn和BulkOut來進行傳輸,不再通過控制端點傳輸任何數(shù)據(jù)。在這種傳輸方式下,有三種類型的數(shù)據(jù)在USB和設備之間傳送,CBW、CSW 和普通數(shù)據(jù)。CBW(Command Block Wrapper,即命令塊包)是從USB Host發(fā)送到設備的命令,命令格式遵從接口中的bInterfaceSubClass 所指定的命令塊,這里為SCSI傳輸命令集。USB設備需要將SCSI命令從CBW中提取出來,執(zhí)行相應的命令。完成以后,向Host發(fā)出反映當前命令執(zhí)行狀態(tài)的CSW(Command Status Wrapper,即命令狀態(tài)包),Host根據(jù)CSW來決定是否繼續(xù)發(fā)送下一個CBW或是數(shù)據(jù)。Host要求USB設備執(zhí)行的命令可能為發(fā)送數(shù)據(jù),則此時需要將特定數(shù)據(jù)傳送出去,完畢后發(fā)出CSW,以使Host進行下一步的操作。USB設備所執(zhí)行的操作可用下圖描述:ReadyCommandTransport(CBW)Date-in(to host)Date-out(From host)StatusTransport(CSW)圖4.2.1USB Host 按照下面的格式向設備端發(fā)送CBW,圖4.2.2 CBW下面是CSW 的格式和定義:圖4.2.3 CSWdCSWSignature 的內(nèi)容為53425355h , dCSWTag 即為dCBWTag 的內(nèi)容,dCSWDataResidue 還需要傳送的數(shù)據(jù),此數(shù)據(jù)根據(jù)dCBWDataTransferLength本次已經(jīng)傳送的數(shù)據(jù)得到。Host 端根據(jù)此值決定下一次CBW 的內(nèi)容,如果沒有完成則繼續(xù);如果命令正確執(zhí)行,bCSWStatus 返回0 即可。按這個規(guī)則組裝好CSW 后,通過BulkIn 端點將其發(fā)出即可4.3 SCSI指令集Bulk-Only 的CBW 中的CBWCB 中的內(nèi)容即為如下格式的命令塊描述符(CommandBlock Descriptor)。SCSI-2 有三種字長的命令,6 位、10 位和12 位,Microsoft Windows 環(huán)境下支持12 位字長的命令。圖4.3.1 12 位字長的SCSI 命令Operation Code是操作代碼,表示特定的命令。高3位為Group Code,共有8 種組合,即8個組,低5五位為Command Code,可以有32種命令。Logicol unit Number是為了兼容SCSI1而設的。Logical block address為高位在前,低位在后的邏輯塊地址,即扇區(qū)地址。Transfer length為需要從邏輯塊地址處開始傳輸?shù)纳葏^(qū)數(shù)(比如在Read 和Write 命令中);Parameter list length為需要傳輸?shù)臄?shù)據(jù)長度(比如在Mode Sense 命令中);Allocation length為初始程序為返回數(shù)據(jù)所分配的最大字節(jié)數(shù),此值可以為零,表示不需要傳送數(shù)據(jù)。SCSI指令集的Direct Accesss類型存儲介質(zhì)的傳輸命令有許多,所幸運的是Mass Storage協(xié)議只用到了其中的一些。下面黑體部分即為需要USB設備作出響應的請求,一般是要求向Host發(fā)送一些有關設備的數(shù)據(jù):圖4.3.2對于不同的命令,其命令塊描述符略有不同,其要求的返回內(nèi)容也有所不同,根據(jù)相應的文檔,可以對每種請求作出適當?shù)幕貞1热?,下面是INQUIRY 請求的命令塊描述符和其返回內(nèi)容的數(shù)據(jù)格式:圖4.3.3 INQUIRY命令塊描述符圖4.3.4 INQUIRY命令返回數(shù)據(jù)格式Host 會依次發(fā)出INQUIRY、Read Capacity、UFI Mode Sense 請求,如果上述請求的返回結果都正確,則Host 會發(fā)出READ 命令,讀取文件系統(tǒng)0 簇0 扇區(qū)的MBR 數(shù)據(jù),進入文件系統(tǒng)識別階段。對于PREVENT-ALLOW MEDIUM REMOVAL 和TEST UNIT READY 命令,只需直接返回CSW 即可,對于后者,由于Flash 盤總是處于READY 狀態(tài),故可直接返回CSW。5 程序的實現(xiàn)5.1主循環(huán)MAINLOOP.C主循環(huán)的的檢查開始表示子程序進一步的處理。MCU一但通電那就需要初始化I/O端口、定時器和中斷服務程序。然后,MCU將會重新連接USB,其中包含SOFT CONNET 寄存器設置ON,這個工程很重要。下圖為主循環(huán)的流程圖:Yes主循環(huán)開始初始化I/O端口、定時器和中斷,重新連接到USB總線循環(huán)USB中斷中斷服務程序No圖5.1主循環(huán)5.2中斷服務程序D12產(chǎn)生的中斷就是中斷服務程序代碼處理,中斷服務程序把數(shù)據(jù)從D12的內(nèi)FIFO拿回到CPU存儲器,同時也要建立正確的事件標志,用來通知對應的子程序來進行處理。下圖是中斷服務程序的流程圖:中斷服務讀取D12中斷寄存器控制輸入控制輸出端點1輸入端點1輸出端點2輸入端點2輸出DMA傳輸結束掛起改變總線復位中斷服務結束控制端點發(fā)送數(shù)據(jù)處理控制端點接收數(shù)據(jù)處理DMA傳輸技術處理端點2接收數(shù)據(jù)處理端點2發(fā)送數(shù)據(jù)處理端點1發(fā)送數(shù)據(jù)處理端點1接收數(shù)據(jù)處理設置掛起改變標志設置總線復位標志NoNoNoNoNoNoNoNoNoYesYesYesYesYesYesYesYesYes圖5.2中斷服務程序流程5.3控制端點處理 SETUP階段開始就是控制傳輸?shù)臉酥?,然后進行的就是可選的DATA階段,在SETUS階段結束,固件的控制傳輸就是使用這三個狀態(tài)來正確處理。下圖是控制端點處理程序的流程圖:控制輸出入口讀端點處理狀態(tài)清中斷標志SETUP包?SETUP處理程序控制輸出子程序結束NoYes圖5.3.1 控制輸出程序流程圖控制輸入入口清中斷標志位數(shù)據(jù)提交處理控制輸入子程序結束圖5.3.2 控制輸入程序流程圖5.4普通端點處理 從主機接收數(shù)據(jù)包是普通輸出端點(本項目中為BULK_OUT端點)配置。MCU從主機接收輸出中斷標志時,清零D12中斷位。在清零緩沖區(qū)選擇端點,然后MCU需要確認數(shù)據(jù)的長度而且同時把數(shù)據(jù)讀出來,之后再進行數(shù)據(jù)處理子程序。普通輸入端點(本項目中為BULK_IN端點)的中斷,只需要讀取端點號的最后處理狀態(tài)寄存器來清除中斷寄存器的相應位,同時把狀態(tài)清零就可。輸入端點中斷是發(fā)送完數(shù)據(jù)之后才產(chǎn)生的,如果還有數(shù)據(jù)要發(fā)送時,就可以在中斷程序程序里接著繼續(xù)發(fā)送。下圖為普通端點處理程序流程圖:普通輸入入口清中斷標志讀取緩沖區(qū)數(shù)據(jù)輸入數(shù)據(jù)接口子程序普通輸入子程序結束普通輸出入口清中斷標志讀取緩沖區(qū)數(shù)據(jù)數(shù)據(jù)處理確認數(shù)據(jù)長度并讀出普通輸出子程序結束圖5.4 普通端點處理程序流程圖5.5數(shù)據(jù)提交函數(shù)定義了數(shù)據(jù)提交函數(shù)在中斷服務程序里。同時子程序負責把數(shù)據(jù)寫入端點緩沖區(qū),之后提交給主機。下圖是數(shù)據(jù)提交函數(shù)程序流程圖:程序入口確定傳輸數(shù)據(jù)長度選擇端點寫指定長度的數(shù)據(jù)到緩沖區(qū)緩沖區(qū)數(shù)據(jù)提交主機程序結束圖5.5 數(shù)據(jù)提交函數(shù)程序流程圖六 固件調(diào)試6.1固件調(diào)試相對與設備的程序進行調(diào)試是USB通訊程序項目開發(fā)過程中最難的部分。同時USB協(xié)議有嚴格的時間限制,這就使得程序得在一定的時間內(nèi)對某些請求或者狀態(tài)進行處理,否則,USB將會無法正常的工作。USB 設備端的固件分以下幾個層次:文件模塊名稱主要功能Main.c:進行各種初始化操作、寄存器設置、中斷設置Fat16.c flash.c :負責按照Fat16 文件系統(tǒng)的組織向Flash 中寫入數(shù)據(jù)或是從Flash: 中讀出數(shù)據(jù)Chap9.c bulk-only.c:完成不同的中斷請求,Chap9 完成來自端點0 的USB標準設備請求,Bulk-Only 完成來自批量模式端點的Mass Storage Bulk-Only 傳輸中斷請求Isr.c :中斷服務程序,負責將不同類型的中斷轉向一同的地方D12ci.c:函數(shù)化的D12 的命令集合,可以直接調(diào)用這些函數(shù),而不必再自己根據(jù)手冊查每個命令的代碼另外,此文件中包括一些與硬盤有關的地址定義6.2 USB器件的檢查第一:判斷USB芯片是否已經(jīng)工作。第二:使用SOFTCONNECT,則在主程序進行軟件連接后,如果GL_N燈閃爍幾下,則PC機上出現(xiàn)未知設備,則說明USB進行軟連接正常,也說明芯片已經(jīng)工作了。6.3提供描述符1GetDeviceDescriptor。主機主要對Length 域感興趣,發(fā)送內(nèi)容一定要正確,特別是第 2 字節(jié)type 一定為0x01,即Device;否則,主機將不響應,或 者再重復2 次后放棄。這時由于主機對Device 的描述符將有多長實際上都不知道,所以這個步驟只是試探性的,目的是得到真正長度,第三步中才正而巴經(jīng)地讀取DeviceDescriptor。2SetAddress。一般為02 或03。3連續(xù)3 次GetDeviceDescriptor,讀取全部設備描述符,一般為 18 B,分為多次傳輸。如果不正確,主機將不響應或重復2 次后放棄。4GetConfigDescriptor。注意第2 字節(jié)一定為0x02,即config 。這部分內(nèi)容包括Configuration Descriptor、Interface Descriptor 和所有要用到的端點的EndPooint Descriptor。5GetStringDescriptor(可能沒有),根據(jù)在設備描述符中是否有 String 索引而定。一般先讀取LanguageID,再讀取product string。6讀取全部ConfigDescriptor,次數(shù)根據(jù)描述符的大小決定(端點個數(shù)不同,描述符大小不同),如 果不正確,主機將不響應或再重復2 次后放棄。7如果以上步驟都正確,主機將找到新設備,提示安裝驅(qū)動程序;否則找到未知設備,不可用。安裝驅(qū)動程序后,以后的每次PlugIn,枚舉次序與以上步驟略有不同,之后會有SetConfiguration、GetConfiguration 和GetInterface 等調(diào)用。6.4 BULK_ONLY傳輸協(xié)議命令處理當USB總線數(shù)據(jù)檢測軟件檢測到數(shù)據(jù)55 53 42 53時,說明已經(jīng)開始了BULK_ONLY傳輸階段。就可以不用太多考慮USB中斷、端點之類的問題,到此階段后只有兩個端點工作,即Bulk_In和Bulk_Out端點,IN用于設備向主機發(fā)送數(shù)據(jù),OUT用于主機向設備發(fā)送數(shù)據(jù)。Bulk_In端點的處理比較簡單,只是在需要的時候,設備將要發(fā)往主機的數(shù)據(jù)通過此端點送出即可,如果數(shù)據(jù)一次不能發(fā)完,就把設置標志位,通過發(fā)送中斷的產(chǎn)生可以實現(xiàn)連續(xù)發(fā)送。Bulk_Out端點的情況比較復雜一些,要判斷收到的是協(xié)議內(nèi)容還是數(shù)據(jù),如果是協(xié)議內(nèi)容,就要對協(xié)議包進行解析,根據(jù)協(xié)議中的內(nèi)容得到SCSI命令,然后再根據(jù)這些命令處理相應的請求。下面為BULK端點處理的流程圖:清中斷寄存器標志是否正傳數(shù)據(jù)繼續(xù)傳送數(shù)據(jù)向主機發(fā)送CSWYesNo 6.4 Bulk_In端點處理流程圖清中斷寄存器標志收到的是數(shù)據(jù)繼續(xù)傳送數(shù)據(jù)解析命令并執(zhí)行命令YesNo圖6.5 Bulk_Out端點處理流程圖6.5 SCSI 命令集在SCSI 命令集的處理中,比較難處理的是WRITE 和READ 比較難處理。因為Host傳送數(shù)據(jù)至少一次為512 個字節(jié),不管是讀還是寫,都需要一次傳送512 個字節(jié),但是批量傳輸端點一次只能傳輸64 個字節(jié),即要傳8 次才可以傳完。因此,在向Host 傳送數(shù)據(jù)時,設置傳輸標志,當Device 的發(fā)送中斷出現(xiàn)后,判斷此傳輸標志,如果正處于傳輸狀態(tài),則繼續(xù)傳輸,直至需要的數(shù)據(jù)傳輸完畢,再傳輸CSW。在從Host 接收數(shù)據(jù)時,也設置接收標志,當收到WRITE 命令后,即進入此狀態(tài),直至從Host 端接收數(shù)據(jù)完畢,再將數(shù)據(jù)存入Flash 中。Host傳送數(shù)據(jù)Device發(fā)送中斷傳送CSW傳輸完畢圖6.5.1 SCSI傳送數(shù)據(jù)Host接收數(shù)據(jù)Write命令Host端接收完畢數(shù)據(jù)存入Flash中收到接收標志圖6.5.2 SCSI接收數(shù)據(jù)本系統(tǒng)開發(fā)的U盤的存儲空間使用的是4 MB的RAM空間。當U盤插入主機時,通過操作系統(tǒng)的格式化操作把該空間格式化成FAT系統(tǒng),然后主機就可以在該存儲空間上進行文件的寫入與讀取。6.6 系統(tǒng)調(diào)試測試1. 嵌入式軟件的加載界面圖6.6.12. U盤設備控制傳輸階段的配置信息通信過程,包括設備描述符、配置描述符和字符串描述符的枚舉、設置USB設備地址等圖6.6.23. 基于BulkOnly的海量存儲協(xié)議的調(diào)試信息輸出圖6.6.34. 本論文所設計的U盤的格式化界面圖6.6.45. U盤中文件的拷貝與文件夾的創(chuàng)建圖6.6.5七 總結在此項目開發(fā)過程中,我從中學到了許多書本上學不到的東西,尤其是在動手和實際應用的能力得到強化。通過這次USB通信程序開發(fā),包含嵌入式程序、單片機,讓我覺得C語言編程的熟練城區(qū)是項目開發(fā)的重點。許多出現(xiàn)的問題其實都是原理上非常承受的東西,從資料中就能夠找到。而我們要做的就是把書本上的原理在特定的平臺上實現(xiàn)就可以了。原理是比較抽象,比較粗略的,不需要精確;而在真正使用代碼實現(xiàn)時,那就是需要具體、詳細、精確、一點誤差都不能有,因此,對編程語言的熟練就可以達到事半功倍,提高效率。動手實際的運用和開發(fā)就是學習的好機會,只有真正經(jīng)過了開發(fā)過程以后,你才會有更加深刻的體會。在項目開發(fā)過程中,實際能力和經(jīng)驗的增長是相輔相成的。有些內(nèi)容是要憑經(jīng)驗,理論上的東西,是別人總結出來的東西,非常的抽象,跟實際運用中相比往往省略了許多細節(jié),而項目開發(fā)有時候就是根據(jù)抽象的理論,來重新實現(xiàn)細節(jié)。一個問題在一次查找原因的過程中不清楚,那么你在做第二次就有一定的思路了,也就能夠很快的找到問題的所在。在開發(fā)過程中,學到的不僅是將理論的東西運用到實際中,同時也是排找問題思路的建立。 參考文獻1ARM公司.ARM Architeture Reference Manuals. 20002ARM 公司.The ARM-THUMB Procedure Call Standards. 20003馬忠梅,馬廣云.ARM嵌入式處理器結構與應用基礎m.北京:北京航空航天大學出版色,20024周立功.PDIUSBD12 USB 固件編程與驅(qū)動開發(fā)M.北京:北京航空航天大學出版社,2003.2 5沈文,Eagle lee.AVR 單片機C語言開發(fā)入門指導M.北京:清華大學出版社,2003 6王士元.C高級實用程序設計M.北京:清華大學出版社,1996 7譚浩強.C程序設計M.北京:清華大學出版社,1996 8Atmel Corporation.AVR Instruction Set Nomenclature:Status Register(SREG); 9Registers and Operands.http:/www.atmel.com10SAMSUNG Electronics CO.LTD. K9F5608U0A-YCB0,K9F5608U0A-YIB0. http:/www.intl.samsungsemi.com/Memory/Flash/datasheets.htmlU-disk design based on ARMFujian Normal University, Fujian Institute of Technology 2006 Network Engineering122622006071 JianPing Xie Tutor Xiao LinAbstract: USB (Universal Serial Bus, Universal Serial Bus) is a new type of computer interface technology that allows computers to link with external devices more convenient and fast. Now, many devices are beginning to use USB interface to develop, such as the keyboard. Mouse. Mobile hard disk. Mobile hard disk. Printer. Digital cameras. In practice, more and more developers start using USB technology, such as data collection, USB design and application development has become a very modern electronic design is to be part of.Key words: D12, USB_HUB, ARM, Mass Storage Protocol. FAT area. Summary33
收藏
編號:2680158
類型:共享資源
大?。?span id="xfldnzt" class="font-tahoma">940.67KB
格式:ZIP
上傳時間:2019-11-28
15
積分
- 關 鍵 詞:
-
基于
arm
設計
- 資源描述:
-
基于ARM的U盤設計,基于,arm,設計
展開閱讀全文
- 溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
裝配圖網(wǎng)所有資源均是用戶自行上傳分享,僅供網(wǎng)友學習交流,未經(jīng)上傳用戶書面授權,請勿作他用。