打印
[USB驱动]

stm32 usb host hid-class请求返回的数据是上次的字符串数据

[复制链接]
2363|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yutianxiang618|  楼主 | 2017-4-1 17:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 yutianxiang618 于 2017-4-1 17:34 编辑

手上有一个别人的usb device产品,一共2个接口,接口0:id=0,接口1:id=4。接口0是一个mass协议的,我这边不使用;接口2是hid协议,包含2个端点,地址为0X82,0X02.我主要做一个host设备和这个产品的hid双向通信。

在STM32提供的HOST USB HID基础上修改,目前主要是加了一些打印,修改很少,标准请求没有问题,USBH_HID_InterfaceInit 函数我修改了(目前的流程也没有使用到啊),open了2个通道-通道3和通道4,中断类型。现在是host这边发送class请求HID描述符时,host读取到的是上次请求的字符串数据的前9字节,想请问一下可能是哪里的问题,我插入键盘到host设备是可以正常标准请求和class请求,然后正常工作的,谢谢啦。
stm32按键之后的打印如下:

Button_KEY press
bInterfaceClass:8                                                     //这个是接口0,id=0的mass协议,我不与它通信
bInterfaceSubClass:5
bInterfaceProtocol:50                                       
bInterfaceClass:3                                                      //这个是接口1,id=4 hid协议,双向通信
bInterfaceSubClass:0
bInterfaceProtocol:0 //这个是hid协议
这个是用户自定义HID设备
协议验证通过
接口4端点0地址:0x82
接口4端点1地址:0x2
接口4端点0最大包:0x40
接口4端点1最大包:0x40
接口4端点0间隔时间:0xa
接口4端点1间隔时间:0xa
maxEP:2
接口4-端点地址 = 0x82,分配的通道 = 2
hc_num_in = 2,设备address = 1 speed = 1, EP_TYPE = 3 , length = 64             //分配了2个通道,与hid的2个端点通信,现在还没有使用到
接口4-端点地址 = 0x2,分配的通道 = 3
hc_num_out = 3,设备address = 1 speed = 1, EP_TYPE = 3 , length = 64
phost->gState --- HOST_CLASS_REQUEST
HID_IDLE 或者 HID_REQ_GET_HID_DESC  
phost->Control.length = 9
phost->gState --- HOST_CTRL_XFER
hc_num_out = 0
CTRL_SETUP 81  6  0  21  0  0  9  0                                            //请求HID描述符
phost->gState --- HOST_CTRL_XFER
CTRL_SETUP_WAIT
phost->gState --- HOST_CTRL_XFER
CTRL_DATA_IN  
phost->gState --- HOST_CTRL_XFER
CTRL_DATA_IN_WAIT
hc_num_in = 1
CTRL_DATA_IN e  3  41  0  43  0  33  0  30                                //打印输出的是上次标准请求的字符串数据前9字节
phost->gState --- HOST_CTRL_XFER
CTRL_STATUS_OUT
phost->gState --- HOST_CTRL_XFER
CTRL_STATUS_OUT_WAIT
phost->gState --- HOST_CLASS_REQUEST
HID_IDLE 或者 HID_REQ_GET_HID_DESC  
HID_Desc.bLength : 0xe                                                            //上面的hid描述符输入error,导致这里解析错误,程序出错
HID_Desc.bDescriptorType : 0x3  
HID_Desc.bcdHID : 0x41
HID_Desc.bCountryCode : 0x43
HID_Desc.bNumDescriptors : 0x0
HID_Desc.bReportDescriptorType : 0x33
HID_Desc.wItemLength : 0x3000
phost->gState --- HOST_CLASS_REQUEST
HID_REQ_GET_REPORT_DESC  
phost->Control.length = 12288
phost->gState --- HOST_CTRL_XFER
hc_num_out = 0
CTRL_SETUP 81  6  0  22  0  0  0  30   
phost->gState --- HOST_CTRL_XFER
CTRL_SETUP_WAIT
phost->gState --- HOST_CTRL_XFER
CTRL_DATA_IN  
出错部分:
CTRL_SETUP 81  6  0  21  0  0  9  0                                            //请求HID描述符

