在没有 INTERRUPT 端点的情况下使用 CDC-ACM?

Use CDC-ACM without INTERRUPT endpoint?

我们正在STM32F7xx FS端口上开发USB设备。可以使用的端点数量有限(0 个控制,5 个用于数据)。我们想将我们的设备枚举为 3 个 CDC-ACM 端口。 每个 USB CDC-ACM 都使用三个端点:

  1. 中断
  2. 数据输入。
  3. 数据输出。

端点的用法看起来像这样

EP | OUT         | IN
---+-------------+-----------
1  |             | INTERRUPT 1
2  | BULK 1      | BULK 1
3  |             | INTERRUPT 2
4  | BULK 2      | BULK 2
5  |             | 

第三个 CDC-ACM 放在哪里?是否可以声明我们的 CDC-ACM 之一只有 BULK 数据端点,没有 INTERRUPT 端点?

这不是最佳答案,但根据我的调查:

每条 CDC-ACM 线路必须配置两个接口:

  • 数据接口——需要一个 Bulk IN 和一个 Bulk OUT 端点。
  • 通信接口——需要一个中断输入端点。

它使用的控制通信:

  • USB控制通道发送线路控制信息 主机到嵌入式系统上的串行端口。
  • USB中断 端点从串口发送线路状态信息 嵌入式系统到 USB 主机。
  • 如果串行端口是虚拟的,通常会忽略线路控制和状态信息
  • 内置 windows XP 驱动程序忽略通知。

可以将 CDC-ACM INTERRUPT 端点设置为未在 STM32F7xx 中处理的编号(高于 > 7)。主机枚举linux会成功,通讯数据会到达但中断数据会丢失。根据我的测试(未完成),connect/disconnect 指示存在问题。