大容量存储设备一般指U盘、移动硬盘等,在这些设备上进行数据传输一般包括两层,物理传输层和命令块层。
物理传输层用于处理命令块,包括主机传输命令块到大容量类设备、主机与大容量设备间的数据传输和主机接收命令块处理状态。传输协议一般为Bulk-Only协议和CBI-Only协议,该层为命令块层提供命令块处理函数的统一接口,使命令块层不需要理会当前大容量类设备的传输协议。
命令块层包含在Bulk-Only协议的数据包内,包含了RBC、SFF-8020i/MMC-2、QIC-157、UFI、SFF-8070i和UFI等6个指令集,严格来说大容量类主机端的驱动都应该支持全部命令集,但实际上常用的大容量设备都使用UFI指令集。
USB 国际组织定义了大容量存储类(Mass Storage Class)的规范,包括四个独立的子类规范:
1) USB Mass Storage Class Control/Bulk/Interrupt (CBI) Transport;
2) USB Mass Storage Class Bulk-Only Transport;
3) USB Mass Storage Class ATA Command Block;
4) USB Mass Storage Class UFI Command Specification;
前两个子规范定义了USB大容量存储设备进行数据/命令/状态传输两种基本方法。Bulk- Only传输规范仅仅使用批量(Bulk)端点传送数据/命令/状态,CBI传输规范则使用控制(Control)、批量(Bulk)、中断
(Interrupt)三种类型端点进行数据/命令/状态传送。后两个子规范则定义了存储介质的操作命令。ATA命令规范用于硬盘,UFI命令规范是基于 SCSI- 2和SFF-8070i命令规范发展二来,其针对USB移动存储类设备。
在U盘的Host主机程序中,实际上只用到了上述4个规范的第2、4两个规范。
转载于:https://blog.51cto.com/lancelot/292103