打印

usb很是不理解的问题

[复制链接]
2420|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 zhiyonghe 于 2012-5-9 10:18 编辑
  UserToPMABufferCopy(&USB_TX_DataBuf[0], ENDP1_TXADDR,Data_Length);
  SetEPTxCount(ENDP1, Data_Length);
  SetEPTxValid(ENDP1);
一:


Data_Length 如果小于64 即速度最多30K左右

但Data_Length =64后速度就可以达到2M
沙发
zhiyonghe|  楼主 | 2012-5-9 10:03 | 只看该作者
本帖最后由 zhiyonghe 于 2012-5-9 10:24 编辑

=64字节的数据是不会等待而是数据连续发送,发送完64×64字节后才有的命令行出现……

<64的字节的数据,则是发送完这<64的数据后就有命令行……

附件中有BUS HOUND 截留的数据

数据.zip

472.76 KB

使用特权

评论回复
板凳
vigia| | 2012-5-9 11:38 | 只看该作者
什么意思?没看懂。。。

使用特权

评论回复
地板
zhiyonghe|  楼主 | 2012-5-9 13:16 | 只看该作者
什么意思?没看懂。。。
vigia 发表于 2012-5-9 11:38


用virtal_com改的USB发送数据的时候

当数据USB_TX_DataBuf 是装64字节的时候,且main里一直发送数据的时候其速度可达2M

但当数据USB_TX_DataBuf 是装<64字节的数据的时候(比USB_TX_DataBuf[32] ),且main里一直发送数据的时候其速度只有30K左右。

我截下的数据里面发现USB_TX_DataBuf[64] 时候,数据是会在主机要下面发送数据后连续发送64×USB_TX_DataBuf[64]的数据后再发起一次命令……

而USB_TX_DataBuf[32]的时候发送数据是1×USB_TX_DataBuf[32]后就发起一次命令即每发一次USB_TX_DataBuf[32]要发送一次命令,而USB发送命令是很费时的……

使用特权

评论回复
5
香水城| | 2012-5-9 13:36 | 只看该作者
USB发送命令是很费时的……,这句话怎么理解?USB发送命令是什么?哪来的?

使用特权

评论回复
6
zhiyonghe|  楼主 | 2012-5-9 15:37 | 只看该作者
USB发送命令是很费时的……,这句话怎么理解?USB发送命令是什么?哪来的?
香水城 发表于 2012-5-9 13:36


应该是等待PC向STM32的指令

使用特权

评论回复
7
zhiyonghe|  楼主 | 2012-5-9 15:48 | 只看该作者
[img][/img]

使用特权

评论回复
8
香水城| | 2012-5-9 15:55 | 只看该作者
应该是等待PC向STM32的指令
zhiyonghe 发表于 2012-5-9 15:37


在USB协议里没有这种说法,所以不能确定你指的是什么。

使用特权

评论回复
9
zhiyonghe|  楼主 | 2012-5-9 15:58 | 只看该作者
如上面两图第一个图USB_TX_DataBuf[16]=0X01 、0X02、 0X03……、0X10共16个数
但每发完16个数后就有CTL 之后又发 DI  即DI  、CTL 交替出现

而下面的图CTL后DI中的 USB_TX_DataBuf[64]=0X01 、0X02、 0X03……、0X40共64个数
后没有说每发送完64个数后就又出现CTL 即继续又从0X01 、0X02、 0X03……、0X40……一直到这样64个 USB_TX_DataBuf[64]后才会继续出现一次CTL

-------------------------------------

我只要改动 不发送64 比如63,他就会和第一种情况一样DI  CTL交替出现,而交替一次只有发送一次数据

而64的话就是DI  CTL交替出现,但中间会有64次数据连续

使用特权

评论回复
10
香水城| | 2012-5-9 18:42 | 只看该作者
这是因为一个USB Bulk数据包最大只能传输64字节,如果一次传输少于64字节,则主机认为这次传输完成,它可以做其他事情,估计你那个CTL就是"其他事情";如果一次传输多于64字节,则必须拆成若干个64字节和最后一个小于64字节的数据包,这样所有数据包传输完成后,才可以做其他事情。

详细的说明请参考USB协议。

使用特权

评论回复
11
香水城| | 2012-5-9 18:45 | 只看该作者
LZ能把你修改后的项目发上来,让我看看吗?

使用特权

评论回复
12
tianli1980| | 2012-5-9 22:48 | 只看该作者
这东西没玩过,正在学习中。

使用特权

评论回复
13
vigia| | 2012-5-10 10:46 | 只看该作者
LZ你的问题是这样解释的

因为大容量传输的最大包长度是64字节,所以如果你发64及以下字节的数据,PC一次就发完了,然后就处于空闲状态,一直等你下一次的数据传输,这之间的时间都是浪费的。

如果你发128及其以下字节的数据,PC发两个包就发完了,这两个包基本是连续的,之间间隔的时间是可以忽略的,但是之后等待的时间又是浪费的,所以128字节的数据肯定比64字节的数据传输效率高一点,但也不算太高

以此类推,如果你一次发128K的数据,你的传输效率会达到最高。

使用特权

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

本版积分规则

个人签名:zhiyonghe  ~ 学 以 致 用 ~

131

主题

1265

帖子

1

粉丝