




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、 目錄第一章 緒論 (11.1PC接口簡介 11.2USB接口分析11.3USB器件的選擇 11.4M ASS S TORAGE協(xié)議與FAT16文件系統(tǒng) 2第二章 USB總線結(jié)構(gòu) (32.1總線拓撲結(jié) 32.2USB設備 32.3USB主機 62.4USB數(shù)據(jù)流72.5USB的端點9第三章 協(xié)議 (123.1M ASS S TORAGE 協(xié)議123.2B ULK-O NLY傳輸協(xié)議163.3SCSI指令集183.4FAT16文件系統(tǒng)21第四章 程序?qū)崿F(xiàn)與調(diào)試 (294.1固件程序的實現(xiàn)294.2固件調(diào)試42 結(jié)論 (46致謝 (47參考文獻 (48附錄 (49附錄A USB接口芯片命令總匯49
2、A1.初始化命令 (50A2.數(shù)據(jù)流命令 (54A3.數(shù)據(jù)流命令 (59附錄B U盤固件程序源碼清單60 第一章 緒論1.1 PC接口簡介1.2 USB 接口分析通用串行總線(Universal Serial Bus USB,是一種快速、靈活的總線接口。與其它通信接口比較,USB接口的最大特點是易于使用,這也是USB的主要設計目標。作為一種高速總線接口,USB適用于多種設備,如數(shù)碼相機、MP3播放機、高速數(shù)據(jù)采集設備等。易于使用還表現(xiàn)在USB接口支持熱插拔,并且所有的配置過程都由系統(tǒng)自動完成,無需用戶干預。USB接口支持1.5Mb/s(低速、12Mb/s(全速和高達480Mb/s(USB 2.
3、0規(guī)范的數(shù)據(jù)傳輸速率,扣除用于總線狀態(tài)、控制和錯誤監(jiān)測等的數(shù)據(jù)傳輸,USB的最大理論傳輸速率仍達1.2Mb/s 或9.6Mb/s,遠高于一般的串行總線接口。USB接口芯片價格低廉,一個支持USB 1.1 規(guī)范 的USB接口芯片價格大多在人民幣(2004年1530元之間,這也大大促進USB設備的開發(fā)與應用。1.3 USB 器件的選擇在進行一個USB設備開發(fā)之前,首先要根據(jù)具體使用要求選擇合適的USB控制器。目前,市場上供應的USB控制器主要有兩種:帶USB接口的單片機(MCU或純粹的USB接口芯片。帶USB接口的單片機從應用上又可以分成兩類,一類是從底層設計專用于USB控制的單片機另一類是增加了
4、USB接口的普通單片機,如Cypress公司的EZ-USB(基于8051,選擇這類USB控制器的最大好處在于開發(fā)者對系統(tǒng)結(jié)構(gòu)和指令集非常熟悉,開發(fā)工具簡單,但對于簡單或低成本系統(tǒng)。但價格因素也是在實際選擇過程中需要考慮的因素。純粹的USB 接口芯片僅處理USB通信,必須有一個外部微處理器來進行協(xié)議處理和數(shù)據(jù)交換。典型產(chǎn)品有Philips公司的PDIUSBD11(I2C接口、PDIUSBD12(并行接口,NS公司的USBN9603/9604(并行接口,NetChip公司的NET2888 等。USB接口芯片的主要特點是價格便宜、接口方便、可靠性高,尤其適合于產(chǎn)品的改型設計(硬件上僅需對并行總線和中
5、斷進行改動,軟件則需要增加微處理器的USB中斷處理和數(shù)據(jù)交換程序、PC機的USB接口通信程序,無需對原有產(chǎn)品系統(tǒng)結(jié)構(gòu)作很大的改動。1.4 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 Blo
6、ck 4.USB Mass Storage Class UFI Command Specification。前兩個子規(guī)范定義了數(shù)據(jù)/命令/狀態(tài)在USB上的傳輸方法。Bulk- Only傳輸規(guī)范僅僅使用Bulk端點傳送數(shù)據(jù)/命令/狀態(tài),CBI傳輸規(guī)范則使用Control/Bulk/Interrupt三種類型的端點進行數(shù)據(jù)/命令/狀態(tài)傳送。后兩個子規(guī)范則定義了存儲介質(zhì)的操作命令。ATA命令規(guī)范用于硬盤,UFI 命令規(guī)范是針對USB移動存儲。Microsoft Windows中提供對Mass Storage協(xié)議的支持,因此USB移動設備只需要遵循Mass Storage協(xié)議來組織數(shù)據(jù)和處理命令,即可
7、實現(xiàn)與PC機交換數(shù)據(jù)。而Flash的存儲單元組織形式采用FAT16文件系統(tǒng),這樣,就可以直接在Windows的瀏覽器中通過可移動磁盤來交換數(shù)據(jù)了,Windows負責對FAT16文件系統(tǒng)的管理,USB設備不需 要干預FAT16文件系統(tǒng)操作的具體細節(jié)。第二章 USB總線結(jié)構(gòu)2.1 總線拓撲結(jié)USB總線的物理連接是一種有層次性的星型結(jié)構(gòu),集線器(HUB是每個星型結(jié)構(gòu)的中心。PC機就是主機和根HUB,用戶可以將外設或附加的HUB與之相連,這些附加的HUB可以連接另外的外設以及下層HUB。USB支持最多5個HUB層以及127個外設。從下圖描述了總線的這種物理拓撲結(jié)構(gòu)。 圖2.1 USB總線拓撲結(jié)構(gòu)2.2
8、 USB設備USB設備包括HUB和功能設備,而功能設備又可以細分為定位設備、字符設備等等。為了進一步敘述,這里給出端點(endpoint和管道(pipe的概念。端點:每一個USB設備在主機看來就是一個端點的集合,主機只能通過端點與設備進 行通訊,以使用設備的功能。每一個端點實際上就是一個一定大小的數(shù)據(jù)緩沖區(qū),這些端點在設備出廠時就已經(jīng)定義好了。在USB系統(tǒng)中,每一個端點都有唯一的地址,這是由設備地址和端點號給出的。每個端點都有一定的特性。其中包括:傳輸方式、總線訪問頻率、帶寬、端點號、數(shù)據(jù)包的最大容量等等。除端點0外,其它端點必須在設備配置后才能生效。端點0通常為控制端點,用于設備初始化參數(shù)等
9、,端點1、2等一般用作數(shù)據(jù)端點,存放主機與設備間往來的數(shù)據(jù)。管道:一個USB管道是驅(qū)動程序的一個數(shù)據(jù)緩沖區(qū)與一個外設端點的連接,它代表了一種在兩者之間移動數(shù)據(jù)的能力。一旦設備被配置,管道就存在了。管道由兩種類型,數(shù)據(jù)流管道(其中的數(shù)據(jù)沒有USB定義的結(jié)構(gòu)與消息管道(其中的數(shù)據(jù)必須由USB定義的結(jié)構(gòu)。管道只是一個邏輯上的概念。所有的設備必須支持端點0以作為設備的控制管道。通過控制管道可以獲取完全描述USB設備的信息,包括:設備類型、電源管理、配置、端點描述等等。只要設備連接到USB 上并上電,端點0就可以被訪問,與之對應的控制管道就存在了。一個USB設備可以分為三個層。最底層是總線接口,用來發(fā)送
10、與接收包。中間層處理總線接口與不同的端點之間的數(shù)據(jù)流通。一個端點是數(shù)據(jù)最終的使用者或提供者,它可以看作是數(shù)據(jù)源或是數(shù)據(jù)接收端。最上層就是USB設備所提供的功能,比如鼠標或鍵盤等。 圖2.2 USB設備層次結(jié)構(gòu)HUB在USB結(jié)構(gòu)中是一個關鍵,它提供了附加的USB節(jié)點,這些節(jié)點被稱為端口。HUB 可以檢測出每一個下行端口的狀態(tài),并且可以給下端的設備提供電源。從下圖描述了一個典型的HUB結(jié)構(gòu)。 圖2.3 USB HUBUSB設備可以即插即用,但在可以使用之前,必須對設備進行配置。一旦設備連接到某個USB的節(jié)點上,USB就會產(chǎn)生一系列的操作,來完成對設備的配置,這種操作被稱為總線枚舉過程:1.設備所連
11、接的HUB檢測出端口上由設備連接,通過狀態(tài)變化管道向主機報告;2.主機通過詢問HUB以獲得確切的信息;3.主機這時知道設備連接到那個端口上,于是向這個端口發(fā)出復位命令;4.HUB發(fā)出的復位信號結(jié)束后,端口被打開,HUB向設備提供100mA的電源,這時設備上電,所有的寄存器復位,并且以缺省地址0以及端點0響應命令;5.主機通過缺省地址與端點0進行通訊,賦予設備一個唯一的地址,并且讀取設備的配置信息;6.最后主機對設備進行配置,該設備就可以使用了。 當該設備被移走時,HUB依然要報告主機,并且關閉端口。一旦主機接收到設備移走的報告,就會改寫當前結(jié)構(gòu)信息。USB設備的電源可以由USB總線供給,也可以
12、自備電源。一個USB設備可以具有這兩種供電方式,但同一時刻只能由一種方式供電。這兩種供電方式是可以切換的。為了節(jié)電,當設備在指定的時間內(nèi)沒有總線傳輸,USB設備自動進入掛起狀態(tài)。如果設備所接的HUB的端口被禁止了,設備也將進入掛起狀態(tài)(稱之為選擇掛起。當然主機也可以進入掛起狀態(tài)。USB設備當總線活動時,就會離開掛起狀態(tài)。一個設備也可以通過電信號來遠程喚醒進入掛起狀態(tài)的主機。這個能力是可選的,如果一個設備具有這個能力,主機有能力禁止或允許使用這種能力。2.3 USB主機USB主機在USB系統(tǒng)中處于中心地位,并且對USB及其連接的設備有著特殊的責任。主機控制著所有對USB的訪問,一個外設只有主機允
13、許才有訪問總線的權利。主機同時也檢測著USB的結(jié)構(gòu)。USB主機包括三層:設備驅(qū)動程序,USB系統(tǒng)軟件,USB主控制器(主機的總線接口。另外,還有兩個軟件接口:USB驅(qū)動(USBD接口,主機控制驅(qū)動(HCD接口。 圖2.4 主機的層次結(jié)構(gòu)2.4 USB數(shù)據(jù)流 圖2.5 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 Packe
14、t;USB驅(qū)動程序接到請求后,調(diào)用HCD接口(host controller driver interface,將IRP轉(zhuǎn)化為USB的傳輸(transfer,一個IRP可以包含一個或多個USB傳輸;然后HCD將USB傳輸分解為總線操作(transaction,由主控制器以包(packet的形式發(fā)出。需要注意的是:所有的數(shù)據(jù)傳輸都是由主機開始的,任何外設都無權開始一個傳輸。IRP是由操作系統(tǒng)定義的,而USB傳輸與總線操作是USB規(guī)范定義的。為了進一步說明USB傳輸,這里引出幀(frame的概念。幀:USB總線將1ms定義為一幀,每幀以一個SOF包為開始,在這1ms里USB進行一系列的總線操作。引
15、入幀的概念主要是為了支持與時間有關的總線操作。為了滿足不同外設和用戶的要求,USB提供了四中傳輸方式:控制傳輸;同步傳輸;中斷傳輸;批傳輸。它們在數(shù)據(jù)格式、傳輸方向、數(shù)據(jù)包容量限制、總線訪問限制等方面有著各自不同的特征:控制傳輸(Control Transfer1.通常用于配置、命令、狀態(tài)等情形;2.其中的設置操作(setup和狀態(tài)操作(status的數(shù)據(jù)包具有USB定義的結(jié)構(gòu),因此控制傳輸只能通過消息管道進行;3.支持雙向傳輸;4.對與高速設備,允許數(shù)據(jù)包最大容量為8,16,32或64字節(jié),對于低速設備只有8字節(jié)一種選擇;5.端點不能指定總線訪問的頻率和占用總線的時間,USB系統(tǒng)軟件會做出限
16、制;6.具有數(shù)據(jù)傳輸保證,在必要時可以重試。同步傳輸(Isochronous Transfer1.是一種周期的、連續(xù)的傳輸方式,通常用于與時間有密切關系的信息的傳輸;2.數(shù)據(jù)沒有USB定義的結(jié)構(gòu)(數(shù)據(jù)流管道; 3.單向傳輸,如果一個外設需要雙向傳輸,則必須使用另一個端點;4.只能用于高速設備,數(shù)據(jù)包的最大容量可以從0到1023個字節(jié);5.具有帶寬保證,并且保持數(shù)據(jù)傳輸?shù)乃俾屎愣?每個同步管道每幀傳輸一個數(shù)據(jù)包;6.沒有數(shù)據(jù)重發(fā)機制,要求具有一定的容錯性;7.與中斷方式一起,占用總線的時間不得超過一幀的90%。中斷傳輸(Interrupt Transfer1.用于非周期的、自然發(fā)生的、數(shù)據(jù)量很小
17、的信息的傳輸,如鍵盤、鼠標等。2.數(shù)據(jù)沒有USB定義的結(jié)構(gòu)(數(shù)據(jù)流管道;3.只有輸入這一種傳輸方式(即外設到主機;4.對于高速設備,允許數(shù)據(jù)包最大容量為小于或等于64字節(jié),對于低速設備只能小于或等于8字節(jié);5.具有最大服務周期保證,即在規(guī)定時間內(nèi)保證有一次數(shù)據(jù)傳輸;6.與同步方式一起,占用總線的時間不得超過一幀的90%;7.具有數(shù)據(jù)傳輸保證,在不要時可以重試。批傳輸(Bulk Transfer1.用于大量的、對時間沒有要求的數(shù)據(jù)傳輸;2.數(shù)據(jù)沒有USB定義的結(jié)構(gòu)(數(shù)據(jù)流管道;3.單向傳輸,如果一個外設需要雙向傳輸,則必須使用另一個端點;4.只能用于高速設備,允許數(shù)據(jù)包最大容量為8,16,32或
18、64字節(jié);5.沒有帶寬的保證,只要有總線空閑,就允許傳輸數(shù)據(jù)(優(yōu)先級小于控制傳輸;6.具有數(shù)據(jù)傳輸保證,在必要時可以重試,以保證數(shù)據(jù)的準確性。 圖2.6 USB數(shù)據(jù)傳輸2.5 USB的端點端點是USB中一個獨特的概念,它是一個可以與USB Host交換數(shù)據(jù)的硬件單元。USB Host與USB設備之間都是通過端點來傳輸數(shù)據(jù)的,端點是橋梁和紐帶,不同的端點其傳輸數(shù)據(jù)的能力不同,適于不同的應用場合。PDIUSBD12的端點適用于不同類型的設備,例如圖像打印機、海量存儲器和通信設備。 端點可通過Set Mode命令配置為4種不同的模式,分別為:1.模式0 Non-ISO 模式:非同步傳輸2.模式1 I
19、SO-OUT 模式:同步輸出傳輸3.模式2 ISO-IN 模式:同步輸入傳輸4.模式3 ISO-IO 模式:同步輸入輸出傳輸這幾種模式下可得到的端點情況如下表2.1:表2.1 端點模式 端點2(主端點是進行吞吐大量數(shù)據(jù)的主要端點。主端點執(zhí)行主機的特性以減輕傳輸大數(shù)據(jù)的任務,包括:1.雙緩沖。允許USB與本地CPU之間的并行讀寫操作,增加了數(shù)據(jù)的吞吐量。緩沖區(qū)切換是自動處理的,導致了透明的緩沖區(qū)操作。2.支持DMA(直接存儲器訪問操作,可以和對其他端點的正常I/O操作交進行。3.DMA操作中的自動指針處理,在跨過緩沖區(qū)邊界時不需要本地CPU的干預。4.可配置為同步傳輸或非同步(批量和中斷傳輸。
20、第三章 協(xié)議3.1 Mass Storage 協(xié)議USB協(xié)議能夠在啟動或是當設備插入系統(tǒng)時對設備進行備置,這就是USB設備為什么可以執(zhí)插撥的原因。USB設備被分成以下幾類:顯示器(Monitors、通訊設備(Communication devices、音頻設備(Audio、人機輸入(Human input、海量存儲(Mass storage。特定類(class的設備又可劃分成子類(subclass,劃分子類的后軟件就可以搜索總線并選擇所有它可以支持的設備。每個設備可以有一個或多個配置(Configuration,配置 用于定義設備的功能。如果某個設備有幾種不同的功能,則每個功能都需要一個配置。
21、配置(configuration是接口(interface的集合。接口指定設備中的哪些硬件與USB交換數(shù)據(jù)。每一個與USB交換數(shù)據(jù)的硬件就叫做一個端點(endpoint。因此,接口是端點的集合。USB的設備類別定義(USB Device Class Definitions定義特定類或子類中的設備需要提供的缺省配置、接口和端點。描述符(descriptor描述設備、配置、接口或端點的一般信息,下圖為USB 描述符的層次結(jié)構(gòu)。 圖3.1 USB描述符層次結(jié)構(gòu)USB(Host唯一通過描述符了解設備的有關信息,根據(jù)這些信息建立起通信,在這些描述符中,規(guī)定了設備所使用的協(xié)議、端點情況等。因此,正確地提供
22、描述符,是USB設備正常工作的先決條件。USB海量存儲設備(USB Mass Storage Class包括General Mass Storage Subclass、CD-ROM、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ù)。這種設備的接
23、口遵循SCSI-2標準的直接存取存儲設備 (Direct Access Storage Device協(xié)議。USB設置上的介質(zhì)使用與SCSI-2設備相同的邏輯塊(logical blocks方式尋址。下面介紹基于Bulk Only(批量傳輸模式的Mass Storage 設備的描述符:每個USB設備都必須有一個設備描述符。 圖3.2 設備(Device描述符Mass Stroage設備的設備類型和子類代碼均在接口描述符中設置,這里置0。其中iSerialNumber可為零,即不指定Serial Number。配置描述符如下圖: 圖3.3 配置(Configuration描述符這里配置所支持的接口
24、數(shù)應為1。即設置至少支持一個接口,這里為Bulk-Only Data 接口,此接口使用三個端點:控制端點(默認、Bulk-In和Bulk-Out。其中bInterfaceSubClass指定所使用的工業(yè)標準命令塊,bInterfaceProtocol為所使用的傳輸協(xié)議。 圖3.4 bInterfaceSubClass 處的工業(yè)標準命令塊代碼 圖3.5 Mass Storage 傳輸協(xié)議接口描述符如下圖: 圖3.6 接口(Interface描述符由于控制端點為每個設備都使用的缺省端點,因此不需要定義,只需定義Bulk-In和Bulk-Out兩個端點,其端點描述符如下: 圖3.7 Bulk-In端
25、點描述符 圖3.8 Bulk-Out端點描述符3.2 Bulk-Only傳輸協(xié)議設備插入到USB后,USB即對設備進行搜索,并要求設備提供相應的描述符。在USB Host 得到上述描述符后,即完成了設備的配置,識別出為Bulk-Only的Mass Storage設備,然后即進入Bulk-Only傳輸方式。在此方式下,USB與設備間的所有數(shù)據(jù)均通過Bulk-In和Bulk-Out來進行傳輸,不再通過控制端點傳輸任何數(shù)據(jù)。在這種傳輸方式下,有三種類型的數(shù)據(jù)在USB和設備之間傳送,CBW、CSW 和普通數(shù)據(jù)。CBW(Command Block Wrapper,即命令塊包是從USB Host發(fā)送到設備
26、的命令,命令格式遵從接口中的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í)行的操作可用下圖描述: 圖3.9 USB 設備所執(zhí)行的操作USB Host 按照下面的格式向設備端發(fā)送CBW, 圖3
27、.10 CBW其中dCBWSignature的值為43425355h(LSB,表示當前發(fā)送的是一個CBW;dCBWTag的內(nèi)容需要原樣作為dCSWTag再發(fā)送給Host;dCBWDataTransferLength為本次CBW需要傳輸?shù)臄?shù)據(jù)長度,bmCBWFlags反映數(shù)據(jù)傳輸?shù)姆较?0表示來自Host,1表示發(fā)至Host;bCBWLUN 一般為零,但當設備有多個邏輯單元時,用此位指定本次命令是發(fā)給誰的;bCBWCBLength 為本次命令字的長度;CBWCB即為真正的傳輸命令集的命令。設備得到一個CBW后,解析出CBWCD中所代表的命令,然后按照SCSI命令集中的定義來執(zhí)行相應的操作,或是需
28、要接收下一個Bulk-Out發(fā)來的數(shù)據(jù),或是需要向Host傳送數(shù)據(jù),完成以后需要向USB Host發(fā)送CSW,反映命令執(zhí)行的狀態(tài)。USB也是通過此來了解設備的工作情況的。USB設備按照下面的格式向主機端發(fā)送CBW, 圖3.11 CSW其中dCSWSignature的值為53425355h(LSB,表示當前發(fā)送的是一個CSW;dCSWTag的內(nèi)容為dCBWTag的內(nèi)容,dCSWDataResidue為還需要傳送的數(shù)據(jù),此數(shù)據(jù)根據(jù)dCBWDataTransferLength減去本次已經(jīng)傳送的數(shù)據(jù)得到。Host端根據(jù)此值決定下一次CBW的內(nèi)容,如果沒有完成則繼續(xù);如果命令正確執(zhí)行,則bCSWStat
29、us返回0。設備按這個規(guī)則組裝好CSW后,通過Bulk-In端點將其發(fā)送給主機。3.3 SCSI指令集Bulk-Only的CBW中的CBWCB中的內(nèi)容即為如下格式的命令塊描述符(Command Block Descriptor。SCSI-2有三種字長的命令,6位、10位和12位,Microsoft Windows環(huán)境下支持12 位字長的命令。 圖3.12 命令塊描述符(Command Block DescriptorOperation Code是操作代碼,表示特定的命令。高3位為Group Code,共有8 種組合,即8個組,低5五位為Command Code,可以有32種命令。Logicol
30、 unit Number是為了兼容SCSI -1而設的。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é)議只用到了其中的一些。下面黑體
31、部分即為需要USB設備作出響應的請求,一般是要求向Host發(fā)送一些有關設備的數(shù)據(jù): 表3.1 SCSI指令集 對于不同的命令,其命令塊描述符略有不同,其要求的返回內(nèi)容也有所不同,根據(jù)相應的文檔,可以對每種請求作出適當?shù)幕貞O旅嬉訧NQUIRY請求為例,給出該命令塊的命令塊描述符和其返回內(nèi)容的數(shù)據(jù)格式,其它命令塊格式和返回內(nèi)容請參考Information technology - SCSI Primary Commands - 2(SPC-2。 圖3.13 INQUIRY命令塊描述符 圖3.14 INQUIRY命令返回數(shù)據(jù)格式Host會依次發(fā)出INQUIRY、READ CAPACITY、UFI
32、 MODE SENSE請求,如果上述請求的返回結(jié)果都正確,則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。3.4 FAT16 文件系統(tǒng)一個FAT(FAT12/FAT16/FAT32文件系統(tǒng)卷(卷可以理解為是一張軟盤、一個硬盤或是一個Flas電子盤由四個部分組成:分區(qū)的保留區(qū)(Reserved Region中的第一個扇區(qū)必須是BPB(BIOS Parameter Bl
33、ock, 此扇區(qū)有時也稱作“引導扇區(qū)”、“保留扇區(qū)”或是“零扇區(qū)”,因為它含有對文件系統(tǒng)進行識別的關鍵信息,因此十分重要。下表是此扇區(qū)的結(jié)構(gòu):表3.2 引導扇區(qū)結(jié)構(gòu)(一 表3.3 引導扇區(qū)結(jié)構(gòu)(二 表3.4 引導扇區(qū)結(jié)構(gòu)(三 FAT即File Allocation Table,文件分配表。操作系統(tǒng)分配磁盤空間按簇來分配的。因此,文件占用磁盤空間時,基本單位不是字節(jié)而是簇,即使某個文件只有一個字節(jié),操作系統(tǒng)也會給他分配一個最小單元即一個簇。為了可以將磁盤空間有序地分配給相應的文件,而讀取文件的時候又可以從相應的地址讀出文件,我們把整個磁盤空間分成32K字節(jié)長的簇來管理,每個簇在FAT表中占據(jù)著一
34、個16位的位置,稱為一個表項。對于大文件,需要分配多個簇。同一個文件的數(shù)據(jù)并不一定完整地存放在磁盤的一個連續(xù)的區(qū)域內(nèi),而往往會分成若干段,像一條鏈子一樣存放。這種存儲方式稱為文件的鏈式存儲。為了實現(xiàn)文件的鏈式存儲,硬盤上必須準確地記錄哪些簇已經(jīng)被文件占用,還必須為每個已經(jīng)占用的簇指明存儲后繼內(nèi)容的下一個簇的簇號,對一個文件的最后一簇,則要指明本簇無后繼 簇。這些都是由FAT表來保存的,FAT表的對應表項中記錄著它所代表的簇的有關信息:諸如是否空,是否是壞簇,是否已經(jīng)是某個文件的尾簇等。FAT區(qū)的結(jié)構(gòu)如下:表3.5 FAT區(qū)結(jié)構(gòu) FAT的項數(shù)與硬盤上的總簇數(shù)相關(因為每一個項要代表一個簇,簇越多
35、當然需要的FAT 表項越多,每一項占用的字節(jié)數(shù)也與總簇數(shù)有關(因為其中需要存放簇號,簇號越大當然每項占用的字節(jié)數(shù)就大。FAT的格式有多種,最為常見是FAT16和FAT32,其中FAT16是指文件分配表使用16位,由于16位分配表最多能管理65536(即2的16次方個簇,又由于每個簇的存儲空間最大只有32KB,所以在使用FAT16管理硬盤時,每個分區(qū)的最大存儲容量只有(65536×32 KB即2048MB,也就是我們常說的2G?,F(xiàn)在的硬盤容量是越來越大,由于FAT16對硬盤分區(qū)的容量限制,所以當硬盤容量超過2G之后,用戶只能將硬盤劃分成多個2G的分區(qū)后才能正常使用。由于FAT對于文件管
36、理的重要性,所以FAT有一個備份,即在原FAT的后面再建一個同樣的FAT。緊接著第二個FAT表的后面一個扇區(qū),就是根目錄區(qū)了。根目錄區(qū)中存放目錄項,每個目錄項為32個字節(jié),記錄一個文件或目錄的信息(長文件名例外。以下是目錄項的結(jié)構(gòu):表3.6 目錄項結(jié)構(gòu) 目錄項所占的扇區(qū)數(shù)與有多少個目錄項有關,它將占用(目錄項*32/512個扇區(qū)。目錄項的所占的最后一個扇區(qū)之后,便是真正存放文件數(shù)據(jù)或是目錄的位置了。Flash硬盤與普通的磁頭、柱面式介質(zhì)不一樣。在開發(fā)U盤的過程中,使用Flash作為存儲介質(zhì)。它有其特定的結(jié)構(gòu)特點。以32M的三星K9F5608U0A-YCB0 Flash為例,它有2048個Blo
37、ck,每個Block 有32個Page,每個Page有512+16=528個字節(jié)。 圖3.15 Flash 的結(jié)構(gòu)Flash的讀寫有其自身特點:1.必須以Page為單位進行讀寫;2.寫之前必須先擦除原有內(nèi)容;3.擦除操作必須對Block進行,即一次至少擦除一個Block的內(nèi)容。針對這種情況,將Flash的一個Page定為1個扇區(qū),將其2個Block,64個扇區(qū)定為一個簇,這樣,簇的容量剛好為512*64=32K,滿足FAT16對簇大小的要求。FAT分配空間的時候,是按簇來分配的,但是其給出的地址卻是LBA(Logical BlockAddress,即它只給出一個扇區(qū)號,比如對此Flash而言,
38、若給出LBA為0x40,實代表簇1的扇區(qū)1。因此需要將Logical Block Address轉(zhuǎn)換為物理地址,這樣,才可以對數(shù)據(jù)進行存取操作。根據(jù)上面定義的結(jié)構(gòu),轉(zhuǎn)換公式為:Flash 的Block = Logical Block Address/0x20 (1 Flash 的Page = Logical Block Address %0x20 (2實際上,如果定義每個簇為32 個扇區(qū)是最好的,因為這樣物理結(jié)構(gòu)和邏輯結(jié)構(gòu)剛好一致。但是這也無防,因為不管Logical Block Address給出什么值,只要按上述公式,總可以得到物理上正確的Block 和Page,再使用Flash的讀寫命令
39、讀取對應的Block和Page就可以了, 因此簇和扇區(qū)的概念只是在BPB中給出存儲介質(zhì)信息的時候告之系統(tǒng)就可以了,這里只要做好LBA與物理地址間的轉(zhuǎn)換就可以了。由于做為U盤的Flash不要求啟動,因此可以沒有MBR 區(qū),只包含DBR、FAT、DIR和DATA四個區(qū)。因此,Flash的前兩個Block的內(nèi)容如下:表3.6 Flash的前兩個BlockLBA Block/Page 長度 內(nèi)容說明0H 0/0 512字節(jié) MBR=BPB+Excutable Code+55AA1-2H 0/1-0/2 1024字節(jié) FAT區(qū)(第一份FAT3-4H 0/3-0/4 1024字節(jié) FAT區(qū)備份(第二份FA
40、T5-39H 目錄區(qū)40H 數(shù)據(jù)區(qū)當主機發(fā)出READ命令后,Flash讀寫操作即告開始,主機首先讀取MBR,得到有關存儲介質(zhì)的有關信息,諸如扇區(qū)長度、每簇扇區(qū)數(shù)以及總扇區(qū)數(shù)等內(nèi)容,以便知道此盤有多大。如果讀取正確,會接著讀取文件分配表,借以在PC 機上的可移動盤符中顯示文件目錄,并可以復制、刪除或是創(chuàng)建文件。系統(tǒng)自動將這些命令都轉(zhuǎn)換成READ或WRITE兩種命令,通過USB的READ或WRITE命令塊描述符來從Flash中相應扇區(qū)讀取數(shù)據(jù),或是將特定長度的數(shù)據(jù)寫入Flash相應地址中。 第四章 程序?qū)崿F(xiàn)與調(diào)試4.1 固件程序的實現(xiàn)主循環(huán)檢查事件標志并進入子程序進行進一步的處理。MCU一但上電就
41、需要初始化其所有端口、存儲區(qū)、定時器和中斷服務程序。之后MCU將重新連接USB,包括將Soft_Connect 寄存器設置為ON,因為這些過程確保了在MCU準備好服務D12之前D12不會進行操作,所以是很重要的。下圖為主循環(huán)流程: 中斷服務程序代碼處理由D12產(chǎn)生的中斷,它將數(shù)據(jù)從D12的內(nèi)FIFO取回到CPU存儲器,并建立正確的事件標志,以通知相應的子程序進行處理。下圖為中斷服務程序流程圖: 圖4.2 中斷服務程序流程圖 控制傳輸總是在SETUP階段開始,之后為可選的DATA階段,然后在STATUS階段結(jié)束。固件使用這3個狀態(tài)來正確處理控制傳輸。下圖為控制端點處理程序流程圖: 圖4.3 控制
42、輸出程序流程圖 圖4.4 控制輸入程序流程圖 對于普通輸出端點(本項目中為BULK_OUT端點配置為從主機接收數(shù)據(jù)包。當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ā)送。 下圖為普通端點處理程序流程圖:. 圖4.5 普通端點處理程序流程圖總線復位和掛起并不要求在I
43、SR中進行特殊的處理,所以這里直接退出程序即可。在中斷服務程序還里定義了數(shù)據(jù)提交函數(shù)。該子程序負責把數(shù)據(jù)寫入端點緩沖區(qū),然后提交給主機。下圖為數(shù)據(jù)提交函數(shù)程序流程圖: 圖4.6 數(shù)據(jù)提交函數(shù)程序流程圖GET STATUS請求要求接收方返回一個相應的狀態(tài),設備返回16位的狀態(tài)描述。圖4.7為GET STATUS的工作流程圖。當GET STATUS的索引為設備時,主機獲取設備的狀態(tài)。如果請求是對器件,MCU必須向主機返回器件狀態(tài)。因為接口狀態(tài)的16位字節(jié)全部保留,所以返回0x0000即可。一個端點有輸入和輸出兩個端點號。這里使用了索引BIT7來標識要求返回的端點的方 向,BIT7=1為返回輸入端點
44、的狀態(tài);BIT7=0為返回輸出端點的狀態(tài)。 Array 圖4.7 GET STATUS的工作流程圖CLEAR FEATURE用來清除或禁止設備的一個特定的特性。當接收到CLEAR FEATURE的請求后,設備就執(zhí)行相應的操作,并返回一個空的數(shù)據(jù)表示執(zhí)行完畢。圖4.8為CLEAR FEATURE 的工作流程圖。SET FEATURE用來設置或允許一個特性。SET FEATURE和CLEAR FEATURE是兩個相反的動作。同樣,當接收到SET FEATURE的請求后,設備就執(zhí)行相應的操作,并返回一個空的數(shù)據(jù)表示執(zhí)行完畢。圖4.9為SET FEATURE的工作流程圖。在USB設備枚舉的時候,主機會
45、分配一個新的地址給設備,以取代默認地址(默認地址為0。當設備接收到這一設備請求的時候,要做的事情就是把設備的當前地址改為分配的 地址,以讓設備對新的地址作出響應。注意此設置地址請求不含數(shù)據(jù)階段,MCU需要向主機寫一個零長度的數(shù)據(jù)包作為應答階段。 Array圖4.8 CLEAR FEATURE的工作流程圖 圖4.9 SET FEATURE的工作流程圖Array圖4.10 SET ADDRESS的工作流程圖GET DESCRIPTOR是主機用來獲取USB設備相對應的描述符的一個請求。在這里,設備請求值的高8位為要求獲取的描述符的類型,設備按照請求類型返回相應的描述符。下圖為GET DESCRIPT
46、OR的工作流程圖: Array圖4.11 SET DESCRIPTOR的工作流程圖GET CONFIGURATION用于獲取當前的配置信息。如果設備已經(jīng)配置,則返回信息為當前的配置值(一個字節(jié);否則返回為0,表示還沒有配置。圖4.12為GET CONFIGURATION的工作流程圖。SET CONFIGURATION是用來選擇設備的工作配置。SET CONFIGURATION中的值只能是0或與配置描述符中bConfiguration Value相同的值。一旦SET CONFIGURATION有效,MCU還需要向主機發(fā)送零數(shù)據(jù)包作為應答階段。圖4.13為SET CONFIGURATION的工作流
47、程圖。GET INTERFACE用于返回當前的接口號。返回信息為一個字節(jié)。SET INTERFACE用于設備支持多接口的時候,主機用來選擇一個接口。如果選擇正確, 設備發(fā)送一個空的數(shù)據(jù)表示執(zhí)行完畢。 圖4.12 GET CONFIGURATION的工作流程圖 存儲器操作程序處理了數(shù)據(jù)的固定存儲讀寫操作。對FLASH的讀寫又有其自身的特點,特別是它可以隨機讀,但無法隨機的寫。因此,對于寫數(shù)據(jù)的問題,就需要通過設置緩沖 對于FLASH的擦除操作是基于16K字節(jié)的塊的。下圖為塊擦除函數(shù)程序流程圖: 對于FLASH的頁拷貝操作是基于512字節(jié)的扇區(qū)的。下圖為頁拷貝函數(shù)程序流程圖: 圖4.14 頁拷貝函
48、數(shù)程序流程圖對預處理的功能主要是對需要寫入的塊進行擦除,以及對這些塊內(nèi)不修改的頁進行保存。擦除后就可以對存儲器進行寫操作了。這里對存儲器的操時作是以頁為單位進行的。下圖為寫FLASH操作的流程圖: 圖4.15 寫FLASH函數(shù)程序流程圖對FLASH的讀操作可以是隨機讀取,所以這里只要給定讀數(shù)據(jù)的首地址和讀寫長度。針對于FLASH的數(shù)據(jù)存儲結(jié)構(gòu),讀操作分別要對每一頁的第一部分和第二部分進行。下圖為讀FLASH操作的流程圖: 4.2 固件調(diào)試對設備的程序進行調(diào)試是本項目開發(fā)過程中最難的部分。由于USB協(xié)議有嚴格的時間要求,這就使得程序必須在有效時間內(nèi)對某些請求或狀態(tài)進行處理,否則,USB將無法正常
49、工作。這里結(jié)合項目的開發(fā)過程,將調(diào)試劃分為以下四個步驟。在調(diào)試的過程中需要用到一些輔助工具,如示波器、串口調(diào)試軟件和USB總線數(shù)據(jù)檢測軟件等。確定USB芯片是否已經(jīng)正常工作,是所有調(diào)試的基礎,得到電路板之后,這是一個首先要解決的問題。判斷USB芯片是否已經(jīng)工作,可以從兩個方面來判斷,一是將CLKOUT 設為12M(缺省為4M,然后用示波器量CLKOUT引腳,若確為12M而不是4M,則說明USB的地址和數(shù)據(jù)都可以正確傳送,各種信號線接法正確,USB芯片可以正常工作,硬件基本沒有問題。另一方面,如果使用SOFTCONNECT,則在主程序中進行軟連接后,如果GL_N燈閃爍幾下,PC機上出現(xiàn)了未知設備
50、,則說明USB進行軟連接正常,也說明芯片已經(jīng)工作了。在確定USB設備正常工作的前提下,插上設備將進入枚舉階段。USB設備的調(diào)試過程其實就是根據(jù)主機的請求,不斷地向主機提供各種信息的過程。因此,了解主機按照什么樣的順序向設備發(fā)出請求,USB設備的枚舉順序是非常有必要的。以下是USB設備枚舉數(shù)據(jù)傳輸?shù)娜^程:1.主機檢測到有設備插上,總線復位;2.主機讀取設備描述符;3.地址分配;4.主機從新的地址獲取設備描述符;5.主機讀取配置描述符;6.讀取描述符集合;7.設置配置;8.讀取配置狀態(tài);9.讀取接口狀態(tài)。本項目USB設備按海量存儲協(xié)議提供描述符。在調(diào)試的過程中發(fā)現(xiàn)D12控制端點的緩沖區(qū)可以達到6
51、4個字節(jié)(芯片數(shù)據(jù)手冊的說明是控制端點的緩沖區(qū)只有16個字節(jié),這樣的話,設備與主機在枚舉數(shù)據(jù)傳輸過程中就可以以最大64字節(jié)的數(shù)據(jù)包傳輸數(shù)據(jù),減少了數(shù)據(jù)傳輸?shù)拇螖?shù)。如果枚舉階段設備按海量存儲協(xié)議向主機提供了描述符,則當USB總線數(shù)據(jù)檢測軟件檢測到數(shù)據(jù)55 53 42 53時,說明已經(jīng)開始了BULK_ONLY傳輸階段。這時可以不用太多考慮USB 中斷、端點之類的問題,到此階段后只有兩個端點工作,即Bulk_In和Bulk_Out端點,In或 Out 都是從主機的角度來講的,前者用于設備向主機發(fā)送數(shù)據(jù),后者用于主機向設備發(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端點處理的流程圖: Bul
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 夢幻的星空我的科幻想象作文(13篇)
- 我的語文老師記一位讓人敬佩的老師作文13篇
- 2025年鉆采設備專用件項目提案報告模板
- 冠心病的常見病因和癥狀
- 2025年公務員錄用考試審計專業(yè)試卷(審計學科發(fā)展研究)
- 2025電子商務師(高級)考試試卷:電子商務大數(shù)據(jù)與人工智能應用試題
- 動物朋友們幼兒園動物主題寫作(10篇)
- 煤炭燃燒效率提升與清潔能源產(chǎn)業(yè)融合的2025年市場分析報告001
- 2025年病種質(zhì)量控制方案試題
- 單位暑假工勞動協(xié)議書
- 投稿版權轉(zhuǎn)讓協(xié)議書
- 外研版(三起)英語三年級上冊全冊課件
- 【部編版】三年級下冊道德與法治《期末測試卷》(含答案)
- 翎云教育試卷二年級下冊數(shù)學
- 2022年全球及射頻微波儀器行業(yè)發(fā)展現(xiàn)狀分析
- 經(jīng)皮胃鏡下胃造瘺空腸管置入術
- 暑期托管服務考核表
- 淺談心理護理溝通技巧
- 哈薩克斯坦共和國有限責任公司和補充責任公司法
- 新hsk4級書寫講解
- 鄉(xiāng)烤煙生產(chǎn)工作總結(jié)及工作打算
評論
0/150
提交評論