打印

GD32C103的USBFS是否支持两个EP同时收发

[复制链接]
2182|23
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
changhao513|  楼主 | 2022-11-5 22:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
以前用STM32F103的USB做CDC设备,现在将代码移植到GD32C103,只是换了USB library代码,如下应用层逻辑是没改的:
1. 在cdc_acm_init中发起首次usbd_ep_recev,随时准备从电脑接收数据
2. 在cdc_acm_out回调函数中,也就是单片机成功接收了来自电脑的数据(例如要转发至串口的数据)之后,立刻再次调用usbd_ep_recev准备下一次接收
3. 在主函数中判断是否有新数据(例如来自串口的数据)需要通过USB发送,如果有,则直接调用usbd_ep_send通过一个IN EP向电脑发送
以上逻辑在STM32上是可以长期稳定工作的,但是在gd32c103上会出现单片机接收数据时USB中断丢失问题,大部分时候都是RXFIFO的中断都收到了但是收不到OUT EP的TF中断,然后通信就中止了。
如果把上述第三步的发送代码禁用掉,则接收一切正常。只要发送随便什么内容,貌似在某个特殊的时间窗口下,就会干扰接收中断的生成。为了排除问题,我现在已经收和发用不同的Endpoint了,一个是1,一个是2,还是一样的问题。

各位大佬们有遇到过类似的问题吗?

PS:认真读了gd32的firmware library中的CDC例程,竟然只是个内部回环测试。。。根本没操作串口硬件。。。所以没有从串口收到的数据如何发送给USB的问题。。GD32这个USB的IP,该不会是半双工的吧?

使用特权

评论回复
沙发
sonicll| | 2022-11-7 10:30 | 只看该作者
本帖最后由 sonicll 于 2022-11-7 10:31 编辑

C103的USB是否有问题我不知道,但是USB2.0,本身就是半双工的协议啊,只有一组差分信号DP/DM,接收和发送肯定是分开进行的。建议用USB协议分析仪抓包看看,通信终止的时候,那一次传输是什么样的

使用特权

评论回复
板凳
changhao513|  楼主 | 2022-11-7 21:54 | 只看该作者
sonicll 发表于 2022-11-7 10:30
C103的USB是否有问题我不知道,但是USB2.0,本身就是半双工的协议啊,只有一组差分信号DP/DM,接收和发送肯 ...

感谢。
物理层肯定是半双工的,主要考虑到这个片内外设是用FIFO来缓存数据的,在STM32上可以在发送没完成的时候就去操作接收的EP及其FIFO不会出问题,也就是片内外设级别是可以收发并行的,应该片内外设IP自己在仲裁吧。

使用特权

评论回复
地板
albert2111| | 2023-5-11 16:46 | 只看该作者
请问楼主问题解了吗,遇到同样的问题。单发或单收没什么问题,但收发同时进行过一段时间EP_OUT中断就不触发了,此时EP_IN还是正常的

使用特权

评论回复
5
snikeguo| | 2023-5-12 11:48 | 只看该作者
albert2111 发表于 2023-5-11 16:46
请问楼主问题解了吗,遇到同样的问题。单发或单收没什么问题,但收发同时进行过一段时间EP_OUT中断就不触发 ...

去知乎搜索下gd32 usb bug吧。gd32谁用谁知道坑有多少。除了usb 还有can 串口 spi 都有或多或少的问题。人生建议,选型务实,不浮躁的mcu公司很重要。

使用特权

评论回复
6
Pretext| | 2023-5-18 14:18 | 只看该作者
应该是不行的吧。

使用特权

评论回复
7
feiguozhu| | 2023-7-19 17:31 | 只看该作者
我也遇到了相同的问题,似乎跟下面链接描述现象一致
https://mcu.eetrend.com/content/2017/100008322.html
但是还没找到解决方法

使用特权

评论回复
8
imdx| | 2023-7-20 07:08 | 只看该作者
这个型号的USB外设有bug,会丢中断,我用逻辑分析仪已经抓到了

使用特权

评论回复
9
q1d0mnx| | 2023-7-27 12:47 | 只看该作者
你说USB么?

使用特权

评论回复
10
g0d5xs| | 2023-7-27 12:49 | 只看该作者
可以用中断的方式实现的,估计是可以

使用特权

评论回复
11
cen9ce| | 2023-7-27 13:54 | 只看该作者
同时收发不清楚,感觉不能吧

使用特权

评论回复
12
y1n9an| | 2023-7-27 15:10 | 只看该作者
一般不都是循序的发送接收么?

使用特权

评论回复
13
p0gon9y| | 2023-7-27 19:17 | 只看该作者
实现CDC的话,其实和USB的功能也类似

使用特权

评论回复
14
kaif2n9j| | 2023-7-27 20:24 | 只看该作者
为啥收不到中断标记呢?

使用特权

评论回复
15
w2nme1ai7| | 2023-7-28 07:08 | 只看该作者
是不是还是配置这块有点问题?

使用特权

评论回复
16
lix1yr| | 2023-7-28 09:10 | 只看该作者
没遇到过,一般USB我都是用HID的模式

使用特权

评论回复
17
b5z1giu| | 2023-7-28 11:12 | 只看该作者
感觉GD移植ST的话,有些问题都不好找

使用特权

评论回复
18
liu96jp| | 2023-7-28 15:05 | 只看该作者
你估计还是GD的寄存器部分那里没配置对,导致的

使用特权

评论回复
19
lanjackg2003| | 2023-11-20 15:29 | 只看该作者
楼主,解决了这个问题了吗
目前,我也在用gd32c103这颗芯片,开发USB-HID 功能
也是遇到RXFIFO的中断产生并且数据已经收到dma指定的buffer中,但是就收不到OUT EP的TF中断

使用特权

评论回复
20
lanjackg2003| | 2023-11-20 16:58 | 只看该作者
看来官方的Demo Code不能用
得自己解决

使用特权

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

本版积分规则

2

主题

3

帖子

0

粉丝