分类 Hack 下的文章
USB HID描述符的体系结构
设备描述符
一个设备只有一个设备描述符
typedef struct {
uint8_t bLength; // 描述符大小,固定为0x12
uint8_t bDescriptorType; // 设备描述符类型,固定为0x0
uint16_t bcdUSB; // USB规范发布号
uint8_t bDeviceClass;
uint8_t bDeviceSubClass;
uint8_t bDeviceProtocol;
uint8_t bMaxPacketSize0; // 端点0最大包大小 (8,16,32,64)
uint16_t idVendor; // 供应商ID
uint16_t idProduct; // 产品ID
uint16_t bcdDevice; // 设备版本号
uint8_t iManufacturer; // 制造商字符串索引位置
uint8_t iProduct; // 产品名称字符串索引位置
uint8_t iSerialNumber;
uint8_t bNumConfigurations; // 可能的配置数量,指配置字符串的个数
} device_descriptor_t;
片段:
__code const device_descriptor_t device_descriptor =
{
.bLength = 18, // 0x12
.bDescriptorType = DEVICE_DESCRIPTOR, // 0x0
.bcdUSB = 0x0200, // 使用USB 2.0
.bDeviceClass = 0xFF,
.bDeviceSubClass = 0xFF,
.bDeviceProtocol = 0xFF,
.bMaxPacketSize0 = 64,
.idVendor = 0x1915, // Nordic Semiconductor
.idProduct = 0x0102, // Nordic bootloader product ID incremebted by 1
.bcdDevice = 0x0001,
.iManufacturer = STRING_DESCRIPTOR_MANUFACTURER,// 1
.iProduct = STRING_DESCRIPTOR_PRODUCT,// 2
.iSerialNumber = 0,
.bNumConfigurations = 1,
};
配置描述符
配置描述符定义了设备的配置信息,一个设备可以有多个配置描述符
typedef struct {
uint8_t bLength; // 描述符大小,固定0x09
uint8_t bDescriptorType; // 配置描述符类型,固定为0x02
uint16_t wTotalLength; // 返回整个数据的长度,返回配置描述符,接口描述符以及端点描述符的全部大小
uint8_t bNumInterfaces; // 配置所支持的接口数,指该配置配备的接口数量,也表示该配置下接口描述符数量
uint8_t bConfigurationValue; // 配置标识符
uint8_t iConfiguration;
uint8_t bmAttributes;
uint8_t bMaxPower;
interface_descriptor_t interface_descriptor;
endpoint_descriptor_t endpoint_descriptor;
...
} configuration_descriptor_t;
参考