CTRL_DATA_IN e  3  41  0  43  0  33  0  30                                //打印输出的是上次标准请求的字符串数据前9字节

相关帖子

沙发
yutianxiang618|  楼主 | 2017-4-1 17:23 | 只看该作者
本帖最后由 yutianxiang618 于 2017-4-1 17:36 编辑

产品的配置描述符集合://配置描述符
9-length  2-配置描述符  40-总配置集合长度  0-总配置集合长度  2-接口数  1-配置值  0-字符串索引  80-属性  fa=500mA
//接口0描述符
9-length  4-接口描述符  0-接口编号  0-备用编号  2-端点数  8-MASS  5-子类  50-仅批量  0-索引  
7-length  5-端点描述符  81-地址-端点1 输入  2-批量  40-包长  0-包长  1  
7-length  5-端点描述符  1-地址-端点1 out  2-批量  40-包长  0-包长  1  
//接口4描述符
9-length  4-接口描述符  4-接口编号  0-备用编号  2端点数  3-HID  0-子类  0-协议  0-索引  
9-length  21-HID描述符  10-hid协议  1-hid协议  21-国家代码  1-下级描述符数目  22-下级是报告描述符  1b-下级报告描述符长度  0-长度  
7-length  5-端点描述符  82-地址-端点2 输入  3中断端点  40-包长  0-包长  a-查询时间   
7-length  5-端点描述符  2-地址-端点2 out  3中断端点  40-包长  0-包长  a-查询时间  

使用特权

评论回复
板凳
icecut| | 2017-4-2 16:25 | 只看该作者
41行时候再打印

使用特权

评论回复
地板
yutianxiang618|  楼主 | 2017-4-5 10:09 | 只看该作者
icecut 发表于 2017-4-2 16:25
41行时候再打印

前面的打印我基本都关闭了,只留了一点lcd打印的,结果还是一样,得到的是字符串"AC309N"的前9个字节,全部打印如下:
 USB OTG FS HID Host 
> USB Host library started.
     USB Host Library v2.1.0

> Device Attached
> Full speed device detected
VID : E0B6h
PID : 0D11h
> Mass storage device connected
Manufacturer : AC309N
Product : AC309N
Serial Number : AC309N
                      > Enumeration completed
To start the HID class operations:  
Press Key...                        
HID_IDLE 或者 HID_REQ_GET_HID_DESC  
HID_IDLE 或者 HID_REQ_GET_HID_DESC  
HID_Desc.bLength : 0xe
HID_Desc.bDescriptorType : 0x3
HID_Desc.bcdHID : 0x41
HID_Desc.bCountryCode : 0x43
HID_Desc.bNumDescriptors : 0x0
HID_Desc.bReportDescriptorType : 0x33
HID_Desc.wItemLength : 0x3000

使用特权

评论回复
5
小凤凤| | 2017-4-15 09:51 | 只看该作者
楼主有没有这个USB Hub相关资料发到我邮箱互相学习可好?我最近也是做USB Hub HID设备,但是在实际接来测试时,电脑突然蓝屏了,不知道为何。

使用特权

评论回复
6
yutianxiang618|  楼主 | 2017-5-2 15:28 | 只看该作者
小凤凤 发表于 2017-4-15 09:51
楼主有没有这个USB Hub相关资料发到我邮箱互相学习可好?我最近也是做USB Hub HID设备,但是在实际接来测试 ...

Hub没有弄过,蓝屏应该是PC usb接口电流过大导致的吧,我弄usb转串口时经常出现蓝屏

使用特权

评论回复
7
小凤凤| | 2017-5-3 13:52 | 只看该作者
yutianxiang618 发表于 2017-5-2 15:28
Hub没有弄过,蓝屏应该是PC usb接口电流过大导致的吧,我弄usb转串口时经常出现蓝屏 ...

好吧

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

12

主题

103

帖子

1

粉丝