USB Hid通信 端点只能采用 中断方式吗?能设置为别的方式吗?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了USB Hid通信 端点只能采用 中断方式吗?能设置为别的方式吗?相关的知识,希望对你有一定的参考价值。

中断方式的最大延迟时间是多少? /******************** Descriptor of Custom HID endpoints ******************/ /* 27 */ 0x07, /* bLength: Endpoint Descriptor size */ USB_ENDPOINT_DESCRIPTOR_TYPE, /* bDescriptorType: */ 0x81, /* bEndpointAddress: Endpoint Address (IN) */ 0x03, /* bmAttributes: Interrupt endpoint */ 0x02, /* wMaxPacketSize: 2 Bytes max */ 0x00, 0x20, /* bInterval: Polling Interval (32 ms) */ //这一项我能改为 0 或者 1 吗? /* 34 */ 0x07, /* bLength: Endpoint Descriptor size */ USB_ENDPOINT_DESCRIPTOR_TYPE, /* bDescriptorType: */ /* Endpoint descriptor type */ 0x01, /* bEndpointAddress: */ /* Endpoint Address (OUT) */ 0x03, /* bmAttributes: Interrupt endpoint */ 0x02, /* wMaxPacketSize: 2 Bytes max */ 0x00, 0x20, /* bInterval: Polling Interval (32 ms) */ //这一项我能改为 0 或者 1 吗? /* 41 */

参考技术A 端点可以用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 ;本回答被提问者采纳

以上是关于USB Hid通信 端点只能采用 中断方式吗?能设置为别的方式吗?的主要内容,如果未能解决你的问题,请参考以下文章

如何与 Windows 上的 USB-HID 设备通信?

使用 Android 与 USB HID 设备通信

USB 虚拟串口简介

利用STM32CubeMX来生成USB_HID_Mouse工程添加ADC非dma和中断方式

如何从Windows 7中的非HID设备捕获USB中断?

当端点和 PMA 地址都更改时,CubeMX 生成的 USB HID 设备发送错误数据