打印

STM32 USB改双缓冲后,STM32的OUT接收速度到了1MB/S!

[复制链接]
楼主: alien2006
手机看帖
扫描二维码
随时随地手机跟帖
41
winsunhy| | 2011-9-8 07:21 | 只看该作者 回帖奖励 |倒序浏览
楼主提到的PIPE MaxTransferSize是在哪里设置的啊?

使用特权

评论回复
42
zxl6534| | 2011-10-18 09:03 | 只看该作者
请问函数改成
void EP3_OUT_Callback(void)
{
  if (GetENDPOINT(ENDP3) & EP_DTOG_TX)//判断接收到的数据在哪个缓冲区
  {
    count_out = GetEPDblBuf0Count(ENDP3);//读取接收到的字节数
    PMAToUserBufferCopy(buffer_out, ENDP3_BUF0Addr, count_out); //用户拷贝出数据
  }
  else
  {
    count_out = GetEPDblBuf1Count(ENDP3);
    PMAToUserBufferCopy(buffer_out, ENDP3_BUF1Addr, count_out);
  }
  FreeUserBuffer(ENDP3, EP_DBUF_OUT); //翻转标志,释放用户缓冲区
之后和原来使用单缓存有什么区别呢,每次USB都要等用户处理了缓存数据才继续通信,怎么会速度变快呢
}

使用特权

评论回复
43
nds_shenzhen| | 2011-10-20 13:39 | 只看该作者
楼主没有给源代码啊参考吧,我也想做 但是 不知道应该如何做

使用特权

评论回复
44
kmani| | 2012-6-2 12:07 | 只看该作者
mark

使用特权

评论回复
45
joe3501| | 2012-6-22 14:22 | 只看该作者
与42楼的兄弟有相同的疑问。

感觉版主所研究的速度只是STM32 USB模块可以实现的理论上的速度而已,因为从头到尾都是围绕在处理OUT数据包的中断时,利用双缓冲的机制使用户在处理上一包接收到数据的同时还可以接收下一包数据。但是实际很多应用的情况下,用户处理接收到的数据并不仅仅是从端口的接收缓存COPY到用户数据缓存区这么简单,可能还需要将接收到的数据分组重新组包,然后进行其它处理,比如写入SD卡。这段处理时间肯定是不足以在接收完下一个数据包之前能完成的,那么也就体现不出双缓存乒乓机制的优势了。

虽然此贴已经结贴了,但是还是欢迎大家继续讨论下去。

使用特权

评论回复
46
微兮兮| | 2013-5-6 10:51 | 只看该作者
alien2006 发表于 2008-1-14 23:15
自己还是对USB的协议理解不够深啊。香版主的功力深厚,非常感谢!    现在BULK O ...

Alien你好,请问如果用BOT的话,是不是一次只能发送64个字节?如果我想做到一次性发送几K数据,是利用什么例程来修改呢?非常感谢

使用特权

评论回复
47
STARM| | 2013-6-16 11:27 | 只看该作者
请问函数改成
void EP3_OUT_Callback(void)
{
  if (GetENDPOINT(ENDP3) & EP_DTOG_TX)//判断接收到的数据在哪个缓冲区
  {
    count_out = GetEPDblBuf0Count(ENDP3);//读取接收到的字节数
    PMAToUserBufferCopy(buffer_out, ENDP3_BUF0Addr, count_out); //用户拷贝出数据
  }
  else
  {
    count_out = GetEPDblBuf1Count(ENDP3);
    PMAToUserBufferCopy(buffer_out, ENDP3_BUF1Addr, count_out);
  }
  FreeUserBuffer(ENDP3, EP_DBUF_OUT); //翻转标志,释放用户缓冲区
}


之后和原来使用单缓存有什么区别呢,每次USB都要等用户处理了缓存数据才继续通信,怎么会速度变快呢 ?



使用特权

评论回复
48
STARM| | 2013-6-16 11:41 | 只看该作者
  +-----+-------+--------------+ +-----+        +-----+-------+--------------+ +-----+
  | OUT | DATA0 | 64 Byte Data | | ACK | Delay  | OUT | DATA1 | 64 Byte Data | | ??? |
  +-----+-------+--------------+ +-----+        +-----+-------+--------------+ +-----+
                                 |--------------|
                                 |设置好Endpoint |
                                 |              |
