天天看點

SCSI與USB的關系

SCSI與USB的關系

由于BusHound在使用過程中,直接把USB和SCSI混為一談,相關設計的時候這些東西也經常放在一起來講,導緻稍微缺乏經驗的人傻傻分不清楚。是以在這裡特别說明一下SCSI和USB分别是什麼東西,以及他們是怎麼聯系在一起的。

一、USB概述

簡介

通用串行總線 (Universal Serial Bus,USB) 是一種新興的并逐漸取代其他接口标準的資料通信方式,由 Intel、Compaq、Digital、IBM、Microsoft、NEC及Northern Telecom 等計算機公司和通信公司于1995年聯合制定,并逐漸形成了行業标準。USB 總線作為一種高速串行總線,其極高的傳輸速度可以滿足高速資料傳輸的應用環境要求,且該總線還兼有供電簡單(可總線供電)、安裝配置便捷(支援即插即用和熱插拔)、 擴充端口簡易(通過集線器最多可擴充127 個外設)、傳輸方式多樣化(4 種傳輸模式),以及相容良好(産品更新後向下相容)等優點。

以上摘自百度百科,但是可以看到通篇都沒有提到半點SCSI。實際上USB就是一種資料傳輸總線,需要注意的是他傳輸的是資料,以USB線作為載體,至于資料要怎麼使用,那才是SCSI的事情,USB隻負責把資料發送出去和接收回來。是以不管你發送的是指令,還是狀态還是什麼的,在USB看來都是資料包。

是以從資料傳輸這一層面上,它與Uart、IIC并沒有太大差別,都是一種約定好的資料傳輸協定。不過倘若打開USB協定文檔,就會直呼:這跟Uart哪裡一樣了!

SCSI與USB的關系

在這裡概括一下這幾層每一章的内容:

1.Mechanical

機械接口标準,也就是眼睛能看到的那個USB接口的制造标準

SCSI與USB的關系

類似這樣的,USB接口還有很多種形态,不一一列舉了

2. Physical Layer

這一層是模電到數電的信号轉換,也就是相關的電氣要求

SCSI與USB的關系

有個對這一層進行的測試就是眼圖測試。

3. Link Layer

即為鍊路層,這一層主要是主要工作是保證資料包在連線當中的正确傳輸。為了保證提高容錯率,還提供了編碼糾錯。

SCSI與USB的關系

本章的重點是定義資料包和Link指令結構、Link層控制和電源管理功能、Link訓練狀态機(LTSSM)

4. Protocal Layer

協定層,控制的是端到端的資料流,這一層是建立在鍊路層成功傳輸的基礎上。

SCSI與USB的關系

在U3當中,這一層看到的已經是協定層傳輸了,比如NRDY,ACK,STALL等狀态操作,還有Data Packet的IN,OUT資料包傳輸。

5. Device Framework

USB裝置可以簡單的分為三層,底層是傳輸和接收資料的總線接口,即為前面4個小節的内容。

中間層負責處理總線接口和各種類型終端的資料,即為這一章的内容。主要負責的有端點的傳輸類型(控制傳輸/中斷傳輸/批量傳輸),最大的資料負載容量,資料包數量等等。還有一些對端點的描述(Get Descriptor)。

最上層為SCSI将通過總線傳遞過來的資料進行解析,然後實作指定功能,例如将滑鼠裝置傳遞的資料按照SCSI協定轉換成指針的運動。

有一個常見的USB協定測試就是九章測試(Chapter9 Test),就是因為Device Framework這一章在協定文檔裡面是第九章,是以叫九章測試(我被困惑好幾年)。

到這裡終于看到SCSI的影子了,實際上在USB協定文檔裡絲毫沒有提及SCSI。是以理論上SCSI是可以建立在任何資料傳輸總線上的,是為了提供特定功能而規定的協定,下面開始介紹SCSI。

二、SCSI和BOT/UASP

1. SCSI

小型計算機系統接口(SCSI,Small Computer System Interface)是一種用于計算機及其周邊裝置之間(硬碟、軟驅、光驅、列印機、掃描器等)系統級接口的獨立處理器标準。

從上面的内容可以看出,SCSI并不是跟USB綁定的協定,任何在Host上資料總線傳輸的資料,都可以通過SCSI協定來實作指定功能。比如滑鼠的資料先按照SCSI協定編碼,經過USB傳到電腦,電腦通過SCSI協定解析出滑鼠進行的操作,回報到指針。同樣滑鼠也可以通過PS/2接口傳輸資料,也是使用SCSI進行解析,USB和PS/2在通訊當中起到的隻是資料橋梁的作用。

SCSI協定就不在這裡介紹了,有興趣進一步了解的可以參考文檔 SCSI Commands Reference Manual--SEAGATE

繼續再說一下比較重要但卻經常被忽略的,被夾在SCSI和USB中間的BOT和UASP。

2. BOT

BOT全稱是Bulk-Only Transpot,指的是整個傳輸過程隻使用USB Device Framework的批量傳輸(Bulk Transers),另外跟批量傳輸對應的還有控制傳輸(Control Transfers),中斷傳輸(Interrupt Transfers)和同步傳輸(Isochronous Transfers)。不同模式的傳輸是不同裝置所使用的,不過都會在上盤枚舉階段使用控制傳輸。例如儲存設備,使用的都是批量傳輸。滑鼠、鍵盤等資料量小但是傳輸頻繁的使用的是中斷傳輸。VCD,DVD光驅等需要大量且要求及時性的裝置使用的是同步傳輸。關于不同類型傳輸的特點和說明,網上有很多更詳細的介紹,這裡就不細說了。

BOT是基于USB資料包傳輸的基礎上,為了配合SCSI協定,專門為大容量儲存設備量身打造,在USB和SCSI中間又添加了一層協定(某軟體大佬曾說過沒有什麼結構是分層解決不了的。。),關于BOT的的協定文檔是usbmassbulk_10

高度概括一下BOT的内容就是:

1、一次傳輸由CBW開始,到CSW結束,可以有或者沒有DATA階段。

2、USB在剛上盤的階段會進行控制傳輸,給SCSI擷取一些資訊,其中包括判斷是否為BOT模式。

3. UASP

後來随着科技的發展和進步,其他各類傳輸都在突飛猛進,此時BOT逐漸達到性能瓶頸,弱點漸漸出現了:

1、一條指令必須從CBW開始到CSW結束後,才能開始下一條指令的傳輸。

2、沒有類似Trim等公有指令。

...

...

後來起不好名字的USB-IF組織為了能夠針對發揮USB3.0 5Gbps接口的總線使用率,推出了基于針對SCSI進行特殊優化的UASP協定。

SCSI與USB的關系

UASP全稱USB Attached SCSI Protocol,從名字就能可以看出其針對性。UASP相比BOT最大的改變就是指令可以并行的發送,類似SATA的NCQ功能。另外支援UASP的Host都使用了單獨的控制晶片,不會消耗CPU資源。關于UASP相關的協定文檔是 USB Attached SCSI -2

盡管從BOT換到了UASP,但是SCSI協定的操作還是基本保持一緻的,除了多了幾個公有指令要處理。

最後總結一下就是,最底層資料傳輸使用的USB,功能實作使用的SCSI,為了使USB和SCSI能銜接在一起,添加了BOT和UASP,over