【问题标题】:Changing USB configurations/interfaces on the fly; initiated by the device即时更改 USB 配置/接口;由设备发起
【发布时间】:2021-07-30 14:38:14
【问题描述】:

我正在开发一个 USB MIDI 设备,该设备将用作无线系统的接收器。该设备将通过无线电模块与发射器进行双向通信,发射器是在 USB 主机模式下运行的独立硬件。

接收器将插入 PC。插入发射器的 MIDI 设备需要在 PC 上显示为 MIDI 端口。由于发射器支持 USB 集线器,因此可以插入多个设备。

有两个要求我不是 100% 满足的:

1.) PC 端的 MIDI 端口名称需要反映插入发射器的 USB 设备提供的名称,以便清楚端口用于哪个设备。

2.) 当设备从发射器插入/拔出时,PC 上的 MIDI 端口集需要更新。这是问题的关键:有没有办法更新可用的 USB 接口/MIDI 插孔由设备启动

这样做的蛮力方法是在接收器从发送器接收到发生更改的消息时完全重置接收器(在重置时,接收器将轮询发送器以查找当前设备并提供更新的信息当主机 PC 重新枚举时)。

发送器/接收器硬件均基于 PIC32MZ MCU(无 RTOS)。我很擅长编写 USB 代码来让主机/接收器端做任何事情。问题在于如何在 USB 协议级别执行此操作。

另外,要明确一点:发送器/接收器通信将是一个 ad-hoc 协议,接收器将自行设置其所有 USB 配置数据;我们的想法不是尝试通过无线链接无缝枚举设备。

【问题讨论】:

  • 那么,它会是某种带有无线下行端口的 USB 集线器吗?我做对了吗?
  • “发送器”将是带有嵌入式或外部集线器的嵌入式 USB 主机。系统的无线部分将是一个独立于 USB 的独立协议。

标签: embedded usb midi


【解决方案1】:

要在 PC 上显示端口名称,只需将 USB 描述符字符串复制到发射器即可。

USB 设备更改其配置的唯一方法是重置自身,就像它已被拔出一样,并让主机重新枚举它。因此,防止多个设备相互干扰的唯一方法是在接收器上安装多个(虚拟)USB 设备。如果您的硬件不支持此功能,则无法避免重置。

【讨论】:

  • 是的,我在仔细研究之后得出了这个结论。我看到的是集线器可以将其状态更新到主机以获取新的端口状态,并且主机上的 USB 堆栈可以从设备请求更新的配置,但设备无法主动告诉主机其配置无需 USB 重置即可更新。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多