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

[复制链接]
4650|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模式本来就慢的
lxyppc 发表于 2017-9-20 21:59 来自手机 | 显示全部楼层
huangqi412 发表于 2017-9-20 18:24
BULK发长包。。。   标准的USB转串口工程就能满足你。

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

说得对,这样算的话算上双向的话就不够了
我又仔细想了想
全速USB的HID单端点带宽理论上限是64K
考虑收发会分别用一个端点,带宽也是够的
 楼主| 火玉 发表于 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发送达不到
huangqi412 发表于 2017-9-21 09:22 | 显示全部楼层
lxyppc 发表于 2017-9-20 21:59
说得对,这样算的话算上双向的话就不够了
我又仔细想了想
全速USB的HID单端点带宽理论上限是64K

我也发现了,,,IN和OUT不同EP, 理论都可以按1MS&64BYTE并行,ST32的端点多,每个uart接口可以独占一个端点,不用做多路打包拆包。这样理论64K对每路都一样。  多接口HID复合设备,上下都简单方便。
huangqi412 发表于 2017-9-21 09:26 | 显示全部楼层
HID速度足够了,做成BULK得不偿失,又要装驱动,如果做单端点又要拆包打包,如果独占端点又跟HID一样搞。
 楼主| 火玉 发表于 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虚拟串口可以模拟多高的串口速率呢?
huangqi412 发表于 2017-9-21 09:29 | 显示全部楼层
火玉 发表于 2017-9-21 09:27
是使用USB CDC类的虚拟串口协议吗,对USB转串口不了解
计算了下3个usart,2路can单向数据传输
115200X3/1 ...

看后面回帖,,,还是HID清爽方便。
 楼主| 火玉 发表于 2017-9-21 09:51 | 显示全部楼层
huangqi412 发表于 2017-9-21 09:29
看后面回帖,,,还是HID清爽方便。

看到了。做了HID2个接口和3个接口实验,当设计为2个接口同时发送数据的时候,每个接口的发送速率为32KB/s,修改为3个接口同时发送数据的时候,每个接口的发送速率为21KB/s。从现象上看,速率是被接口平均分了
huangqi412 发表于 2017-9-21 09:57 | 显示全部楼层
火玉 发表于 2017-9-21 09:51
看到了。做了HID2个接口和3个接口实验,当设计为2个接口同时发送数据的时候,每个接口的发送速率为32KB/s ...

额,好久没看过USB,细节搞不清了,可能HID是整个设备带宽64K? 这个可以再测试下。
单端点上面算了速度也够,打包拆包很麻烦。
huangqi412 发表于 2017-9-21 09:59 | 显示全部楼层
火玉 发表于 2017-9-21 09:51
看到了。做了HID2个接口和3个接口实验,当设计为2个接口同时发送数据的时候,每个接口的发送速率为32KB/s ...

你试试两个接口都定为2MS,5MS还被分么,
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
 楼主| 火玉 发表于 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次数据。多接口为什么会平分速率呢
icecut 发表于 2017-9-22 10:40 | 显示全部楼层
hid st的cubemx提供了一个定制版, 就是比普通hid多了bulk接口.你可以看看.
我记得是不用多加驱动的.

纯粹hid是用于鼠标键盘这种,设计速度本来就慢.
虚拟串口也可以,驱动嵌入式还算比较好.
纯bulk的这种,驱动也是能找到公版的.hs的时候建议这么干
mmbs 发表于 2017-9-22 16:45 | 显示全部楼层
usb传输速度比这个快。
mmbs 发表于 2017-9-22 16:50 | 显示全部楼层
楼主这个是要使用串口发送数据吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

5

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部