打印
[STM32F1]

全速USB开发如何提高传输速度?

[复制链接]
3778|17
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
火玉|  楼主 | 2017-9-20 17:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
大家好,我现在做的一个项目是使用1路全速USB传输实现3路USART(115200bps)、2路can(500kbps)与上位机的通讯。现在使用的协议是hid协议,传输速度可以达到64kB/s,USB协议速度有点慢,实现了3个USART(115200bps)与2路can(50kbps)与上位机的通讯,与我们的项目目标差距很大。这是工控板项目,需要保证数据稳定性,我想请教下,怎么配置USB才能满足项目需求;
沙发
lxyppc| | 2017-9-20 17:34 | 只看该作者
115200X3/10=34560B
50kX2/8=12500B
加起来不到60KBytes/s的数据量,全速HID最快是64Kbyted
来得及

使用特权

评论回复
板凳
huangqi412| | 2017-9-20 18:24 | 只看该作者
BULK发长包。。。   标准的USB转串口工程就能满足你。

楼上没算双向,不过所有串口双向同时全速运行是极限情况不会出现,先可以按楼上毛估。

使用特权

评论回复
地板
mmuuss586| | 2017-9-20 21:06 | 只看该作者
采用BUCK缓冲上传模式,HID模式本来就慢的

使用特权

评论回复
5
lxyppc| | 2017-9-20 21:59 | 只看该作者
huangqi412 发表于 2017-9-20 18:24
BULK发长包。。。   标准的USB转串口工程就能满足你。

楼上没算双向,不过所有串口双向同时全速运行是极限 ...

说得对,这样算的话算上双向的话就不够了
我又仔细想了想
全速USB的HID单端点带宽理论上限是64K
考虑收发会分别用一个端点,带宽也是够的

使用特权

评论回复
6
火玉|  楼主 | 2017-9-21 09:16 | 只看该作者
lxyppc 发表于 2017-9-20 17:34
115200X3/10=34560B
50kX2/8=12500B
加起来不到60KBytes/s的数据量,全速HID最快是64Kbyted

3路usart,2路can(50kbps)可以用hid协议实现,但是项目需求是支持3路usart,2路can(500kbps),单ep发送达不到

使用特权

评论回复
7
huangqi412| | 2017-9-21 09:22 | 只看该作者
lxyppc 发表于 2017-9-20 21:59
说得对,这样算的话算上双向的话就不够了
我又仔细想了想
全速USB的HID单端点带宽理论上限是64K

我也发现了,,,IN和OUT不同EP, 理论都可以按1MS&64BYTE并行,ST32的端点多,每个uart接口可以独占一个端点,不用做多路打包拆包。这样理论64K对每路都一样。  多接口HID复合设备,上下都简单方便。

使用特权

评论回复
8
huangqi412| | 2017-9-21 09:26 | 只看该作者
HID速度足够了,做成BULK得不偿失,又要装驱动,如果做单端点又要拆包打包,如果独占端点又跟HID一样搞。

使用特权

评论回复
9
火玉|  楼主 | 2017-9-21 09:27 | 只看该作者
huangqi412 发表于 2017-9-20 18:24
BULK发长包。。。   标准的USB转串口工程就能满足你。

楼上没算双向,不过所有串口双向同时全速运行是极限 ...

是使用USB CDC类的虚拟串口协议吗,对USB转串口不了解
计算了下3个usart,2路can单向数据传输
115200X3/10=34560B
500kX2/8=125000B
加起来大约160KB/s。
我想问一下全速USB虚拟串口可以模拟多高的串口速率呢?

使用特权

评论回复
10
huangqi412| | 2017-9-21 09:29 | 只看该作者
火玉 发表于 2017-9-21 09:27
是使用USB CDC类的虚拟串口协议吗,对USB转串口不了解
计算了下3个usart,2路can单向数据传输
115200X3/1 ...

看后面回帖,,,还是HID清爽方便。

使用特权

评论回复
11
火玉|  楼主 | 2017-9-21 09:51 | 只看该作者
huangqi412 发表于 2017-9-21 09:29
看后面回帖,,,还是HID清爽方便。

看到了。做了HID2个接口和3个接口实验,当设计为2个接口同时发送数据的时候,每个接口的发送速率为32KB/s,修改为3个接口同时发送数据的时候,每个接口的发送速率为21KB/s。从现象上看,速率是被接口平均分了

使用特权

评论回复
12
huangqi412| | 2017-9-21 09:57 | 只看该作者
火玉 发表于 2017-9-21 09:51
看到了。做了HID2个接口和3个接口实验,当设计为2个接口同时发送数据的时候,每个接口的发送速率为32KB/s ...

额,好久没看过USB,细节搞不清了,可能HID是整个设备带宽64K? 这个可以再测试下。
单端点上面算了速度也够,打包拆包很麻烦。

使用特权

评论回复
13
huangqi412| | 2017-9-21 09:59 | 只看该作者
火玉 发表于 2017-9-21 09:51
看到了。做了HID2个接口和3个接口实验,当设计为2个接口同时发送数据的时候,每个接口的发送速率为32KB/s ...

你试试两个接口都定为2MS,5MS还被分么,

使用特权

评论回复
14
lxyppc| | 2017-9-21 10:38 | 只看该作者
火玉 发表于 2017-9-21 09:27
是使用USB CDC类的虚拟串口协议吗,对USB转串口不了解
计算了下3个usart,2路can单向数据传输
115200X3/1 ...

全速USB总带宽900K byte/s左右
最快全双工串口可以到450K

使用特权

评论回复
15
火玉|  楼主 | 2017-9-21 10:40 | 只看该作者
huangqi412 发表于 2017-9-21 09:59
你试试两个接口都定为2MS,5MS还被分么,

2个接口轮询周期设置为2ms,接口1速率30KB/s,接口2速率为11KB/s,好像接口1读了3次数据,接口2才会读1次数据。多接口为什么会平分速率呢

使用特权

评论回复
16
icecut| | 2017-9-22 10:40 | 只看该作者
hid st的cubemx提供了一个定制版, 就是比普通hid多了bulk接口.你可以看看.
我记得是不用多加驱动的.

纯粹hid是用于鼠标键盘这种,设计速度本来就慢.
虚拟串口也可以,驱动嵌入式还算比较好.
纯bulk的这种,驱动也是能找到公版的.hs的时候建议这么干

使用特权

评论回复
17
mmbs| | 2017-9-22 16:45 | 只看该作者
usb传输速度比这个快。

使用特权

评论回复
18
mmbs| | 2017-9-22 16:50 | 只看该作者
楼主这个是要使用串口发送数据吗?

使用特权

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

本版积分规则

1

主题

5

帖子

0

粉丝