打印

STM32 USB LIB里面的一点细节求证!!

[复制链接]
3036|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
MyLovetus|  楼主 | 2010-8-27 10:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 MyLovetus 于 2010-8-27 11:03 编辑

/******************************************************************************* * Macro Name : SetEPDblBuffCount / SetEPDblBuf0Count / SetEPDblBuf1Count. * Description : Gets buffer 0/1 address of a double buffer endpoint. * Input : bEpNum: endpoint number. * : bDir: endpoint dir EP_DBUF_OUT = OUT * EP_DBUF_IN = IN * : wCount: Counter value * Output : None. * Return : None. *******************************************************************************/
#define _SetEPDblBuf0Count(bEpNum, bDir, wCount) { \
   if(bDir == EP_DBUF_OUT)\
       /* OUT endpoint */ \
      {_SetEPRxDblBuf0Count(bEpNum,wCount);} \
  else if(bDir == EP_DBUF_IN)\
     /* IN endpoint */ \  
     *_pEPTxCount(bEpNum) = (uint32_t)wCount; \
} /* SetEPDblBuf0Count*/
#define _SetEPDblBuf1Count(bEpNum, bDir, wCount) { \
  if(bDir == EP_DBUF_OUT)\
   /* OUT endpoint */ \
    {_SetEPRxCount(bEpNum,wCount);}\
  else if(bDir == EP_DBUF_IN)\
  /* IN  endpoint */\
    *_pEPRxCount(bEpNum) = (uint32_t)wCount; \
} /* SetEPDblBuf1Count */

上面这个是在STM32的USB LIB里面的一段代码(usb_regs.h中),上面分别对DBL的BUF0和DBL的BUF1设置数值,而第2个(红色部分)是不是应该也是*pEPTxCount(bEpNum)呢?
我是USB初学,大家莫笑我低级哟!
沙发
MyLovetus|  楼主 | 2010-8-27 14:23 | 只看该作者
看来这个问题,大家都不感兴趣。

另外有个问题想向大家请教一下,希望明白的人能不吝指点!
就是STM32的USB的最大缓冲区是512BYTES,而在USB2.0的FULL SPEED下面,最大传输的包长度可以到1023BYTES,大家是怎么样处理这个问题的呢?抑或STM32的USB是不能够完全支持到USB2.0 FULL SPEED的呢?

使用特权

评论回复
板凳
MyLovetus|  楼主 | 2010-8-30 18:20 | 只看该作者
经过两天的学习,弄清楚了一些眉目,基本上就是第一个问题ST是对的,第二个问题我是对的。
问题1,在STM32里面USB的双缓冲机制就是当你采用双缓冲时,BUF0和BUF1就分别对应TXBUF和RXBUF了。
问题2,STM32的512BYTES的缓冲区特征就决定了ISO同步传输的最大长度是512字节(其实还达不到,因为这个512的前面还固定分配作为端点对应起始地址)。
是我的问题太幼稚,不值一呬,还是我的帖子大家都看不到呢?两,三天时间竟然无人理睬!
只是觉得21IC越来越不像21IC了。

使用特权

评论回复
地板
香水城| | 2010-8-30 18:37 | 只看该作者
哈哈,菜鸟的问题可能大家不屑回复,而高手的问题可能别人没有你钻研的这么深入,没有发言权。

表面现象都是无人理睬,但内涵却大不一样,:lol

使用特权

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

本版积分规则

16

主题

171

帖子

0

粉丝