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

使用C语言与libusb-1.0无法通过VID/PID打开USB设备的问题

问题描述

在Windows 10系统上使用C语言结合libusb-1.0处理USB设备时,已通过libusb_init()成功初始化库(返回值为0),但调用libusb_open_device_with_vid_pid()函数时,返回的libusb_device_handle始终为NULL。通过libusb_get_device_list()可以检测到Arduino Nano设备,且其VID和PID与Windows设备管理器中的信息一致。

以下是相关代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdint.h>
#include <assert.h>

#include "include/libusb-1.0/libusb.h"

#define VID     0x1A86
#define PID     0x7523

int main(void)
{
    int status = 0;

    libusb_device_handle* dev = NULL;

    system("cls");

    printf("Initializing libusb...\n");

    status = libusb_init(NULL);

    if(status != 0)
    {
        printf("\nCannot Initialize libusb!!\n");
        
        return 0;
    }
    printf("\nlibusb Initialized Successfully...\n");

    dev = libusb_open_device_with_vid_pid(NULL, VID, PID);
    
    if(dev == NULL)
    {
        printf("\nError!! Could Not Find USB Device!\n");
        libusb_exit(NULL);
        return 0;
    }
    printf("\nUSB Device Found...\n");

    libusb_exit(NULL);

    return 0;
}

可能的原因及解决方法

  • 设备驱动未绑定到libusb兼容驱动:Windows系统中,Arduino Nano默认使用串口驱动(如CH340驱动),而非libusb兼容的WinUSB或libusb-win32驱动。需替换驱动:
    1. 打开设备管理器,找到Arduino Nano对应的串口设备(如"Ports (COM & LPT)"下的"USB-SERIAL CH340")。
    2. 右键选择「更新驱动程序」→「浏览我的计算机以查找驱动程序软件」→「让我从计算机上的可用驱动程序列表中选取」。
    3. 选择「通用串行总线设备」→「WinUSB设备」完成安装;也可使用Zadig工具一键替换为WinUSB驱动。
  • 权限不足:Windows下访问USB设备需要管理员权限。右键点击编译后的程序,选择「以管理员身份运行」测试,若能正常打开设备,说明是权限问题。可在项目中添加管理员权限清单,或每次运行时手动获取权限。
  • 设备被其他进程占用:Arduino IDE、串口监视器、Putty等程序可能正在占用该设备,导致libusb无法打开。关闭所有可能占用设备的程序后重新运行。
  • libusb版本或编译不匹配:确保使用的libusb-1.0是适配Windows的正确版本(32位/64位需与程序编译架构一致)。若自行编译libusb,检查编译选项;若使用预编译库,确认下载版本适配当前系统。
  • 内核驱动独占设备:部分设备的内核驱动会独占设备,替换为WinUSB驱动后,原串口驱动会被替换,libusb才能正常访问设备。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 20:52:37