打印

GD32VF103 USB设备模式下,fifo大小设置的问题

[复制链接]
1052|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
vsfopen|  楼主 | 2019-10-10 12:02 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 vsfopen 于 2019-10-10 12:12 编辑

文档中,USBFS_GRFLEN默认值是0x00000200,按照说明,共享接收缓冲是2K字节。
USBFS_HNPTFLEN_DIEP0TFLEN默认值是0x02000200,也就是从2K位置开始的2K字节。
其中,IEP0TXFD范围是[16,140],但是默认值就已经超过范围了吧?
而且,实际硬件总fifo大小是1.25K。

目前测试发现,USB设备模式下,RX共享fifo读取了320次(对应读取了1.25K数据)之后,就会出问题。
测试设置USBFS_GRFLEN,一样会有问题


这个寄存器,默认值是0x02000200,也就是说设备模式下,IEP0TXFD是0x0200
但是,后面说IEP0TXFD的取值范围是[16,140](文档里没写进制,我猜是16是10进制,140是16进制,而且换衣这个范围是有问题的)
这个的设计真的没问题吗?

使用特权

评论回复
沙发
sonicll| | 2019-10-10 15:06 | 只看该作者
本帖最后由 sonicll 于 2019-10-10 15:13 编辑

140应该是16进制的,0x140*4 = 0x500 = 1280 = 1.25K
IEP0TXFD的复位值0x0200感觉确实有问题,这个复位值不能直接使用,必须要初始化为正确的值才能使用,GRFLEN也是一样,需要小于0x140。
我刚看了一下ST的手册,发现ST的USB也有这个问题,复位值是0x0200,但是fifo ram只有1.25k。GD估计为了兼容ST,把ST的这个问题也复制过来了

使用特权

评论回复
板凳
vsfopen|  楼主 | 2019-10-10 22:42 | 只看该作者
sonicll 发表于 2019-10-10 15:06
140应该是16进制的,0x140*4 = 0x500 = 1280 = 1.25K
IEP0TXFD的复位值0x0200感觉确实有问题,这个复位值不 ...

EP0 IN的大小也不能占用所有fifo,至少要留一些给out fifo
我看一下GD的demo,这个没必要去兼容吧

使用特权

评论回复
地板
vsfopen|  楼主 | 2019-10-10 23:06 | 只看该作者
本帖最后由 vsfopen 于 2019-10-10 23:31 编辑

这个难道是IP核默认的初始值吗?
我加上去试试,还有是一个问题

设置IN FIFO SIZE很简单,但是修改了之后,各个端点的DIEPTFSTAT还是默认值0x00000200
DIEPTFSTAT不是IN FIFO的空余空间大小吗?


这个就是官方的demo,设置了IN0 FIFO(0x40)和IN1 FIFO(0x80)
但是,对应的DIEP0TFSTAT和DIEP1TFSTAT的值,还是0x200,这个是只读的寄存器,反应IN FIFO的空余空间

我看看运行的时候,这个DIEPTFSTAT会不会变正常,也可能后面有其他的初始化,会让这个只读寄存器得到正确的值

使用特权

评论回复
5
vsfopen|  楼主 | 2019-10-10 23:40 | 只看该作者
本帖最后由 vsfopen 于 2019-10-10 23:47 编辑


ACM的官方demo,4个IN FIFO长度设置为0x40 0x80 0x00 0x00
tx_flush之后,STAT空余的都是0x40,这个时候还没写FIFO,还在初始化里
好像STAT显示的FIFO空余大小和实际的不符合

调试的话,用官方ACM demo,在usb_devcore_init里的usb_txfifo_flush之后放断点,然后发现刷新了IN FIFO之后,DIEPTFSTAT的值都是0x40,和设置的FIFO长度不符合

使用特权

评论回复
6
vsfopen|  楼主 | 2019-10-11 11:44 | 只看该作者
本帖最后由 vsfopen 于 2019-10-11 12:10 编辑

今天测试了一下设置了FIFO,没有原先的问题了
试了一下我们自己的dwcotg驱动,STAT寄存器倒是正常的,虽然有一个没配置的EP的STAT不正确,但是这个也没用到

使用特权

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

本版积分规则

89

主题

324

帖子

8

粉丝