打印
[应用相关]

请教usb传输速率问题

[复制链接]
2219|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ford126|  楼主 | 2009-2-17 00:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
想测STM32的usb传输速率,中断传输方式,采用如下代码循环发数:
  while (1)
  {
      /*copy InBuffer to ENDP1 Tx Packet Memory Area*/
      UserToPMABufferCopy(InBuffer, GetEPTxAddr(ENDP1), 64);
      SetEPTxCount(ENDP1, 64);
      /* enable endpoint for transmission */
      SetEPTxValid(ENDP1);
   }
用usb调试助手接,在一定时间内看接了多少字节数,结果是每秒1660字节左右
请问:1、测量方法对么?为什么速度这么小一点?
      2、端点描述符的bInterval字段设置为0x01,其值是否是越小传输速度越快?
      请大家指教,谢谢
沙发
computer00| | 2009-2-17 00:30 | 只看该作者

一个普通的中断端点,在一个帧内最多传输一次

对于全速设备的中断端点,最大长度为64字节,假设每ms查询一次,那么理论最大速度可达到64KBps。

你这样一直写数据恐怕不好吧,需要等到数据发送完毕再写下一次数据。

使用特权

评论回复
板凳
xobd| | 2009-2-17 08:44 | 只看该作者

usb传输速率问题

以BULK方式來說除了Device端發送資料速度要快外,
Host端讀取資料的方式會影響資料的傳輸率.譬如
連續以每次64Byte不斷讀取和每次以128(或256或512)
結果都不一樣.經測試STM32最高大約在1MByte左右.

使用特权

评论回复
地板
ford126|  楼主 | 2009-2-20 17:36 | 只看该作者

再请教

改成:
while(1)
if (GetEPTxStatus(ENDP1) == EP_TX_NAK) 
{        UserToPMABufferCopy(InBuffer, GetEPTxAddr(ENDP1), 64);
         SetEPTxCount(ENDP1, 64);
         SetEPTxStatus(ENDP1, EP_TX_VALID);
}
也不行。速率依然不变
请问影响这个发数速率的还有什么原因?
我猜可能是上位机驱动程序有问题
请大家给点建议,谢谢

使用特权

评论回复
5
香水城| | 2009-2-20 17:47 | 只看该作者

USB设备不能主动发送数据,必须是主机要数据时才能发送

请检查主机端的驱动程序。

使用特权

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

本版积分规则

50

主题

86

帖子

0

粉丝