请教ch582 HostU2Enum例程在获取报表描述符时候出现的错误

babde4995af70a662130869fdcdef61.png

上图是在ch582 HostU2Enum基础上参考CH559EVT修改而来的代码;由于CtrlGetU2HIDDeviceReport有SetIdeal操作,所以就直接调用了,我们的设备有三个接口

/*********************************************************************
 * @fn      CtrlGetU2HIDDeviceReport
 *
 * @brief   获取HID设备报表描述符,返回在TxBuffer中
 *
 * @param   none
 *
 * @return  错误码
 */
uint8_t CtrlGetU2HIDDeviceReport(uint8_t infc)
{
    uint8_t s;
    uint8_t len;

    CopyU2SetupReqPkg((uint8_t *)SetupSetU2HIDIdle);
    pU2SetupReq->wIndex = infc;
    s = U2HostCtrlTransfer(U2Com_Buffer, &len); // 执行控制传输
    if(s != ERR_SUCCESS)
    {
        return (s);
    }

    CopyU2SetupReqPkg((uint8_t *)SetupGetU2HIDDevReport);
    pU2SetupReq->wIndex = infc;
    s = U2HostCtrlTransfer(U2Com_Buffer, &len); // 执行控制传输
    if(s != ERR_SUCCESS)
    {
        return (s);
    }

    return (ERR_SUCCESS);
}


调用CtrlGetU2HIDDeviceReport获取接口0和接口1的报告描述符正常,但接口2的描述符不正常,如下图

c7b372d05acee391b98bad925ec0c08.png

出现0x2E,

#define ERR_USB_TRANSFER       0x20  /* NAK/STALL等更多错误码在0x20~0x2F */

所以想请假如何解决这个问题

另外我们usbhid描述符情况如下附件,是一个三个接口的hid类复合设备

icon_rar.gifUSB Composite Device.rar


尝试过用抓包软件抓包看看吗,或者用USB分析仪抓包USB总线分析仪 - 南京沁恒微电子股份有限公司 (wch.cn)


楼主,能分享下CH582  usb HOST识别复合设备的程序嘛


您好,主机枚举代码本身是拿到了各个接口描述符,是可以识别复合设备的,不过主机例程中没有做多接口的处理,需要自行添加。

为了方便使用评估板测试,以USB2口直接接入一个HID复合设备为例,例程代码只保留了一个设备类型在ThisUsb2Dev.DeviceType中。添加其他接口,可以将ThisUsb2Dev.DeviceType改写为数组,在InitRootU2Device()中保留多个接口的类型以及对应的端点号,并改写主循环中的搜索设备的函数U2SearchTypeDevice(),轮询每一个设备类型数组来找到匹配的端点继而进行收发包控制。InitRootU2Device()中的包括主循环中搜索的“设备类型”是自定义的,非标准的,比如说DEV_TYPE_MOUSE是定义为USB_DEV_CLASS_HID | 0x30,可以在下面再添加其他设备类型的宏。


只有登录才能回复,可以选择微信账号登录