CoiSiNi7 2024-04-26 16:11 采纳率: 0%
浏览 7
已结题

usb设备兼容性问题

问题遇到的现象和发生背景

最近在做一个hid触摸屏的项目,前期测试所有电脑枚举正常,功能也正常;但是最近有一台客户的电脑枚举成功,但是没有触摸功能。经过调试发现那台没功能的电脑没有成功上传手指数,GET_REPORT没有回应导致usb断开(如图)。但是功能可以的电脑能正常返回手指数。

img

操作环境、软件版本等信息

电脑系统是正版的win11家庭版,公司的同版本系统没这个问题。客户电脑用别的触摸设备功能也正常。

端点0返回代码

img

img

  • 写回答

15条回答 默认 最新

  • 阿里嘎多学长 2024-04-26 16:11
    关注

    以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:


    图片内容

    1. 第一张图片显示了USB HID设备请求处理的代码片段,其中包含了一个判断请求方向的逻辑,以及对特定请求的处理,特别是对USB HID GET REPORT请求的处理。代码中还包含了对报告类型和报告ID的检查,以及如何通过端点0返回特性报告的逻辑。
    2. 第二张图片包含了USB通信的日志,显示了各种USB请求和响应,包括GET DESCRIPTORSET CONFIG等操作。日志显示了请求的时间戳、请求类型、数据传输方向(INOUT)、传输的数据以及响应状态。
    3. 第三张图片展示了USB HID设备在接收到USB_HID_SET_IDLE请求时的代码处理逻辑,包括对数据长度的检查和相应的响应。

    问题概括

    问题是关于一个HID触摸屏项目,在大多数电脑上枚举和功能都正常,但在一台特定客户的电脑上,触摸屏没有触摸功能,原因是GET_REPORT请求没有得到响应,导致USB连接断开。

    问题出现原因

    问题可能出现的原因包括:

    • 客户电脑上的USB驱动与HID触摸屏的兼容性问题。
    • 客户电脑上的USB端口可能存在硬件问题。
    • HID触摸屏的固件可能在处理特定请求时存在逻辑错误。

    问题解决方案

    1. 检查USB驱动:确保客户电脑上的USB驱动是最新的,并且与HID触摸屏兼容。
    2. 检查USB端口:尝试使用客户电脑上的其他USB端口,以排除硬件问题。
    3. 固件更新:检查HID触摸屏的固件是否有更新,更新固件可能解决兼容性问题。
    4. 代码审查:根据提供的图片中的代码,检查GET_REPORT请求的处理逻辑是否正确,特别是报告类型和报告ID的检查。

    提供代码

    根据第一张图片中的代码,以下是修改后的代码片段,以确保GET_REPORT请求能够正确处理:

    if ((pSetup->RequestType & 0x80) == 0x80) {
        // 从主机到设备
        switch (pSetup->Request) {
            case USB_HID_GET_REPORT:
                // 报告类型为3(Feature)且报告ID为VendorID2
                if (((pSetup->wValue >> 8) == 3) && ((pSetup->wValue & 0xFF) == VendorID2) &&
                    (pSetup->wIndex == 0) && (pSetup->wLength == 2)) {
                    // 通过端点0返回我们的特性报告
                    pSendData = MaxContactCountReport;
                    DataLength = pSetup->wLength;
                    // 将数据通过EPO返回
                    USBD_IxWrite(0, (uint8_t *)pSendData, DataLength);
                    break;
                }
                // 其他报告类型的处理...
                default:
                    // 如果请求的报告类型不被支持,发送STALL响应
                    USBD_StallEP(0);
                    break;
        }
    } else {
        // 从设备到主机的处理...
    }
    

    代码运行方式

    • 将上述代码集成到HID触摸屏的固件中。
    • 使用单片机编程器将固件烧录到HID触摸屏的MCU中。
    • 在客户电脑上测试新的固件。

    代码预期运行结果

    • 当客户电脑发送GET_REPORT请求时,HID触摸屏能够正确响应,不再断开USB连接。
    • 触摸屏功能在客户电脑上恢复正常。

    推荐相关链接

    请注意,上述代码和解决方案需要根据实际的固件架构和客户电脑的具体情况进行调整。如果问题依然存在,可能需要进一步的调试和分析。

    评论 编辑记录

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 4月29日
  • 创建了问题 4月26日

悬赏问题

  • ¥15 Vue3 大型图片数据拖动排序
  • ¥15 划分vlan后不通了
  • ¥15 GDI处理通道视频时总是带有白色锯齿
  • ¥20 用雷电模拟器安装百达屋apk一直闪退
  • ¥15 算能科技20240506咨询(拒绝大模型回答)
  • ¥15 自适应 AR 模型 参数估计Matlab程序
  • ¥100 角动量包络面如何用MATLAB绘制
  • ¥15 merge函数占用内存过大
  • ¥15 使用EMD去噪处理RML2016数据集时候的原理
  • ¥15 神经网络预测均方误差很小 但是图像上看着差别太大