SCSI与USB的关系

时间:2024-05-23 18:41:36

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