硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1238|回复: 4
收起左侧

使用 CDC_ACM 的 USB 串口枚举,必须使用端口 0x81 和 0x01 吗?

[复制链接]

25

主题

232

回帖

307

积分

高级会员

积分
307
QQ
发表于 2025-1-9 20:43:50 | 显示全部楼层 |阅读模式
是 windows ,复合设备枚举成功了,发现 CDC_ACM 的 IN/OUT 端口配置成 0x83 和 0x3 就不能正常通信了。


表现为芯片给 windows 发信,0x83 端口怎么都发不出去,卡死在 USB_OTG_GINTSTS_IEPINT  这个 IN 端口发信中断里,不断触发但是就是发不出去。

什么都不更改。只要把端口配成 0x81 和 0x01 就好了。windows 的原生串口驱动有必须用端口 1 的说法吗?
回复

使用道具 举报

25

主题

232

回帖

307

积分

高级会员

积分
307
QQ
 楼主| 发表于 2025-1-9 20:52:40 | 显示全部楼层
没事了。破案了。

[C] 纯文本查看 复制代码
    /* Set Rx FIFO */
    HAL_PCDEx_SetRxFiFo(&hpcd_USB_OTG_FS, 0x200);
    /* Set Tx FIFO 0 */
    HAL_PCDEx_SetTxFiFo(&hpcd_USB_OTG_FS, 0, 0x80);
    /* Set Tx FIFO 1 */
    HAL_PCDEx_SetTxFiFo(&hpcd_USB_OTG_FS, 1, 0x100);
    /* Set Tx FIFO 3 */
    HAL_PCDEx_SetTxFiFo(&hpcd_USB_OTG_FS, 3, 0x100);


是这里的最后一句,之前没开端口 3 的发送 FIFO。
回复

使用道具 举报

7

主题

81

回帖

102

积分

初级会员

积分
102
发表于 2025-7-1 09:21:44 | 显示全部楼层
[C] 纯文本查看 复制代码
  HAL_PCDEx_SetRxFiFo(&hpcd_USB_OTG_FS, 0x80);
  HAL_PCDEx_SetTxFiFo(&hpcd_USB_OTG_FS, 0, 0x40);
  HAL_PCDEx_SetTxFiFo(&hpcd_USB_OTG_FS, 1, 0x80);

看了帖子才注意到这个问题,我的USB设备为ADC,IN端点为0x82为什么也能跑通呢?只有1和2是这样的还是有其他原因呢?
回复

使用道具 举报

25

主题

232

回帖

307

积分

高级会员

积分
307
QQ
 楼主| 发表于 2025-7-1 14:27:16 | 显示全部楼层
陈清 发表于 2025-7-1 09:21
[mw_shl_code=c,true]  HAL_PCDEx_SetRxFiFo(&hpcd_USB_OTG_FS, 0x80);
  HAL_PCDEx_SetTxFiFo(&hpcd_USB_ ...

那真是奇怪了,可以物理抓包看一下实际端口号
回复

使用道具 举报

7

主题

81

回帖

102

积分

初级会员

积分
102
发表于 2025-7-1 15:51:26 | 显示全部楼层
yono 发表于 2025-7-1 14:27
那真是奇怪了,可以物理抓包看一下实际端口号

我看这个好像也是2端口,反正挺奇怪的
1.png
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-8-11 20:55 , Processed in 0.042049 second(s), 26 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表