解除30MB/s魔咒! 实战USB 2.0大提速
目前由于设备传输速率限制以及USB 3.0 5Gbps传输带宽的冗余,UASP协议并没有急于展开,另外要实现UASP协议的支持,除了主控设备,终端设备也需要支持UASP,终端设备的芯片设计难度将会加大,这使得闪存等小型存储设备的成本和体积将会显著增加,不利于产品推广,现有的一些支持UASP的设置仅限于外置存储。
30MB/s成了USB 2.0存储设备的实际极限速度
回归到主流的USB 2.0设备上来,前文我们已经提到,受BOT传输协议、编码方式的影响USB 2.0传输速度被限制在35MB/s以下,也就是说USB 2.0传输带宽还有不小的提升空间。
USB 2.0使用了NRZI(Non-Return-to-Zero Inverted)编码,它是基于串行传输模式,传输连续的0、1字符串。在RZ(Return-to-zero Code)编码中,正电平代表逻辑1,负电平代表逻辑0,并且每传输完一位数据,信号返回到零电平,也就是说,信号线上会出现3种电平:正电平、负电平、零电平。
而零电平因为是附加的内容浪费传输带宽,所以需要去掉归零,于是就变化成了NRZ(Non-return-to-zero Code)编码。在USB传输中,每个USB数据包,最开始都有个同步域(SYNC),这个域固定为0000 0001,这个域通过NRZI编码之后,就是一串方波,接受者可以用这个SYNC域来同步之后的数据信号。此外,因为在USB的NRZI编码下,逻辑0会造成电平翻转,所以接受者在接受数据的同时,根据接收到的翻转信号不断调整同步频率,保证数据传输正确。
但是,这样还是会有一个问题,就是虽然接受者可以主动和发送者的频率匹配,但是两者之间总会有误差。假如数据信号是1000个逻辑1,经过USB的NRZI编码之后,就是很长一段没有变化的电平,在这种情况下,即使接受者的频率和发送者相差千分之一,就会造成把数据采样成1001个或者999个1了。
USB对这个问题的解决办法,就是强制插0,也就是传说中的bit-stuffing,如果要传输的数据中有7个连续的1,发送前就会在第6个1后面强制插入一个0,让发送的信号强制出现翻转,从而强制接受者进行频率调整。接受者只要删除6个连续1之后的0,就可以恢复原始的数据了。
由于强制插0保持发送者和接收者频率同步会造成USB 2.0传输带宽的浪费,浪费的大小则根据插0的多少而不同。这样USB 2.0 60MB/s的传输带宽就要打一定折扣了。对于USB 3.0来说,由于要保证高达5Gbps数据传输的正确性,采用了时下流行的8b/10b编码方式,有效数据利用率为80%。也就是USB 3.0的有效数据传输带宽为500MB/s。