搜索
bottom↓
回复: 27

关于USB通信速度的疑问

[复制链接]

出0入0汤圆

发表于 2019-4-11 09:46:09 | 显示全部楼层 |阅读模式
最近在做USB相关的通信,USB协议果然很复杂。协议有SOF首帧,在全速模式下,主机会每1mS发一次。那么在USB半双工属性下,意思是主机和设备 一个来回通信的最短响应时间是大于2mS的。

不知道我的描述是否正确,请大神指正。再则提高响应速度的方向是什么呢?谢谢!

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2019-4-11 10:14:26 | 显示全部楼层
不是大神,USB3.0是125us 一次 ,USB 2.0是1ms一次 ,更快就USB3.0了

出0入442汤圆

发表于 2019-4-11 10:18:41 | 显示全部楼层
最短响应是1ms,你傻啊,你又不用等主机发下一帧再回应。

出0入0汤圆

发表于 2019-4-11 10:19:25 | 显示全部楼层
跟SOF没关系,SOF可以简单的认为是一个心跳包,用于判定设备是否还处于连接状态。

出10入61汤圆

发表于 2019-4-11 11:32:41 | 显示全部楼层
我是这样理解的: USB是主从式,必须由HOST端发起. DEVICE要上传数据怎么办? 必须由HOST端不停的询问是否有数据要上传,这个最短响应时间全速就是1Ms(USB键盘响应速度不如PS2的原因). 一旦开始传输了,只有有ACK回应就可以马上传输下一包了。不用再等1ms.

出0入0汤圆

发表于 2019-4-11 12:35:18 | 显示全部楼层
如果用bulk传输,full speed情况下一个来回可以很短,比如<0.2ms。但是主机不保证传输时间,总线上其它设备可能影响通信时间。如果用interrupt传输,那主机可以保证在指定时间内传输。

出0入0汤圆

发表于 2019-4-11 12:58:26 | 显示全部楼层
tcm123 发表于 2019-4-11 11:32
我是这样理解的: USB是主从式,必须由HOST端发起. DEVICE要上传数据怎么办? 必须由HOST端不停的询问是否 ...

USB键盘响应速度不如PS2?PS2传输一个字节要0.66ms到1.1ms。PS2键盘按一个键马上松开,至少3个字节,用时1.98ms到3.3ms之间。USB也只需2ms。它俩时间不相上下。。。人手速一般很慢的,不用这么快的查询。一般USB键盘8ms查询一下。

出0入0汤圆

 楼主| 发表于 2019-4-11 21:07:49 | 显示全部楼层
albert.hu 发表于 2019-4-11 10:14
不是大神,USB3.0是125us 一次 ,USB 2.0是1ms一次 ,更快就USB3.0了

恩 了解了下 3.0是每125us发一次。

出0入0汤圆

 楼主| 发表于 2019-4-11 21:09:33 | 显示全部楼层
wye11083 发表于 2019-4-11 10:18
最短响应是1ms,你傻啊,你又不用等主机发下一帧再回应。

  这不是刚了解嘛 有不明白的也正常。

出0入0汤圆

 楼主| 发表于 2019-4-11 21:10:02 | 显示全部楼层
enterpriseZ 发表于 2019-4-11 10:19
跟SOF没关系,SOF可以简单的认为是一个心跳包,用于判定设备是否还处于连接状态。 ...

恩 好的 谢谢!

出0入0汤圆

 楼主| 发表于 2019-4-11 21:11:24 | 显示全部楼层
tcm123 发表于 2019-4-11 11:32
我是这样理解的: USB是主从式,必须由HOST端发起. DEVICE要上传数据怎么办? 必须由HOST端不停的询问是否 ...

是的呢。 我的想法和你的相同

出0入0汤圆

 楼主| 发表于 2019-4-11 21:19:19 | 显示全部楼层
caixiuwen 发表于 2019-4-11 12:35
如果用bulk传输,full speed情况下一个来回可以很短,比如

高速最小125us 全速最小1ms

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2019-4-11 21:30:00 | 显示全部楼层
huqinglun 发表于 2019-4-11 21:19
高速最小125us 全速最小1ms

我说可以用bulk传输。。。没说全速中断传输可以小于1ms。。。

出0入0汤圆

 楼主| 发表于 2019-4-11 21:33:42 | 显示全部楼层
