端点可以用0控制。
看USB2.0规范手册得知,端点0是控制类传输,不用端点描述,WINDOWS可为HID可以安装驱动,以报告格式收发数据
uint8 USB_DeviceDescriptor[18]=//设备描述符
{
//bLength 1字节-描术符的长度(18字节)
0x12,
//bDescriptorType 1字节-描术符类型(设备描术类)
0x01,
//bcdUSB 2字节-设备所使用USB协议版本(USB1.1 PS:低位先行)
0x10,
0x01,
//bDeviceClass 1字节-类代码
0x00,
//bDeviceSubClass 1字节-子类代码
0x00,
//bDeviceProtocol 1字节-设备所使用协议
0x00,
//bMaxPackeSize0 1字节-端点0最大包长(16字节)
0x10,
//idVender 2字节-厂商ID(PS:低位先行)
0x12,
0x34,
//idProduct 2字节-产品ID(PS:低位先行)
0x01,
0x00,
//bcdDevice 2字节-设备版本号(PS:低位先行)
0x01,
0x00,
//iManufacturer 1字节-厂家字符串索引
0x01,
//iProduct 1字节-产品字符串索引
0x02,
//iSeriaNumber 1字节-序列号字符串索引
0x03,
//bNumConfigurations 1字节-可用的配置数
0x01
};
uint8 USB_ConfigDescriptor[27]=
{
/*-----------------------------------配置描述符-------------------------------*/
//bLength 1字节-该描述符长度(9字节)
0x09,
//bDescriptorType 1字节-描述符类型(配置描述符)
0x02,
//wTotalLength 2字节-配置描述符集合总长度(PS:低位先行)
sizeof(USB_ConfigDescriptor), //USBD12_bmReqType()函数限定了配置描述符长度最大为0xFF,如需要发送更大,的配置描述符,要改函数
(sizeof(USB_ConfigDescriptor)>>8),
//bNumInterfaces 1字节-该配置所支持的接口数(1接口数)
0x01,
//bConfigurationValue 1字节-该配置的索引(SetConfiguration()请求对应值)
0x01,
//iConfiguration 1字节-描述该配置的字符串的索引值(没字符串)
0x00,
//bmAttributes 1字节-该设备属性(总线供电,不支持远程唤醒)
0x80,
//bMaxPower 1字节-该设备所需的电流(I=N*2mA 50*2=100mA)
0x32,
/*-----------------------------------接口描述符-------------------------------*/
//bLength 1字节-该描述符长度(9字节)
0x09,
//bDescriptorType 1字节-描述符类型(接口描述符)
0x04,
//bInterfaceNumber 1字节-该接口编号(0)
0x00,
//bAlternateSetting 1字节-该接口备用编号(0)
0x00,
//bNumendpoints 1字节-该接口使用的端点数(仅用ENDP0)
0x00,
//bInterfaceClass 1字节-该接口使用的类(HID)
0x03,
//bInterfaceSubClass 1字节-该接口使用子类(非启动接口)
0X00,
//bInterfaceProtocol 1字节-该接口使用的协议
0X00,
//iInterface 1字节-该接口的字符串索引值(没字符串)
0x00,
/*-----------------------------------HID述符----------------------------------*/
//bLength 1字节-该描述符长度(9字节)
0x09,
//bDescriptorType 1字节-描述符类型(HID描述符)
0x21,
//bcdHID 2字节-HID版本(HID1.11 PS:低位先行)
0x11,
0x01,
//bCountyCode 1字节-设备适用的国家代码(ISO)
0x0D,
//bNumDescriptors 1字节-下级描述符的数目(1)
0x01,
//bDescritporType 1字节-下级描述符类型(报告)
0x22,
//bDescrittorLength 1字节-下级描述符长度(PS:低位先行)
sizeof(USB_ReportDescriptor),
(sizeof(USB_ReportDescriptor)>>8)
/*-----------------------------------IN端点描述符-------------------------------*//* 端点0不应有端点描述
//bLength 1字节-该描述符长度(7字节)
0x07,
//bDescriptorType 1字节-描述符类型(端点描述符)
0x05,
//bEndpointAddress 1字节-端点地址(D7=1,IN方向;D0=0,端点0)
0x80,
//bmAttributes 1字节-端点传类型(控传输,端点0仅支持控制传输)
0x00,
//wMaxPackSize 2字节-该端点最大包长(16 PS:低位先行)
0x10,
0x00,
//bInterval 1字节-端点询时间(帧/ms 10ms)
0x0A,
/*-----------------------------------OUT端点描述符-------------------------------
//bLength 1字节-该描述符长度(7字节)
0x07,
//bDescriptorType 1字节-描述符类型(端点描述符)
0x05,
//bEndpointAddress 1字节-端点地址(D7=0,OUT方向;D0=0,端点0)
0x00,
//bmAttributes 1字节-端点传类型(控制传输,端点0仅支持控制传输)
0x00,
//wMaxPackSize 2字节-该端点最大包长(16 PS:低位先行)
0x10,
0x00,
//bInterval 1字节-端点询时间(帧/ms 10ms)
0x0A */
};
uint8 USB_ReportDescriptor[19]= //报告描述符
{
//USAGE_PAGE (Vendor Defined Page 1)
0x06,0x00,0xFF,
//LOGICAL_MINIMUM (0)
0x15,0x00,
//LOGICAL_MAXIMUM (1)
0x25,0x01,
//REPORT_SIZE (1)
0x75,0x01,
//REPORT_COUNT (32)
0x95,0x20,
//INPUT (Data,Var,Abs,NLin)
0x81,0x12,
//REPORT_COUNT (32)
0x95,0x20,
//REPORT_SIZE (1)
0x75,0x01,
//OUTPUT (Data,Var,Abs,NLin)
0x91,0x12
}; |