打印
[STM32F1]

再问USB通讯速度的问题

[复制链接]
2831|22
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
JY-DX-JY|  楼主 | 2015-11-27 14:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我一个同事用STM32搞USB通讯,得出一个结论。
在全速模式下测试,用的中断传输,每发送64个数据,也就是一个包长,就要延时5ms,最少4ms,否则就会丢包。
请问高手,是不是这样?我感觉那不是会很大的限制USB通讯的速度吗?谢谢!
沙发
JY-DX-JY|  楼主 | 2015-11-27 15:10 | 只看该作者
顶一个。。。

使用特权

评论回复
板凳
s_f_tan| | 2015-11-27 15:36 | 只看该作者
中断传输的时间多少?
中断传输间隔最低1ms,每次64,应该可以到64kBs

使用特权

评论回复
地板
hwl1023| | 2015-11-27 15:37 | 只看该作者
你至少要把当前包发送出去再发另一个包吧。最好的办法是发当前包时判断标志位。

使用特权

评论回复
5
JY-DX-JY|  楼主 | 2015-11-27 15:42 | 只看该作者
本帖最后由 JY-DX-JY 于 2015-11-27 15:43 编辑
hwl1023 发表于 2015-11-27 15:37
你至少要把当前包发送出去再发另一个包吧。最好的办法是发当前包时判断标志位。 ...

谢谢!判断标志位的程序如何写呢?void EP1_SendData(uint8_t *buf)
{
    buf[0] = HID_REPORT_ID0;//REPORT_ID;  

    UserToPMABufferCopy(buf, ENDP1_TXADDR, HidLenth);
    SetEPTxCount(ENDP1, HidLenth);
    SetEPTxValid(ENDP1);
       
    SetEPRxStatus(ENDP1, EP_RX_VALID);
}
这是发送程序

使用特权

评论回复
6
JY-DX-JY|  楼主 | 2015-11-27 16:43 | 只看该作者
顶起来。。。。。。。。。

使用特权

评论回复
7
lxyppc| | 2015-11-27 17:06 | 只看该作者
啃标准
一两句话说不清楚
大概就是USB传输只能由主机发起
全速模式主机最快1ms发起一次请求
如果在请求前从机准备好数据,那就能传输
如果从机没准备好,等下一次请求
主机的请求频率由描述符决定

当传输完成就能准备下一包数据了,不需要去延时
看你的描述,你们没有去处理发送完成事件
而是去猜测一个延时,当然快不起来

使用特权

评论回复
8
JY-DX-JY|  楼主 | 2015-11-27 17:13 | 只看该作者
谢谢!这个东西不好搞,不知道怎么处理发送完成事件。

使用特权

评论回复
9
苏山人家| | 2015-11-27 17:51 | 只看该作者
我都感觉你同事都没有看描述符,端点配置的就是5ms,所以必须延时。这个时间可以最小到1ms,在端点描述符里面配置!

使用特权

评论回复
10
JY-DX-JY|  楼主 | 2015-11-27 18:09 | 只看该作者
谢谢!配置成1ms也要延时吧

使用特权

评论回复
11
ticomi| | 2015-11-27 19:37 | 只看该作者
一般很少使用中断传输,即使使用也是通常设置为10mS,如果想提高速度则要将查询时间设置为1mS。我测试的结果是1S可以通讯970余次!

使用特权

评论回复
12
leonliu_1128| | 2015-11-27 20:10 | 只看该作者
中断间隔是枚举时slave告诉host的,你只要照着设置就行。

使用特权

评论回复
13
le062| | 2015-11-27 23:49 | 只看该作者
中断可以1ms

使用特权

评论回复
14
le062| | 2015-11-27 23:50 | 只看该作者
但一般的主机上面,即使你配置了1ms的端点
主机仍然可能以4ms来轮训

追求响应速度的话,可以用同步传输

使用特权

评论回复
15
拉克丝| | 2015-11-28 11:14 | 只看该作者
可以设置个标志位判断是否发送了

使用特权

评论回复
16
huangqi412| | 2015-11-28 11:37 | 只看该作者
lxyppc 发表于 2015-11-27 17:06
啃标准
一两句话说不清楚
大概就是USB传输只能由主机发起

言简意赅

使用特权

评论回复
17
huangqi412| | 2015-11-28 11:44 | 只看该作者
如果描述符没问题,那应该是填充出了问题。
理论上是主机问你要,你再给(理论上填数据是不考虑时间的)。    实际上主机问你要你才慢吞吞给的话,已经慢了(你用超级牛X的FPGA当我没说,但是你用的是MCU)。   所以你每次得先准备好放在缓冲,主机问你要,让他自己从缓冲拿起就走。  想想快递吧,你先填单打包好放在门口收,与快递员上门收你才去打包填单。甚至太慢了快递员会发飙走人不做你生意的

使用特权

评论回复
18
huangqi412| | 2015-11-28 11:48 | 只看该作者
。。。。还有一个,USB从对主整包要补发0包。   不记得HID是不是也要补发0包了,应该是要的。     

使用特权

评论回复
19
huangqi412| | 2015-11-28 11:49 | 只看该作者
主对从不用补发0包

使用特权

评论回复
20
JY-DX-JY|  楼主 | 2015-11-28 11:59 | 只看该作者
感觉各位说的太深奥了。

使用特权

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

本版积分规则

个人签名:晴天响霹雳,平地一声雷。

245

主题

3351

帖子

30

粉丝