caixiuwen 发表于 2019-4-11 21:30
我说可以用bulk传输。。。没说全速中断传输可以小于1ms。。。

哦 了解了 看错了

出0入0汤圆

发表于 2019-4-11 21:36:46 | 显示全部楼层
caixiuwen 发表于 2019-4-11 21:30
我说可以用bulk传输。。。没说全速中断传输可以小于1ms。。。

理论上也可以吧  in out管道是并行的  同一个sof内 单片机先收到out包  同周期内返回in包
控制传输不行  一次事物只能是读或者写

出0入0汤圆

发表于 2019-4-11 21:42:19 | 显示全部楼层
huqinglun 发表于 2019-4-11 21:33
哦 了解了 看错了

首先楼主USB数据量多大  比如发送100m数据返回1个字节的来回交互  肯定不行   先假设为单包数据来回  快的情况可以本次收到本次就返回  但是USB数据是直接跟主板接口芯片交道  芯片再跟CPU交道  CPU再执行你的进程  最终你的程序来回一趟时间就不好说了

出0入0汤圆

发表于 2019-4-11 21:44:41 | 显示全部楼层
huangqi412 发表于 2019-4-11 21:36
理论上也可以吧  in out管道是并行的  同一个sof内 单片机先收到out包  同周期内返回in包
控制传输不行   ...

这个是可行的,但你不能保证先收到OUT,主机可能先发IN。或者主机在OUT后紧接着发IN,设备可能来不及准备。

出0入8汤圆

发表于 2019-4-11 21:53:43 来自手机 | 显示全部楼层
理论上可以用bulk传输把USB带宽占满
然后在这个被占满了的带宽上传数据
举个例子:
主机从机不停的收发数据,没有有效数据时,数据全为0。
当有数据要发送时,立即填入当前的URB中
接收方不停的从数据流中判断是否有有效数据

出0入85汤圆

发表于 2019-4-11 22:14:31 | 显示全部楼层
你说的是HID方式吧,bulk或者虚拟串口没有1ms限制

出0入0汤圆

发表于 2019-4-12 08:27:53 | 显示全部楼层
canspider 发表于 2019-4-11 21:53
理论上可以用bulk传输把USB带宽占满
然后在这个被占满了的带宽上传数据
举个例子:

最终最终还是要看楼主上位机

出0入0汤圆

发表于 2019-4-12 09:29:56 | 显示全部楼层
canspider 发表于 2019-4-11 21:53
理论上可以用bulk传输把USB带宽占满
然后在这个被占满了的带宽上传数据
举个例子:

不赞同这个观点。占满带宽完全没必要,也没有用。
总线上如果没有其它设备,那完全没必要传输没有用的数据。需要的时候传输就可以了。
总线上如果有其它设备,其它设备要进行bulk传输的话,你的设备不会优先级更高,按照公平使用的原则,你的设备不会占满带宽了。如果其他设备有ISO或者INT传输,那直接就比bulk优先了。bulk可用的带宽更少了。。。试图占满带宽反而可能会造成额外的延时。

出0入8汤圆

发表于 2019-4-12 09:58:05 | 显示全部楼层
caixiuwen 发表于 2019-4-12 09:29
不赞同这个观点。占满带宽完全没必要,也没有用。
总线上如果没有其它设备,那完全没必要传输没有用的数 ...

占满带宽只是为了让主机一直和从机通讯,这样就可以在任意时刻开始数据传输,不用等SOF或者是某一包传输完成
如果bulk不行还可以用ISO传输,12M的全速设备,1ms一帧,1帧最多可以传1023字节的ISO数据,理论上最快响应速度是1ms
如果要再提高,你可以在数据的发送过程中改写URB缓存。比如发到第10字节时来了数据,那就从第11字节开始填,这样不用等下一个SOF。

出0入0汤圆

发表于 2019-4-12 10:42:40 | 显示全部楼层
canspider 发表于 2019-4-12 09:58
占满带宽只是为了让主机一直和从机通讯,这样就可以在任意时刻开始数据传输,不用等SOF或者是某一包传输 ...