只要收到第1个数据包后,Firmware不能在第2个数据包到来之前(不是结束之前)设置好Endpoint,
就要浪费整整一个数据包的传送时间;

如果Firmware能按时设置好Endpoint的状态,哪怕是1us,则可能赢得了一个数据包的传送时间。
设置好Endpoint 这一段时间吗 ?


使用特权

评论回复
49
trumpxp| | 2013-6-16 20:25 | 只看该作者
USB这一块    有时间需要好好看看   需要加强这一块的专业素养

使用特权

评论回复
50
saluo| | 2013-10-23 12:19 | 只看该作者
我用官方的虚拟串口例子,跑起来速度只有90多kbps是小b,大家是怎么测出来速度的,我怕我测的不对。
另外程序中串口输出占用了很大的时间,去掉USB_To_USART_Send_Data(USB_Rx_Buffer, USB_Rx_Cnt);可以达到300多kbps
void EP3_OUT_Callback(void)
{
  uint16_t USB_Rx_Cnt;
  
  /* Get the received data buffer and update the counter */
  USB_Rx_Cnt = USB_SIL_Read(EP3_OUT, USB_Rx_Buffer);
  
  /* USB data will be immediately processed, this allow next USB traffic being
  NAKed till the end of the USART Xfer */
  
  USB_To_USART_Send_Data(USB_Rx_Buffer, USB_Rx_Cnt);

  /* Enable the receive of data on EP3 */
  SetEPRxValid(ENDP3);
}
后来改成双缓冲,不加USB_To_USART_Send_Data(USB_Rx_Buffer, USB_Rx_Cnt);这句,可以达到7M多bps,加了后还是90多kbps,问下大家有什么解决方法吗?

使用特权

评论回复
51
outstanding| | 2013-10-23 12:36 | 只看该作者

使用特权

评论回复
52
huang_4115| | 2014-3-4 10:43 | 只看该作者
正在学usb,标记一下

使用特权

评论回复
53
yang4469| | 2014-3-21 17:58 | 只看该作者
saluo 发表于 2013-10-23 12:19
我用官方的虚拟串口例子,跑起来速度只有90多kbps是小b,大家是怎么测出来速度的,我怕我测的不对。
另外程 ...

USB_To_USART_Send_Data(USB_Rx_Buffer, USB_Rx_Cnt);是用串口发送数据好么,串口发送数据能快?

使用特权

评论回复
54
1398117027| | 2014-8-30 18:47 | 只看该作者
听各位大侠讨论学习了

使用特权

评论回复
55
jemy00| | 2014-9-1 09:37 | 只看该作者
mark

使用特权

评论回复
56
shilinlin0321| | 2014-12-22 16:17 | 只看该作者
saluo 发表于 2013-10-23 12:19
我用官方的虚拟串口例子,跑起来速度只有90多kbps是小b,大家是怎么测出来速度的,我怕我测的不对。
另外程 ...

哥们你好,在21ic上看到了有关“stm32 usb双缓冲”的跟帖,想请教一下用com修改双缓冲的问题,方便的话请联系我。QQ:94471266(天涯),谢谢!

使用特权

评论回复
57
zxt520506| | 2015-4-2 16:15 | 只看该作者
楼主在不,想咨询个问题,我现在做STM32F407ZGT6来实现自定义全速模式下的USB设备,测上行速度(IN)速度是500多KB/S,想提高速度到1MB/S以上,查407的手册介绍感觉不能用双缓冲,不知道楼主有涉及到不,双缓冲方式对407芯片提高速度到底可行不

使用特权

评论回复
58
lanjackg2003| | 2015-4-7 10:28 | 只看该作者
mark

使用特权

评论回复
59
七颗咖啡豆| | 2015-4-7 15:44 | 只看该作者

使用特权

评论回复
60
jcdzxh| | 2016-3-28 13:17 | 只看该作者
学习,争取早些理解双缓冲收发

使用特权

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

本版积分规则