OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 9598|回复: 14

USB虚拟串口传输速度求助

[复制链接]

2

主题

6

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2015-1-29
在线时间
0 小时
发表于 2015-5-27 10:09:59 | 显示全部楼层 |阅读模式
5金钱

新手,求高手不吝赐教啊,用的是keil软件,Alientek-Mini-STM32开发板,STM32F103RC芯片;

本人用usb虚拟串口与PC机进行通讯,在ST官方例程Virtual_Com_Port_Loopback程序上,只让采集到的AD数据发送到PC机上进行显示,但是速度只有150KByte/s,和网上普遍说的可以达到500、600、800差很多,看到很多说改成bulk双缓冲,增加USB缓冲区的大小

[mw_shl_code=c,true]#define ENDP0_RXADDR (0x40) #define ENDP0_TXADDR (0x80) /* EP1 */ /* tx buffer base address */ #define ENDP1_TXADDR (0xC0) #define ENDP2_TXADDR (0x500) #define ENDP3_RXADDR (0x540) [/mw_shl_code]


我用的ENDP1端将数据发送到PC机上,将ENDP1与ENDP2 TXADDR之间的缓冲区增加到1024,传输速度还是没有改变;

还有就是网上所说的BULK双缓冲模式,到底要怎么更改啊,将AD采集到的数据怎么放到这两个缓冲区

[mw_shl_code=c,true] SetEPType(ENDP1, EP_BULK); SetEPDoubleBuff(ENDP1); SetEPDblBuffAddr(ENDP1, ENDP0_BUF0Addr, ENDP1_BUF1Addr); SetEPDblBuffCount(ENDP1, EP_DBUF_OUT, VIRTUAL_COM_PORT_DATA_SIZE); ClearDTOG_RX(ENDP1); ClearDTOG_TX(ENDP1); ToggleDTOG_TX(ENDP1); SetEPRxStatus(ENDP1, EP_RX_DIS); SetEPTxStatus(ENDP1, EP_TX_NAK); [/mw_shl_code]

其中ENDP0_BUF0Addr、EP_DBUF_OUT具体要怎么定义,怎么将AD采集的数据放到这两个缓冲区,怎么判断从哪个缓冲区将数据发送到PC机

还有就是AD数据传输到PC机的程序需要更改吗

[mw_shl_code=c,true]for(i=0;i<32;i++) ADC_CV=Get_Adc(1); Sdata[0]=ADC_CV>>8; Sdata[1]=ADC_CV&0xFF; Receive_Buffer[2*i]=Sdata[0]; Receive_Buffer[2*i+1]=Sdata[1]; } CDC_Send_DATA ((unsigned char*)Receive_Buffer,Receive_length); [/mw_shl_code]


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

58

主题

6294

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11569
金钱
11569
注册时间
2014-4-1
在线时间
1320 小时
发表于 2015-5-27 10:15:18 | 显示全部楼层
150KByte/s,怎么测的?是有效数据的速度吗?

怀疑这个数字都达不到。BUShound 显示的数字不实用。

虚拟串口提高速度的关键是协议,而协议又是很庞大的东西。缓冲区大小其实不重要。
回复

使用道具 举报

2

主题

6

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2015-1-29
在线时间
0 小时
 楼主| 发表于 2015-5-27 14:37:13 | 显示全部楼层
回复【2楼】xuande:
---------------------------------
我使用串口助手发送10s的数据,然后再自己计算
回复

使用道具 举报

2

主题

6

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2015-1-29
在线时间
0 小时
 楼主| 发表于 2015-5-27 15:11:52 | 显示全部楼层

这是10s接收到的数据量 一个数据就是1个字节 0F

回复

使用道具 举报

2

主题

184

帖子

0

精华

高级会员

Rank: 4

积分
701
金钱
701
注册时间
2014-8-17
在线时间
164 小时
发表于 2015-5-27 22:57:40 | 显示全部楼层
超级终端不是可以达到921600么
回复

