问答

汇集网友智慧,解决技术难题

21ic问答首页 - 【GD32的BUG】GD32F405 使用 USB HS 无法接收大于512字节的数据

【GD32的BUG】GD32F405 使用 USB HS 无法接收大于512字节的数据

lewlew2020-11-16
回答 +关注 26
5189人浏览 19人回答问题 分享 举报
19 个回答
  • 答案很长吧 发表于 2020-11-18 09:50
    不可能,一定是你设置的问题,没有设置好造成的。

    看来你是没被GD的库坑过
  • 答案很长吧 发表于 2020-11-18 09:50
    不可能,一定是你设置的问题,没有设置好造成的。

    例程里面的 msc_udisk 完全没问题, 只有 cdc_acm 有这种问题. 一样的设置
  • 答案很长吧 发表于 2020-11-18 09:50
    不可能,一定是你设置的问题,没有设置好造成的。

    我这里打了几块板子, 方便我发你验证一下吗?
  • 不可能,一定是你设置的问题,没有设置好造成的。
  • 发呆二极管 发表于 2020-11-18 00:54
    能找到问题就好。反正GD的USB库确实问题挺多的,以前FS的库我就被坑过,当时做一个功能怎么调试都有问题 ...

    是的, 之前我搞 F303 的时候就是, 换了最新固件才解决.
    老固件插电脑上根本没反应
  • lewlew 发表于 2020-11-17 09:44
    不知道怎么联系 GD32 的技术客服或者 FAE, 所以打算自己跟进底层代码看看究竟是哪里出了问题.

    接收数据 ...

    能找到问题就好。反正GD的USB库确实问题挺多的,以前FS的库我就被坑过,当时做一个功能怎么调试都有问题,后来发现是库的问题后,从原厂要了最新的固件库才解决,好家伙,原来他们是有新版固件库不发布……这个问题你确实是可以跟FAE提,你要是有认识的代理的话,可以通过代理联系他们找到原厂。
  • 发呆二极管 发表于 2020-11-16 20:21
    没做过HS开发,只做过FS的,仅参与讨论,说错莫怪……包大小是分模式的吧,中断的话记得HS最高好像就512B? ...

    不知道怎么联系 GD32 的技术客服或者 FAE, 所以打算自己跟进底层代码看看究竟是哪里出了问题.

    接收数据的关键回调是 cdc_acm_out, 调试发现该函数只在 usbd_isr 的 OEPIF 分支内被调用,
    遂在 usbd_isr 内所有中断分支都打了个输出日志.

    然后就观察到一个有意思的现象:

    数据是在 RXFNEIF 里分批次接收的, 收了 2 次会来一个 OEPIF, 通知上层来取数据.
    发送超过 512 字节的数据时, 日志是这这样的:

    00> RXFNEIF
    00> RXFNEIF
    00> OEPIF
    00> * cdc_acm_out: xfer_count=512, ep_num=3
    00> RXFNEIF

    也就是说, 收到 2 个 RXFNEIF 触发 OEPIF/cdc_acm_out 后, 又来了一个 RXFNEIF, 但是之后就再也没有 OEPIF 了.
    调试发现超出 512 字节的数据确实在第三个 RXFNEIF 里成功收到了, 只是因为没有来 OEPIF 导致没通知到上层.

    我想问题的关键应该在这里, 如果能够超时主动触发一下 OEPIF/cdc_acm_out 可能问题就解决了.

    目前看来应该是固件库自身的 BUG, 希望 GD32 的技术人员能尽快解决!
  • 发呆二极管 发表于 2020-11-16 20:21
    没做过HS开发,只做过FS的,仅参与讨论,说错莫怪……包大小是分模式的吧,中断的话记得HS最高好像就512B? ...

    例程代码没改, 默认应该是中断模式, 512字节一个包
  • 没做过HS开发,只做过FS的,仅参与讨论,说错莫怪……包大小是分模式的吧,中断的话记得HS最高好像就512B?如果是bulk的话应该才没这个限制吧。
  • 注意:
    1. 为了支持USB HS, 硬件上使用了 USB3300 这个 PHY, 并通过 ULPI 与芯片连接

    2. 例程代码编译时开启了:
    USE_USB_HS
    USE_ULPI_PHY

12

您需要登录后才可以回复 登录 | 注册