打印
[USB编程]

怎样配置MaxPacketSize大小,才能提高USB BULK模式的传输速率?

[复制链接]
8057|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wzc0694428961|  楼主 | 2016-8-7 23:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
现在自己写的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传输速度最快?还请大家不吝赐教,谢谢!

相关帖子

沙发
al21bj| | 2016-8-9 20:07 | 只看该作者
请教一下:
规范上定义令牌发送的间隔是1毫秒
一个令牌后面可以跟多个USB传输事务
这两个具体描述在哪?

使用特权

评论回复
板凳
LOVE_ELEC| | 2016-8-11 11:00 | 只看该作者
本帖最后由 LOVE_ELEC 于 2016-8-11 19:25 编辑

楼上正解,协议上输的是帧间隔,高速模式下是间隔1/8ms发送一个SOF,全速模式下是间隔1ms发送一个SOF。每个IN事务包都要有IN Token及令牌!所以每想获取一包数据就要发送一个In Token,楼主现在测试的速度是600KB左右,可能是因为每帧中只发送一次IN Token!高速模式下BULK传输每帧中最多可以发送13个IN Token。即13 * 512 * 8 KB/s = 53248KB/s。希望可以帮助楼主!

使用特权

评论回复
地板
LOVE_ELEC| | 2016-8-11 19:27 | 只看该作者
zhs2007 发表于 2016-8-11 15:07
不知道楼主这个15是从哪看到的?
USB2.0规范中有说明BULK端点,512字节包长度,每帧(准确地说应该叫微帧mi ...

刚才看了下协议,确实是每个微帧下最多只能有13个Bulk包。

使用特权

评论回复
5
wzc0694428961|  楼主 | 2016-8-19 22:16 | 只看该作者
LOVE_ELEC 发表于 2016-8-11 11:00
楼上正解,协议上输的是帧间隔,高速模式下是间隔1/8ms发送一个SOF,全速模式下是间隔1ms发送一个SOF。每个 ...

你好,谢谢你的解答!你说:高速模式下BULK传输每帧中最多可以发送13个IN Token。即13 * 512 * 8 KB/s = 53248KB/s。请问:每帧中如何设置才可以发送13个IN Token,是在驱动中设置,还是在应用程序中,还是固件程序?我是新手,望不吝赐教!

使用特权

评论回复
6
wzc0694428961|  楼主 | 2016-8-19 22:17 | 只看该作者
zhs2007 发表于 2016-8-11 10:29
有几点楼主你理解可能有些不准确。
1. 规范上没有要求”令牌包“传输间隔为1ms,对于BULK端点,HOST在完成 ...

谢谢你,我对协议确实研究的不透,谢谢你的帮助!

使用特权

评论回复
7
wzc0694428961|  楼主 | 2016-8-19 22:17 | 只看该作者
zhs2007 发表于 2016-8-11 15:07
不知道楼主这个15是从哪看到的?
USB2.0规范中有说明BULK端点,512字节包长度,每帧(准确地说应该叫微帧mi ...

谢谢你!

使用特权

评论回复
8
shiyh6222| | 2018-5-18 09:14 | 只看该作者
LOVE_ELEC 发表于 2016-8-11 11:00
楼上正解,协议上输的是帧间隔,高速模式下是间隔1/8ms发送一个SOF,全速模式下是间隔1ms发送一个SOF。每个 ...

您好,我请教一下,如何配置BULK传输中每微帧的跟随事务数?在哪个文件配置?

使用特权

评论回复
9
bear1| | 2019-7-30 13:55 | 只看该作者
LOVE_ELEC 发表于 2016-8-11 11:00
楼上正解,协议上输的是帧间隔,高速模式下是间隔1/8ms发送一个SOF,全速模式下是间隔1ms发送一个SOF。每个 ...

* 8 KB/s,为什么是8kB/s啊?

使用特权

评论回复
10
bear1| | 2019-7-30 14:01 | 只看该作者
wzc0694428961 发表于 2016-8-19 22:16
你好,谢谢你的解答!你说:高速模式下BULK传输每帧中最多可以发送13个IN Token。即13 * 512 * 8 KB/s =  ...

每帧中最多可以发送13个IN Token。
这个13是在哪里配置?谢谢

使用特权

评论回复
11
pattywu| | 2019-8-3 15:08 | 只看该作者
bear1 发表于 2019-7-30 13:55
* 8 KB/s,为什么是8kB/s啊?

每毫秒8次SOF,1秒就是8000次SOF。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

4

帖子

0

粉丝