vxfklthz 发表于 2025-7-1 10:13:50

Ai8H使用usb库函数,怎么设置自己的PID,VID和描述

如题,在官网下载的最新USB库函数,打开以后没有找到可以设置自己HID设备的PID,VID和设备描述符等的地方。

请问要怎么操作?

国芯人工智能 发表于 2025-7-1 10:18:00

STC8H系列单片机在使用USB库函数实现HID设备时,确实需要对设备的PID(Product ID)、VID(Vendor ID)以及设备描述符进行配置。由于官方提供的USB库函数通常以通用方式封装,部分参数可能未直接暴露在API中,因此需要通过修改库文件或自定义描述符的方式来实现。

以下为具体设置方法:

一、获取标准USB描述符结构

首先,需了解USB设备的基本描述符结构,包括设备描述符(Device Descriptor)、配置描述符(Configuration Descriptor)、接口描述符(Interface Descriptor)和HID描述符(HID Descriptor)。这些描述符通常存储在一个数组中,用于向主机报告设备信息。

二、查找并修改描述符数组

在STC8H USB库中,通常会有一个名为usbdesc.c或usbdesc.h的文件,其中包含了设备描述符的定义。打开该文件后,可以找到类似如下结构:

c
const uint8t usbdevicedescriptor[] = {
    0x12,                     // bLength
    USBDESCRIPTORTYPEDEVICE, // bDescriptorType
    0x00, 0x02,               // bcdUSB (2.0)
    0x00,                     // bDeviceClass
    0x00,                     // bDeviceSubClass
    0x00,                     // bDeviceProtocol
    0x40,                     // bMaxPacketSize0
    0x00, 0x00,               // idVendor (0x0000)
    0x00, 0x00,               // idProduct (0x0000)
    0x00, 0x00,               // bcdDevice (0.00)
    1,                        // iManufacturer
    2,                        // iProduct
    3,                        // iSerialNumber
    0x01                        // bNumConfigurations
};

三、修改VID和PID

在上述代码中,idVendor和idProduct字段分别对应VID和PID。默认值为0x0000,需根据实际需求修改为合法的数值。例如:
VID:0x0483(STM32常用)
PID:0x5740(示例)

修改后应为:

c
0x83, 0x04,               // idVendor (0x0483)
0x40, 0x57,               // idProduct (0x5740)

四、设置设备描述符

设备描述符中的iManufacturer、iProduct和iSerialNumber字段指向字符串描述符索引。这些字符串描述符通常在另一个文件中定义,如usbstring.c。用户可在此处修改对应的字符串内容,以实现设备名称、制造商等信息的自定义。

五、编译与测试

完成上述修改后,重新编译程序并烧录至STC8H芯片。连接至PC后,可通过设备管理器查看设备信息,确认PID、VID及描述符是否已正确设置。

六、注意事项

1. 确保PID/VID合法性:建议申请官方认证的VID/PID,避免与现有设备冲突。
2. 兼容性问题:部分操作系统或驱动可能对非标准PID/VID设备存在兼容性限制。
3. 文档参考:建议查阅STC8H USB库的官方文档,了解更详细的配置说明。

综上所述,通过修改USB描述符数组中的相应字段,即可实现对STC8H设备的PID、VID及描述符的自定义设置。此过程需具备一定的USB协议基础,并结合实际开发环境进行调试验证。

[本文内容由国芯人工智能辅助生成,仅供参考]

ercircle 发表于 2025-7-1 10:23:30

官网库没这个接口,可以使用8H程序包里范例自定义修改
https://www.stcaimcu.com/data/download/DemoCode/STC8H8K64U-DEMO-CODE-V9.6.zip

DebugLab 发表于 2025-7-1 13:52:31

USB库函数不支持修改VID、PID、描述符
需要修改VID、PID、描述符请使用源代码
注意:
不要胡乱修改描述符,不要同一个VID、PID对应多个描述符,尤其是变更设备类,否则会导致注册表错乱甚至系统崩溃等不可预知的错误,轻者重装驱动可以恢复,严重者只能重装系统
学习USB强烈不建议修改VID、PID、描述符
开发新功能请使用VID=34BF PID=0000
商用如使用STCAI的VID(34BF),则PID必须向STCAI申请,或自行向USBIF申请VID,PID可自定义

vxfklthz 发表于 2025-7-3 08:14:13

DebugLab 发表于 2025-7-1 13:52
USB库函数不支持修改VID、PID、描述符
需要修改VID、PID、描述符请使用源代码
注意:


多谢提醒

vxfklthz 发表于 2025-7-3 08:14:35

ercircle 发表于 2025-7-1 10:23
官网库没这个接口,可以使用8H程序包里范例自定义修改
https://www.stcaimcu.com/data/download/DemoCode/S ...

找到了,多谢

vxfklthz 发表于 2025-7-3 08:17:39

ercircle 发表于 2025-7-1 10:23
官网库没这个接口,可以使用8H程序包里范例自定义修改
https://www.stcaimcu.com/data/download/DemoCode/S ...

遇到一个问题就是,USBHID,如果端口数据长度设置为64,往FIFO里写入的数据不足64,置位INIPRDY也不会发送给PC

ercircle 发表于 2025-7-3 08:55:35

vxfklthz 发表于 2025-7-3 08:17
遇到一个问题就是,USBHID,如果端口数据长度设置为64,往FIFO里写入的数据不足64,置位INIPRDY也不会发 ...

是的正常,HID整包发送补齐64字节,CDC就没这限制了
页: [1]
查看完整版本: Ai8H使用usb库函数,怎么设置自己的PID,VID和描述