在 USB 设备中,VID 和 PID 是两个重要的硬件标识符:
VID (Vendor ID) - 厂商识别码
全称:Vendor ID(供应商识别码)
分配机构:由 USB-IF(USB Implementers Forum,USB实施者论坛)统一分配给每个USB设备制造商
唯一性:每个厂商的VID是全球唯一的
长度:16位(2字节),通常用十六进制表示(如
0x10C4)
PID (Product ID) - 产品识别码
全称:Product ID(产品识别码)
分配方式:由设备制造商自行定义,用于标识同一厂商的不同产品型号
作用:区分同一厂商生产的不同设备
长度:16位(2字节),十六进制表示(如
0xEA60)
在 usb-serial-for-android 中的作用
在这个 Android USB 串口库中,VID 和 PID 用于识别和过滤特定的USB串口设备:
1. 设备过滤 (device_filter.xml)
你需要在 res/xml/device_filter.xml 中声明要支持的设备:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- Silicon Labs CP210x 系列 -->
<usb-device vendor-id="4292" product-id="60000" /> <!-- 0x10C4:0xEA60 -->
<!-- FTDI FT232 系列 -->
<usb-device vendor-id="1027" product-id="24597" /> <!-- 0x0403:0x6001 -->
<!-- Arduino (Atmega16U2) -->
<usb-device vendor-id="9025" product-id="66" /> <!-- 0x2341:0x0042 -->
</resources>2. 代码中的设备探测
库内部使用 VID:PID 组合来识别支持的芯片类型:
FTDI(如
0x0403:0x6001)Silicon Labs CP210x(如
0x10C4:0xEA60)Prolific PL2303(如
0x067B:0x2303)CH340/CH341(如
0x1A86:0x7523)Arduino 系列等
常见 USB 转串口芯片的 VID/PID
为什么需要配置 VID/PID?
自动识别:Android 系统通过 VID/PID 知道何时启动你的应用
权限管理:系统根据 VID/PID 匹配决定是否弹出权限请求
驱动选择:库根据 VID/PID 选择正确的通信协议和驱动实现
安全过滤:防止应用响应不相关的 USB 设备
如何查看设备的 VID/PID?
在 Android 上:
UsbDevice device = ...;
int vid = device.getVendorId(); // 获取 VID(十进制)
int pid = device.getProductId(); // 获取 PID(十进制)
Log.d("USB", String.format("VID: 0x%04X, PID: 0x%04X", vid, pid));在电脑上:
Windows:设备管理器 → 属性 → 详细信息 → 硬件ID
Linux:
lsusb命令macOS:
system_profiler SPUSBDataType
总结
VID 和 PID 就像是 USB 设备的"身份证":
VID = 品牌(如 "Silicon Labs")
PID = 型号(如 "CP2102 USB转串口芯片")
Android 串口通信(二)VID 和 PID 是什么?
https://lautung.com/archives/Cl1okNuN