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哪里一样了!
在这里概括一下这几层每一章的内容:
1.Mechanical
机械接口标准,也就是眼睛能看到的那个USB接口的制造标准
类似这样的,USB接口还有很多种形态,不一一列举了
2. Physical Layer
这一层是模电到数电的信号转换,也就是相关的电气要求
有个对这一层进行的测试就是眼图测试。
3. Link Layer
即为链路层,这一层主要是主要工作是保证数据包在连线当中的正确传输。为了保证提高容错率,还提供了编码纠错。
本章的重点是定义数据包和Link命令结构、Link层控制和电源管理功能、Link训练状态机(LTSSM)
4. Protocal Layer
协议层,控制的是端到端的数据流,这一层是建立在链路层成功传输的基础上。
在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协议。
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