標籤:
http://www.crifan.com/files/doc/docbook/usb_disk_driver/release/htmls/ch02_msc_basic.html
目錄
-
2.1. USB Mass Storage相關的協議
-
-
2.1.1. USB Mass Storage相關協議簡介
-
-
2.1.1.1. USB MSC Control/Bulk/Interrupt (CBI) Transport
-
2.1.1.2. USB MSC Bulk-Only (BBB) Transport
-
-
2.1.1.2.1. 為何USB MSC中Bulk-only Transport被叫做 BBB
-
2.1.1.2.2. 為何已經有了CBI,又再弄出個BBB
-
2.1.1.3. USB MSC UFI Command Specification
-
2.1.1.4. USB MSC Bootability Specification
-
2.1.1.5. USB MSC Compliance Test Specification
-
2.1.1.6. USB Lockable Storage Devices Feature Specification
-
2.1.1.7. USB MSC USB Attached SCSI Protocol (UASP)
-
-
2.1.1.7.1. 已有SCSI協議,為何還要再弄一個UASP
-
2.1.2. USB MSC的各個協議之間關係總結
-
2.1.3. 隨身碟與USB中的Class,Subclass和Protocol的對應關係
-
-
2.1.3.1. bInterfaceClass=0x08=Mass Storage
-
2.1.3.2. bInterfaceSubClass=0x06=SCSI Transparent
-
2.1.3.3. bInterfaceProtocol=0x50=Bulk Only Transport
-
2.2. USB Mass Storage相關的軟體實現
摘要
【todo】待整理:Linux USB MASS Storage driver流程圖
USB Mass Storage所對應的層次和要實現哪些東西:
圖 2.1. USB Mass Storage Framework
PC電腦和隨身碟之間的關係,以及物理上的組成,可以用表示:
圖 2.2. PC和隨身碟
更深入的剖析,對於普通隨身碟的內部結構,則是一個USB物理介面,加上對應的控制晶片(微控制器(含Nand Flash的控制器)+ USB裝置控制器)和一個Nand Flash晶片:
圖 2.3. PC和隨身碟的晶片內部結構
上述PC電腦和隨身碟的物理關係,以群聯的PS2251-50 USB 2.0 Flash Controller為例,對應的邏輯關係為:
圖 2.4. PC和隨身碟的內部邏輯框圖
關於隨身碟容量,再多解釋一句:一般隨身碟的大小,就是對應著這個Nand Flash晶片的容量,比如2GB,4GB,8GB等。當然,比如一個8GB的隨身碟,內部也可以用兩塊4GB的Nand Flash晶片來構成。
PC和隨身碟的之間的抽象的邏輯關係,可用來表示:
圖 2.5. PC和USB MSC裝置
中,Storage Media,就是我們例子中的Nand Flash晶片。而例子中的那個控制晶片,是Microcontroller with embedded USB device controller 和Media Controller的集合。
而中的USB MSC(Mass Storage Class) Device,從應用領域來說,可以分為以下幾類:
圖 2.6. USB MSC的分類
而像上述例子中那樣的常用的隨身碟,屬於中的Flash Drive,即,物理上儲存資料的介質用的是Flash Memory,比如例子中的Nand Flash晶片,對應的,Media Controller,也就是Nand Flash的Controller,負責從Nand Flash晶片中讀寫資料。
USB MSC裝置中的韌體(firmware)或者硬體(hardware),必須要實現下面這些功能:
- 檢測和響應通用的USB Request和USB匯流排上的事件。
- 檢測和響應來自USB裝置的關於資訊或者動作的USB Mass Storage Request。
- 檢測和響應,從USB Transfer中獲得的SCSI Command。這些業界標準的命令,是用來獲得狀態資訊,控制裝置操作,向儲存介質塊中讀取(read block)和寫入(write block)資料的。
另外,裝置如果想要向儲存介質中,建立/讀取/寫入,檔案/檔案夾的話,那麼就涉及到檔案系統,還要實現對應的檔案系統。嵌入式系統中常見的檔案系統有FAT16或FAT32。
2.1. USB Mass Storage相關的協議
除了本身USB的協議之外,Mass Storage作為其中USB的一種,USB Mass Storage自己又有相關的協議,對應的協議可以去官網下載:
http://www.usb.org/developers/devclass_docs/
其中有關於Mass Storage相關的,一堆的協議:
- Mass Storage Class Specification Overview 1.4
- Mass Storage Bulk Only 1.0
- Mass Storage Control/Bulk/Interrupt (CBI) Specification 1.1
- Mass Storage UFI Command Specification 1.0
- Mass Storage Bootability Specification 1.0
- Lockable Mass Storage Specification 1.0 and Adopters Agreement - Lockable Mass Storage IP Disclosure
- USB Attached SCSI Protocol (UASP) v1.0 and Adopters Agreement
說實話,咋一看,這麼多協議,不知道驢年馬月才能看完和真正理解。不過,等待瞭解了這些協議的關係之後,會發現,其實需要特別關注和研究的協議,並不是很多,至少很多協議可以不用太關心。
2.1.1. USB Mass Storage相關協議簡介
凡事至少得對整體系統有個大致瞭解後,才能繼續下一步的深入的開發。所以,我們的目的,首先是要搞懂這麼多協議之間都是啥關係,以及具體寫隨身碟驅動的話,要看哪些協議。
從上面那一堆協議的名詞上,我們就能看到,第一個:Mass Storage Class Specification Overview 1.4 就是對於這麼多協議的概述,其中介紹了各個協議的關係。
下面就把其中的主要內容摘出來,解釋如下:
關於USB Mass Storage相關的一些協議,都是由一個叫做USB Mass Storage Class Working Group (CWG)的組織定義的,如上所述,包括下面一些協議:
- USB Mass Storage Class Control/Bulk/Interrupt (CBI) Transport
- USB Mass Storage Class Bulk-Only (BBB) Transport
- USB Mass Storage Class Universal Floppy Interface (UFI) Command Specification
- USB Mass Storage Class Bootability Specification
- USB Mass Storage Class Compliance Test Specification
- USB Lockable Storage Devices Feature Specification (LSD FS)
- USB Mass Storage Class USB Attached SCSI Protocol (UASP)
對於這些協議,我們一個個的簡單解釋和分析一下:
2.1.1.1. USB MSC Control/Bulk/Interrupt (CBI) Transport
我們所關注的隨身碟,就是所謂的MSC裝置,大量儲存裝置。
隨身碟的功能,就是資料存放區。而對應的資料轉送,用的是USB中的Bulk Transfer。而Control Transfer是用來發送Class-Specific的資訊和Clear Stall。而其他方面的資訊交換,是用Bulk-only協議。
而對於CBI,算是Bulk-only的替代品,也可以用來資訊交換,但是只能用於full-speed的磁碟片(Floppy drive),也不推薦將CBI用於其它新出的MSC裝置上。
【總結】USB MSC Control/Bulk/Interrupt (CBI) 主要用於Floppy裝置,對於我們關心的隨身碟,用不到,不需要太關心,可以忽略之。
2.1.1.2. USB MSC Bulk-Only (BBB) Transport
如上所述,Bulk-only是USB裝置端,此處的隨身碟和USB Host端,即普通PC,之間資訊交換的協議。
Bulk Only Transport,也被簡稱為BOT。
2.1.1.2.1. 為何USB MSC中Bulk-only Transport被叫做 BBB
USB MSC中的Bulk-Only 常被叫做BBB,是相對於前面所說的CBI來說的。
看起來,USB MSC的CBI,是Control/Bulk/Interrupt的簡寫,但是其具體含義是:
- Control
Control端點用於,除了傳送標準的USB請求之外,還用於通過Class-specific的請求,將命令塊(command block)傳給裝置;即Control端點傳送命令塊
- Bulk
Bulk In和Bulk Out端點用於在主機(Host)和裝置(Device)之間資料的傳輸。即,Bulk用於傳送資料
- Interrupt
Interrupt端點用於(裝置向主機)通知命令完成。即Interrupt用於傳送狀態資訊
因此,上面的USB MSC的Control/Bulk/Interrupt,才被簡稱為CBI。
和CBI中的用三種不同的端點來傳送三種類型的資訊,而不同的是,Bulk-only傳送這些全部的資訊,都之用Bulk端點。
即用Bulk端點來傳送命令塊,資料,狀態,因此,才類似於Control/Bulk/Interrupt被簡稱為CBI一樣,而Bulk/Bulk/Bulk被簡稱為BBB。
【總結】USB MSC傳輸協議分CBI和BOT,而BOT又稱為BBB。
2.1.1.2.2. 為何已經有了CBI,又再弄出個BBB
既然,對於USB MSC裝置來說,USB裝置和USB主機之間的通訊,已經定義了一個CBI規範,那麼為何還要再新定義一個Bulk-only(BBB)呢?
我的理解是,那是因為,最開始USB協議定義的時候,那時候市場上的Floppy Disk還是用的很多的。所以針對Floppy裝置特點,分別定義了多個端點來傳輸不同的資訊,即Control端點傳命令塊,Bulk傳資料,Interrupt傳狀態資訊,
而後來電腦行業的發展了,Floppy類的設定很少用了,儲存資料的話,多數開始用Flash Memory了,再加上通過合理規劃,可以用同一種端點,即Bulk端點,傳輸上述三種資訊,即命令塊,資料,狀態,因此,只需要物理上實現一個Bulk端點,節省掉了其他兩個端點:Control端點和Interrupt端點,達到了物理上實現起來方便和節省資源,而達到同樣的資訊傳輸的目的。
此部分理解,有待進一步考證。
【總結】USB MSC Bulk-Only (BBB) 協議,是我們要重點關注的對象。因為我們的隨身碟和USB主機(PC端)直接資訊互動,主要是用此協議。
2.1.1.3. USB MSC UFI Command Specification
UFI,即Universal Floppy Interface,因此看名字就知道,是關於磁碟片的。此USB MSC UFI規範,定義了UFI命令集合(Command Set),設計出來此規範,就是用於磁碟片的。此UFI命令集合,是基於SCSI-2 和SFF-8070i命令集合的。
【總結】看完上面的解釋,就明白了,我們此處關心的是隨身碟,是USB Flash Memory類型的,不是Floppy Disk類型的,所以,此處也可以不關心,暫忽略之。
2.1.1.4. USB MSC Bootability Specification
目前常見的電腦啟動,很多都是從MSC大量儲存裝置中啟動的,比如硬碟。因此,設計了這個規範,以使得作業系統可以從USB MSC裝置上啟動。關於此規範的具體內容,主要是定義了一些命令和相關的一些資料的定義。即,如果你想要實現讓作業系統從你的這個MSC裝置啟動,那麼你就要實現對應的CDB(Command Descriptor Block,命令描述符塊)或者Data資料。
【總結】我們主要關心隨身碟如何和主機資料互動,暫不關心是否能否從此隨身碟啟動,所以也可不太關心,暫忽略之。
2.1.1.5. USB MSC Compliance Test Specification
【總結】無須多解釋,看名字就知道,是一個關於相容性測試的規範,和我們此處所關心的隨身碟和主機的資料互動,關係不大,暫忽略之。
2.1.1.6. USB Lockable Storage Devices Feature Specification
“Lockable Storage Devices Feature Specification”,簡稱為 LSD FS。“Lockable”的意思是,可鎖定,即鎖定以防止其他人訪問或者寫入,即變成唯讀,甚至不允許其他人再訪問。說白了就是對USB存放裝置的安全控制方面的規範。
而基於目前還沒有一個標準的規範去定義,如何去控制那些對於USB存放裝置的訪問,所以此處才定義了一個這麼個和存取控制相關的協議。此協議可實現允許主機Host或者裝置Device去鎖定Lock或者解鎖Unlock 對應的存放裝置。
【總結】和安全儲存和許可權控制相關的協議,我們此處也是暫不關心,可忽略之。
2.1.1.7. USB MSC USB Attached SCSI Protocol (UASP)
“Attached”顧名思義,是附在某個上面的,此處即附在SCSI協議的上面的,即SCSI協議的補充部分。UASP規範,定義了關於如何在USB 2.0和USB 3.0中,UAS的傳輸通訊協定是如何?的,並且給出了一些範例和一些推薦的做法。
2.1.1.7.1. 已有SCSI協議,為何還要再弄一個UASP
既然已經有了對應的SCSI協議,用於發送對應命令,實現對應功能。作為隨身碟等應用的話,直接實現對應的協議,符合對應的規範,不是也就可以實現對應功能了嗎,為何還要另外再弄出一個SSCI的附屬協議UASP?
那是因為,原先的BOT(Bulk Only Transport),雖然協議簡單已實現,適合用於大量儲存裝置中,但其就像一個單線程,不能同時並存執行多個傳輸。即,對於BOT,每一個由Host發起資料轉送(transaction),都必須等待裝置完成,然後裝置再返回對應的完成狀態資訊,然後才能開始下一次資料轉送。這樣的話,對於整個資料轉送過程的話,就造成了一個很大(大概有20%)的浪費(overhead)。
而對於USB 3.0來說,速度從USB 2.0的480Mb/s變成了 5.0Gb/s,而如果繼續用BOT的話,那麼相對來說CPU效能的利用率很低,USB傳輸速度也不太高,例如,有研究表明,2.4 GHz Core Duo™的CPU,利用率只要大概12%,CPU傳輸速度只有大約250MB/s,而USB 3.0的理論速度是5.0Gb/s=640MB/s,即還不到理論最大速度的一半。
因此,才有了這個UASP,對於SCSI協議進行了補充,以提高USB 2.0的USB匯流排利用率,和充分利用USB 3.0的全雙工系統能力,可以使得傳輸速度達到大約400MB/s。此新的協議UASP的實現,也需要對應的新的Host端的軟體,新的Device端的韌體(Firmware)。
為了實現裝置的向後相容性,Device同時支援BOT和UAS。而此UASP規範,定義了就是如何在USB 2.0和USB 3.0上實現對應的UAS協議。
當Host和Device都實現了此UAS協議的話,那麼Host將通過Host端的SCSI Software Stack去訪問Device,而USB的Interface也將從功能上看,變成Host Stack中的另外一個SCSI Host Adapter。Device需要實現SAM4的架構模型,這樣Host也就可以查詢(Queue)Device中的命令了,以及對應效能的提升。
【總結】為了克服舊的BOT協議的匯流排利用率不高的缺點,所以定義了新的UAS協議,即UASP,來提升USB的傳輸效率,提升USB速度。當然,我們此處為了實現隨身碟功能的話,當然希望效能越高越好了,所以,這個協議也是我們應該好好研究的。
2.1.2. USB MSC的各個協議之間關係總結
為了說明清楚USB Mass Storage各個協議的關係,我們先給這些協議編個號:
①USB Mass Storage Class Control/Bulk/Interrupt (CBI) Transport
②USB Mass Storage Class Bulk-Only (BBB) Transport
③USB Mass Storage Class Universal Floppy Interface (UFI) Command Specification
④USB Mass Storage Class Bootability Specification
⑤USB Mass Storage Class Compliance Test Specification
⑥USB Lockable Storage Devices Feature Specification (LSD FS)
⑦USB Mass Storage Class USB Attached SCSI Protocol (UASP)
直接用圖來表示USB MSC各個協議之間的關係,顯得更加直觀:
圖 2.7. USB Storage Class Protocol Relation
如,我們隨身碟實現的功能,主要就是資料的讀寫,而Device和Host之間的資料通訊,主要有兩種:
- CBI:主要用於Floppy裝置,所以新的裝置,都很少用此協議
- BOT:Bulk-Only Transport,也稱BBB(Bulk/Bulk/Bulk),
而對於BOT/BBB來說,對其提高USB匯流排利用率,提高了USB速度後,就是對應的UASP協議,故此處稱UASP為BOT的增強版的協議。
協議方面說完了,再來看看USB Device這一端。
而USB的Device端,根據內部資料存放區的介質類型不同,又分兩種:
- 一種是Floppy裝置,對應用的是UFI Command Set;
- 而另外一種,就是我們常見的Flash Memory,對應的是用SCSI Command Set。
而SCSI協議,本身就是有的了,所以不是屬於USB MSC協議範疇,即SCSI只是和USB MSC相關的協議。
同樣的,對於USB Device本身,如果需要一些用到其他的特性,比如可啟動性,相容性,可鎖定性等等,那麼分別對應的規範是
④USB Mass Storage Class Bootability Specification
⑤USB Mass Storage Class Compliance Test Specification
⑥USB Lockable Storage Devices Feature Specification (LSD FS)
【總結】至此,各個協議和規範之間的關係,就很容易理解了。上面這麼多協議中,其中我們所要關心的,只有三個規範,如前面的圖中,已經用星號標識出來了:
-
最需要關心的是BOT,即Host和Device間資料通訊的協議
★★★ ②USB Mass Storage Class Bulk-Only (BBB) Transport
-
其次,需要關心USB Device內部和資料存放區介質之間通訊的協議
★★ SCSI - Small Computer System Interface
-
最後,對於,如果要實現更好的效能,那麼需要關心BOT的升級版
★⑦USB Mass Storage Class USB Attached SCSI Protocol (UASP)
2.1.3. 隨身碟與USB中的Class,Subclass和Protocol的對應關係
對應的,瞭解USB的都知道,每個裝置的描述符中,都有對應下面這幾個域:
- bInterfaceClass
- bInterfaceSubClass
- bInterfaceProtocol
分別對應著USB的Class,Subclass,Protocol。
而對於我們此處的隨身碟:
2.1.3.1. bInterfaceClass=0x08=Mass Storage
Class就是USB Mass Storage Class,
2.1.3.2. bInterfaceSubClass=0x06=SCSI Transparent
Subclass,所支援的列表如下:
圖 2.8. SubClass Codes Mapped to Command Block Specifications
2.1.3.3. bInterfaceProtocol=0x50=Bulk Only Transport
Protocol,所支援的列表如下:
圖 2.9. Mass Storage Transport Protocol
從上面這些規範中所定義的支援的協議來看,加上色塊的那幾個,也就是我們前面所解釋過的,需要我們關心和研究的協議,即SCSI,BBB和UAS。
USB Mass Storage大型存放區的基本知識