现在自己写的PC端应用程序和Microsoft提供的USB驱动程序Usbsamp终于可以成功实现BULK /INT传输和有数据/无数据传输控制请求等功能(固件程序为cypress提供的范例)。现在的问题是关于传输速度。
Cypess的USB接口是USB2.0的高速接口,进行BULK传输的时候,端点最大的包大小按照USB规范是512个字节,并且USB数据的传输是基于令牌的,也就是说假如设备打算要向主机发送数据,必须先由主机发送一个IN的令牌,设备收到令牌后,紧接着在其第二阶段送出要发送的数据,如此完成一个数据的IN操作。而规范上定义令牌发送的间隔是1毫秒,这样就意味着如果按照BULK传输最大512字节的规定,则最大传输速率是512字节*(1/1毫秒)=512K字节/秒。不过规范上也说到一个令牌后面可以跟多个USB传输事务,也就是个令牌(1帧)最大可以跟15个512字节的数据,1毫秒的间隔,这样可以达到512字节*15*1000 = 7680K字节/秒,即7.5MB/s,这位理论最大传输速度。
现在我在BUS HOUND5上看到传输的速度大约只有600KB/S不到,显然这个速度很不理想。我的问题是怎样才能在传输的时候在一帧内连续传输15个事务使USB传输速度最快?还请大家不吝赐教,谢谢! |