打印

stm32f2 系列 USB device FIFO_FS_SIZE 大小设置问题

[复制链接]
8756|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
easylwl|  楼主 | 2013-4-22 17:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 easylwl 于 2013-4-22 17:10 编辑

用STM32F207VC  开发 usb设备  BULK传输 ,
使用了两个端点 IN 端点 0X82  和 OUT端点 0X03 ,端点的最大包长度都是 64   字节
问题是 ,FIFO的大小应该怎样设置呢?
ST官方代码包有这个注释:
/*******************************************************************************
*                      FIFO Size Configuration in Device mode
*  
*  (i) Receive data FIFO size = RAM for setup packets +
*                   OUT endpoint control information +
*                   data OUT packets + miscellaneous
*      Space = ONE 32-bits words
*     --> RAM for setup packets = 10 spaces
*        (n is the nbr of CTRL EPs the device core supports)
*     --> OUT EP CTRL info      = 1 space
*        (one space for status information written to the FIFO along with each
*        received packet)
*     --> data OUT packets      = (Largest Packet Size / 4) + 1 spaces
*        (MINIMUM to receive packets)
*     --> OR data OUT packets  = at least 2*(Largest Packet Size / 4) + 1 spaces
*        (if high-bandwidth EP is enabled or multiple isochronous EPs)
*     --> miscellaneous = 1 space per OUT EP
*        (one space for transfer complete status information also pushed to the
*        FIFO with each endpoint's last packet)
*
*  (ii)MINIMUM RAM space required for each IN EP Tx FIFO = MAX packet size for
*       that particular IN EP. More space allocated in the IN EP Tx FIFO results
*       in a better performance on the USB and can hide latencies on the AHB.
*
*  (iii) TXn min size = 16 words. (n  : Transmit FIFO index)
*   (iv) When a TxFIFO is not used, the Configuration should be as follows:
*       case 1 :  n > m    and Txn is not used    (n,m  : Transmit FIFO indexes)
*       --> Txm can use the space allocated for Txn.
*       case2  :  n < m    and Txn is not used    (n,m  : Transmit FIFO indexes)
*       --> Txn should be configured with the minimum space of 16 words
*  (v) The FIFO is used optimally when used TxFIFOs are allocated in the top
*       of the FIFO.Ex: use EP1 and EP2 as IN instead of EP1 and EP3 as IN ones.
*******************************************************************************/
看不懂??
我的设置为:
#ifdef USB_OTG_FS_CORE
#define RX_FIFO_FS_SIZE                          128
#define TX0_FIFO_FS_SIZE                          32
#define TX1_FIFO_FS_SIZE                            0
#define TX2_FIFO_FS_SIZE                          128
#define TX3_FIFO_FS_SIZE                           0
可是IN发送不了??

沙发
easylwl|  楼主 | 2013-4-22 17:10 | 只看该作者
ST HID  demo  和 MSCdemo :
#ifdef USB_OTG_FS_CORE
#define RX_FIFO_FS_SIZE                          128
#define TX0_FIFO_FS_SIZE                          64
#define TX1_FIFO_FS_SIZE                         128
#define TX2_FIFO_FS_SIZE                          0
#define TX3_FIFO_FS_SIZE                          0


VCP  demo:
#ifdef USB_OTG_FS_CORE
#define RX_FIFO_FS_SIZE                          128
#define TX0_FIFO_FS_SIZE                          32
#define TX1_FIFO_FS_SIZE                         128
#define TX2_FIFO_FS_SIZE                          32
#define TX3_FIFO_FS_SIZE                           0

使用特权

评论回复
板凳
IJK| | 2013-4-22 17:24 | 只看该作者
使用了两个端点 IN 端点 0X82  和 OUT端点 0X03

感觉这样不好,因为端点1空着没用。可以:
使用两个端点 IN 端点 0X81  和 OUT端点 0X02

使用特权

评论回复
地板
cjhk| | 2013-4-22 18:41 | 只看该作者
问题解决了吗  楼主 帮你顶一个   希望有高手能够看到

使用特权

评论回复
5
airwill| | 2013-4-22 19:53 | 只看该作者
可以参考一下 ST 的 usb 库里的 MSC 例子.

使用特权

评论回复
6
easylwl|  楼主 | 2013-4-23 09:04 | 只看该作者
MSC 使用的是端点 0X81  和 0X01
我把端点改为  0X81  和 0x01  ,再 设置
#ifdef USB_OTG_FS_CORE
#define RX_FIFO_FS_SIZE                          128
#define TX0_FIFO_FS_SIZE                          64
#define TX1_FIFO_FS_SIZE                         128
#define TX2_FIFO_FS_SIZE                          0
#define TX3_FIFO_FS_SIZE                          0

就OK了 ,谢谢大家.

使用特权

评论回复
7
bjxdylzsts| | 2013-9-16 16:41 | 只看该作者
谁知道  这些 size和 发送和接收的关系啊。  现在设置的 不是 in不行就是out不行!我要发送大于64字节的数据,usb 全速模式,请假大神 指导

使用特权

评论回复
8
yu0405jie| | 2015-3-26 21:22 | 只看该作者
我用了一个EP1 IN,一个EP2 IN和一个EP2 OUT,首先由EP2 OUT发送数据给单片机没有问题,然后EP2 IN返回响应,EP1 IN返回数据,经过一段时间后,在由EP2 OUT发送指令,此时单片机接收的指令是上一次的指令,很奇怪

使用特权

评论回复
9
ccd007| | 2017-8-12 17:54 | 只看该作者
yu0405jie 发表于 2015-3-26 21:22
我用了一个EP1 IN,一个EP2 IN和一个EP2 OUT,首先由EP2 OUT发送数据给单片机没有问题,然后EP2 IN返回响应 ...

你的问题解决了吗

使用特权

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

本版积分规则

11

主题

28

帖子

0

粉丝