你这是自己研究的结果?
首先,bulk本来就可以几乎在任意时刻开始传输数据。bulk不需要等SOF。不需要一直传输。
你的URB的说法是你试过了?还是只是想象的?已经提交的URB,再改变缓存内容,确定不会造成竞争问题?
如果全速传输是TT来的,那传到第10字节的时候,包可能早就在TT的缓存里了,你不可能实现改变第11个字节。
或者在早一点,在根端口传输这个包到第10字节的时候,第11个字节可能早已被读到主机控制器的FIFO里面了,你也没机会改了。
又或者是在主机控制器的DMA读到第10字节的时候改?这也不可能,像EHCI那些控制器,你不知道DMA读到哪里了。即使知道,你去改数据,也可能造成后面有的数据是新的,有的数据是老的被发送了。
所以你到底是怎么实现的?

出0入8汤圆

发表于 2019-4-12 13:59:16 来自手机 | 显示全部楼层
本帖最后由 canspider 于 2019-4-12 14:04 编辑
caixiuwen 发表于 2019-4-12 10:42
你这是自己研究的结果?
首先,bulk本来就可以几乎在任意时刻开始传输数据。bulk不需要等SOF。不需要一直 ...


你说的是主流驱动设计
要实现非主流的应用当然得采用非主流的方式
如果一个应用已经开始考虑USB数据包间隔带来的延时问题了,重新设计一套驱动不过分吧

如果主流USB控制器不支持,那么说明USB不能满足这样的需求了

关于TT你想复杂了,低速和高速间才会TT,这个时候按高速间隔处理就能满足低速要求

出0入0汤圆

发表于 2019-4-12 14:42:23 | 显示全部楼层
canspider 发表于 2019-4-12 13:59
你说的是主流驱动设计
要实现非主流的应用当然得采用非主流的方式
如果一个应用已经开始考虑USB数据包间 ...

那请你举例一个可以实现你的非主流设计的控制器。
我只看过一些USB控制器,用DMA的,都不支持看DMA传输到哪里了,不用DMA的,要CPU把FIFO写完后,才能开始传输。有的明说了,传输的时候CPU不能访问那个FIFO。自己重写驱动也不能实现不符合规范的操作啊。。。

我说得还不清楚么,bulk传输不需要等SOF,什么时候有数据了,什么时候发起传输。空闲的时候,只要不是正在发SOF或者一帧快结束了,基本上可以立即传输的。根本不需要传输无用的信息来保证及时发送。而且传输无用信息也不能保证你可以及时传输。我感觉你的逻辑就是,我现在把带宽占满了,整个总线就是我的了,我想传输啥都可以立即传输了。但是bulk传输是不保证带宽,你现在能占满带宽,是因为没人跟你抢,不表示你将来需要传输有效数据的时候也能立即占到带宽。

如果你能主机端的驱动都给重写了,那更不需要搞个占带宽的,想给谁高优先级就给谁高优先级。都按自己的来,还要规范干嘛。

出0入8汤圆

发表于 2019-4-12 16:31:49 来自手机 | 显示全部楼层
caixiuwen 发表于 2019-4-12 14:42
那请你举例一个可以实现你的非主流设计的控制器。
我只看过一些USB控制器,用DMA的,都不支持看DMA传输到 ...

这个不用举例吧,如你所说的控制器一旦发送改不了FIFO的,把每次传输的包拆小点就行了
你也说了,驱动都自己写了,同步传输的SOF等不等也无所谓了,一帧传多少次也是自己说了算,还能省点ACK的带宽

出0入0汤圆

发表于 2019-4-12 17:06:46 | 显示全部楼层
canspider 发表于 2019-4-12 16:31
这个不用举例吧,如你所说的控制器一旦发送改不了FIFO的,把每次传输的包拆小点就行了
你也说了,驱动都 ...

。。。。。。你这是承认了根本不可能中途改变内容了咯。每次传输的包拆小点?何必要发呢。。。简直了。
我说了,我反对的是没有数据要发的时候发些无效内容占带宽。根本没有用。

出0入8汤圆

发表于 2019-4-12 20:01:42 来自手机 | 显示全部楼层
caixiuwen 发表于 2019-4-12 17:06
。。。。。。你这是承认了根本不可能中途改变内容了咯。每次传输的包拆小点?何必要发呢。。。简直了。
...

是的,经过和你的讨论,发无效数据并没有什么用处
不改驱动,不能在中间插数据
改驱动,没必要发无效数据
总而言之无效数据没有用处
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-18 23:26

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表