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

Windows下如何获取BBC micro:bit v2的正确USB设备描述?

BBC micro:bit v2 设备描述获取问题解决方案

Chrome 如何获取正确设备描述

Chrome 的 Web Serial API 并非通过 Windows 系统的串口抽象层(如 Win32_SerialPort)获取信息,而是直接与 USB 设备底层通信,读取USB 设备描述符中的原始字符串:

  • micro:bit v2 的 CSMIS-DAP 接口属于 USB CDC-ACM 类设备,本身在 USB 硬件层面携带了厂商(BBC)和产品(micro:bit CSMIS-DAP)的字符串描述符。
  • Windows 默认给这类设备加载的「USB Serial Device」驱动,仅提供基础串口功能,不会将 USB 底层的设备信息映射到系统串口属性中;而 Web Serial API 绕过了这个驱动的抽象,直接读取 USB 原始描述,因此能显示正确名称。

Python 在 Windows 下获取正确设备信息的方法

方法1:直接访问 USB 设备层(推荐)

通过 pyusb 直接读取 USB 设备的原始描述符,需要先替换设备驱动为 libusb 兼容驱动:

  1. 安装依赖:
    pip install pyusb
    
  2. 用 Zadig 工具将 micro:bit 的「USB Serial Device」驱动替换为 libusb-win32 或 libusbK(确保选中对应 COM 口的 USB 父设备)。
  3. 编写代码枚举设备并读取信息:
    import usb.core
    import usb.util
    
    # micro:bit v2 CSMIS-DAP 的 VID 和 PID
    VID = 0x0D28
    PID = 0x0204
    
    # 查找设备
    device = usb.core.find(idVendor=VID, idProduct=PID)
    if device is None:
        raise ValueError("未找到 micro:bit 设备")
    
    # 获取厂商和产品字符串
    manufacturer = usb.util.get_string(device, device.iManufacturer)
    product = usb.util.get_string(device, device.iProduct)
    
    print(f"厂商: {manufacturer}")
    print(f"产品: {product}")
    

方法2:通过 Windows SetupAPI 关联串口与 USB 设备

如果不想替换驱动,可以通过 pywin32 调用 Windows API,找到对应 COM 口关联的 USB 设备,读取其原始信息:

  1. 安装依赖:
    pip install pywin32
    
  2. 核心思路:
    • 枚举所有串口设备,通过设备实例 ID 找到对应的 USB 父设备。
    • 读取 USB 父设备的硬件描述字符串(包含 micro:bit 相关信息)。
      示例代码(简化版):
    import win32com.client
    
    wmi = win32com.client.GetObject("winmgmts:")
    # 枚举所有串口设备
    for port in wmi.InstancesOf("Win32_SerialPort"):
        if "USB" in port.PNPDeviceID:
            # 从PNPDeviceID中提取USB设备路径,进一步查询
            usb_dev_path = port.PNPDeviceID.split("\\")[1]
            # 枚举USB设备匹配路径
            for usb_dev in wmi.InstancesOf("Win32_USBControllerDevice"):
                if usb_dev.Dependent.endswith(usb_dev_path):
                    parent_dev = wmi.Get(usb_dev.Antecedent)
                    print(f"COM口: {port.DeviceID}")
                    print(f"设备描述: {parent_dev.Description}")
    

注意事项

  • micro:bit v2 有两个 USB 接口:一个是 CSMIS-DAP(串口,PID 0x0204),另一个是 Mass Storage(U盘,PID 0x0200),注意区分 PID。
  • 替换驱动后,原串口可能会暂时消失,重新插拔设备后会出现新的串口(由 libusb 驱动提供),不影响正常使用。

内容的提问来源于stack exchange,提问作者Aivar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 08:12:55