使用道具 举报

2

主题

6

帖子

0

精华

新手上路

积分
34
金钱
34
注册时间
2015-1-29
在线时间
0 小时
 楼主| 发表于 2015-5-28 09:47:08 | 显示全部楼层
回复【5楼】保夫鲁沙:
---------------------------------
????
回复

使用道具 举报

1

主题

10

帖子

0

精华

新手上路

积分
20
金钱
20
注册时间
2015-12-27
在线时间
2 小时
发表于 2015-12-31 08:45:21 | 显示全部楼层
楼主,真的可以达到150K么,而且不丢失数据,我现在加AD测数据的话,基本到了40K左右就有数据的丢失,不晓得怎么解决啊
回复

使用道具 举报

9

主题

36

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
211
金钱
211
注册时间
2016-5-16
在线时间
67 小时
发表于 2016-5-25 16:33:00 | 显示全部楼层
楼主问题解决没?我最近也纠结这个问题,求指导
回复

使用道具 举报

29

主题

492

帖子

0

精华

高级会员

Rank: 4

积分
811
金钱
811
注册时间
2016-4-7
在线时间
123 小时
发表于 2016-5-25 20:58:26 | 显示全部楼层
同问,速度要加快,而且不丢数据,不然的话加USB通信芯片太麻烦,而且没例程可参考,我以前的产品方案是NXP的LPC1788芯片外加USB芯片ISP1301的,
回复

使用道具 举报

0

主题

3

帖子

0

精华

新手上路

积分
32
金钱
32
注册时间
2016-1-26
在线时间
9 小时
发表于 2016-5-25 21:29:00 | 显示全部楼层
我记得还要修改一个驱动配置文件。就可以将速度提升很多。
回复

使用道具 举报

5

主题

81

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1131
金钱
1131
注册时间
2015-5-31
在线时间
261 小时
发表于 2016-5-25 21:49:37 | 显示全部楼层
本帖最后由 Gohome_soon 于 2016-5-25 21:53 编辑

网上所说的800kb是自定义设备,上位机驱动是自己写的,stm32使用双缓冲;而且103要到达800Kb的速度前提是固定发送一个usb数据包(64字节),stm32不处理其他,只发送,发送速度能到达700~800KB




回复

使用道具 举报

43

主题

481

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1352
金钱
1352
注册时间
2014-12-24
在线时间
321 小时
发表于 2016-5-25 23:50:31 | 显示全部楼层
我测试过f407的虚拟串口,能达到800k
回复

使用道具 举报

9

主题

36

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
211
金钱
211
注册时间
2016-5-16
在线时间
67 小时
发表于 2016-5-26 11:06:01 | 显示全部楼层
Gohome_soon 发表于 2016-5-25 21:49
网上所说的800kb是自定义设备,上位机驱动是自己写的,stm32使用双缓冲;而且103要到达800Kb的速度前提是固 ...

我用的ST官方的VCP驱动,自己学习写驱动我怕时间有点来不及,我只要100~200KB就可以了,而现在官方例程我只能达到64KB。请问有没有写好的驱动?
回复

使用道具 举报

29

主题

492

帖子

0

精华

高级会员

Rank: 4

积分
811
金钱
811
注册时间
2016-4-7
在线时间
123 小时
发表于 2016-5-26 11:32:47 | 显示全部楼层
我用板子发给上位机,发现丢数据,正在研究中
回复

使用道具 举报

5

主题

81

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1131
金钱
1131
注册时间
2015-5-31
在线时间
261 小时
发表于 2016-5-26 11:53:58 | 显示全部楼层
NUAA-DW 发表于 2016-5-26 11:06
我用的ST官方的VCP驱动,自己学习写驱动我怕时间有点来不及,我只要100~200KB就可以了,而现在官方例程我 ...

libusb C# bulkTest有源码
stm32f429 -discovery,我不能和他愉快玩耍了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-7-8 17:27

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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