【问题标题】:Is there a way to force windows to re-read the USB DeviceDescriptor?有没有办法强制 Windows 重新读取 USB DeviceDescriptor?
【发布时间】:2019-12-13 08:52:53
【问题描述】:

我需要 CDC USB 设备上的 8 位带外数据(配置/噪声读数),我想我可以在 DeviceDescriptorbcdDevice 的 LSB 中返回它...但似乎Windows 仅在“插件事件”中读取该内容——即使您在集线器上使用 DeviceIOCtl 来“重新读取”​​DeviceDescriptor(它不会在我的设备中遇到断点,并且它坚持一个常数插入后的 bcdDevice -- 我知道 MSB 需要大于 2,但它似乎都被缓存了)。

A. 有没有办法“强制”Windows 重新读取bcdDevice(最好在端口打开时)?或者任何其他字符串或字节(它们似乎都被缓存了)?

B. 有没有办法“强制”Windows 读取(并逐字接受给出的内容)BaudRate(我想我可以使用BaudRate 的 MSB 作为状态,但 Windows 不相信这是一个有效的数字,所以它只报告“9600,我猜”——除非我关闭并重新打开端口,否则它不会读取它——然后它会尝试设置波特率而不是告诉)?

C. 有没有其他方法可以在不让 Windows 玩愚蠢游戏的情况下将 1 个字节输入/输出我的设备?我真的不希望我的设备显示为 2 个 com 端口(一个用于配置,一个用于数据),但是我必须弄清楚哪个是哪个,这会让用户感到困惑——任何其他寄存器/USB 消息——DSR, CTS, RI, CD——但我需要再输入 4 位,至少需要输出 3 位——而且它需要是“原始的”——没有“如果 CD,那么 DSR 必须没问题” -- (一旦配置,“UseTermination/InvertData/DriveStrength”存储在设备的闪存中,所以它只是一个串口,但我需要读取“noiselevel”[8 bits req'd ],并设置这些寄存器——仅在请求时!——在调试设备时)...

【问题讨论】:

    标签: usb cdc deviceiocontrol


    【解决方案1】:

    作为问题的 C 部分,我建议当串口的波特率设置为 123 等特殊值时,进入配置模式,并允许在批量 IN 和 OUT 端点上传输配置数据.

    制作一个具有一个 USB 串行端口和一个与 WinUSB 通信的本机 USB 接口的复合设备也很好(而且可能更正常)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-11
      • 2013-03-24
      • 1970-01-01
      • 2014-06-21
      • 1970-01-01
      • 2014-01-24
      相关资源
      最近更新 更多