You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

UWP中如何从CDC设备获取USB字符串描述符

如何在UWP中读取USB CDC设备的iSerialNumber字符串描述符

我有一个可完全控制代码的USB CDC嵌入式设备,已在USB设备描述符的索引3处设置了用于表示设备序列号(即iSerialNumber)的字符串描述符,设备在设备管理器中显示为串口。

我能通过SerialDevice类成功识别设备:

selector = SerialDevice.GetDeviceSelectorFromUsbVidPid(0x0483, 0xA4DA);
var devs = await DeviceInformation.FindAllAsync(selector);
foreach(var dev in devs) {
    var device = await SerialDevice.FromIdAsync(dev.Id);
    // 记录找到的设备...
}

但SerialDevice没有暴露所需的USB描述符。我尝试用UsbDevice类读取描述符:

UsbDevice usbdev = await UsbDevice.FromIdAsync(dev.Id);
var config = usbdev.Configuration;
foreach(UsbDescriptor desc in config.Descriptors) {
    var descriptorBuffer = new Windows.Storage.Streams.Buffer(desc.Length);
    desc.ReadDescriptorBuffer(descriptorBuffer);
    DataReader reader = DataReader.FromBuffer(descriptorBuffer);
    reader.ByteOrder = ByteOrder.LittleEndian;
    var length = reader.ReadByte();
    String str = reader.ReadString(length);
    if(str != null) {
        Debug.WriteLine("{0}: {1}", desc.DescriptorType, str);
    }
}

但调用UsbDevice.FromIdAsync(dev.Id)时抛出ArgumentException,提示“值不在预期范围内”。如果改用UsbDevice.GetDeviceSelector(0x0483, 0xA4DA)创建AQS字符串,DeviceInformation.FindAllAsync会返回空列表。

虽然我可以通过与设备通信获取序列号,但这在序列号已存在于USB描述符的情况下显得冗余。

我遗漏了什么?这根本无法实现吗?另外,设备管理器中该设备的属性列表未显示iSerialNumber,我了解到是否向上层暴露这些属性由驱动决定。

内容的提问来源于stack exchange,提问作者Brian A. Henning

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 16:32:38