你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

FULL-SPEED USB中断传输提升传输速度

[复制链接]
黑云龙霸 提问时间:2017-9-22 09:16 /

大家好,现在在做一个接口板项目,开发平台STM32F105RBT6,使用USB,3路USART(115200bps)、2路can(500kbps)与上位机的通讯。
现在项目做了一部分,使用中断传输方式传输数据,因为USB是FULL-SPEED设备,CAN只能做到50K,达不到项目需求。


现在碰到困难,中断传输速度只有64KB/s,太慢了。怎么才能提高全速设备中断传输的速度呢?

收藏 评论11 发布时间:2017-9-22 09:16

举报

11个回答
MrJiu 回答时间:2017-9-22 09:25:40
加buffer,和使用DMA!!!
黑云龙霸 回答时间:2017-9-22 10:25:19
MrJiu 发表于 2017-9-22 09:25
加buffer,和使用DMA!!!

不好意思,不明白加buffer是在哪里加,可以详细说一下吗
MrJiu 回答时间:2017-9-22 14:23:32
黑云龙霸 发表于 2017-9-22 10:25
不好意思,不明白加buffer是在哪里加,可以详细说一下吗

就是增大缓存。。。。
xiaoxiao0932 回答时间:2019-5-16 13:34:56
MrJiu 发表于 2017-9-22 14:23
就是增大缓存。。。。

你好!
请教有关STM32 USB CDC通信的问题
1、我使用的是stm32L476RG,使用USB CDC 将flash中的数据读取到pc,USB的传输速度只能在300K/S左右,看到你在论坛中说过增大缓存可以提高速度,这个缓存指的是什么?发送的数组?
2、如何使用DMA  
STM32CubeMX生成的代码中,有关USB-DMA的操作在什么地方?如何使用的,还请多多指教啊
天臆弄人 回答时间:2019-5-17 09:00:58
xiaoxiao0932 发表于 2019-5-16 13:34
你好!
请教有关STM32 USB CDC通信的问题
1、我使用的是stm32L476RG,使用USB CDC 将flash中的数据读取到 ...

你听他瞎扯,中断传输,全速就是64K的速率,USB没有DMA配置,只有RAM到RAM配置,
要想速率快看下我发的贴子,USB发速度可以到700K,接收可以到650K
xiaoxiao0932 回答时间:2019-5-17 09:31:17
天臆弄人 发表于 2019-5-17 09:00
你听他瞎扯,中断传输,全速就是64K的速率,USB没有DMA配置,只有RAM到RAM配置,
要想速率快看下我发的贴 ...

还请帮忙啊,我在你的主题中只找到了测试了下STM32f103 CDC 的速率
只有截图,没有代码相关的信息啊,具体有关USB CDC传输数据的相关内容在哪个帖子里呢?
天臆弄人 回答时间:2019-5-17 09:33:03
xiaoxiao0932 发表于 2019-5-17 09:31
还请帮忙啊,我在你的主题中只找到了测试了下STM32f103 CDC 的速率
只有截图,没有代码相关的信息啊,具 ...

你的是F4 我的是F1呀,关于速率问题,和上位机有关,
xiaoxiao0932 回答时间:2019-5-17 09:41:12
天臆弄人 发表于 2019-5-17 09:33
你的是F4 我的是F1呀,关于速率问题,和上位机有关,

USBD_CDC_SetTxBuffer(&USBD_Device, (uint8_t*)pBuf, 64);
USBD_CDC_TransmitPacket(&USBD_Device);
我用的是L476RG进行USB cdc数据传输的,通过上面的函数发送到PC端,如果将64改为更大256/512/1024/就会出现数据丢包的现象。
我想问的是:
1、你在发送数据时,每包数据的长度为多少?64? 128?256?512?1024?
2、比如说给PC端发送一个50M的数据,多次发送,PC端每次接收的数据是否一致?是否验证过?
3、在满足问题2 的情况下,USB的传输速度能达到多少?
xiaoxiao0932 回答时间:2019-5-17 09:48:38
天臆弄人 发表于 2019-5-17 09:33
你的是F4 我的是F1呀,关于速率问题,和上位机有关,

这个审核机制时间好长啊
xiaoxiao0932 回答时间:2019-5-17 09:48:57
天臆弄人 发表于 2019-5-17 09:33
你的是F4 我的是F1呀,关于速率问题,和上位机有关,

USBD_CDC_SetTxBuffer(&USBD_Device, (uint8_t*)pBuf, 64);
USBD_CDC_TransmitPacket(&USBD_Device);
我用的是L476RG进行USB cdc数据传输的,通过上面的函数发送到PC端,如果将64改为更大256/512/1024/就会出现数据丢包的现象。
我想问的是:
1、你在发送数据时,每包数据的长度为多少?64? 128?256?512?1024?
2、比如说给PC端发送一个50M的数据,多次发送,PC端每次接收的数据是否一致?是否验证过?
3、在满足问题2 的情况下,USB的传输速度能达到多少?
xiaoxiao0932 回答时间:2019-5-17 09:49:14
USBD_CDC_SetTxBuffer(&USBD_Device, (uint8_t*)pBuf, 64);
USBD_CDC_TransmitPacket(&USBD_Device);
我用的是L476RG进行USB cdc数据传输的,通过上面的函数发送到PC端,如果将64改为更大256/512/1024/就会出现数据丢包的现象。
我想问的是:
1、你在发送数据时,每包数据的长度为多少?64? 128?256?512?1024?
2、比如说给PC端发送一个50M的数据,多次发送,PC端每次接收的数据是否一致?是否验证过?
3、在满足问题2 的情况下,USB的传输速度能达到多少?
关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版