[技术问答] nuc980使用usb gadget hid功能和pc电脑通信问题

[复制链接]
 楼主| probedog 发表于 2024-12-13 11:11 | 显示全部楼层 |阅读模式
nuc980使用usb0作为从机,在linux内核驱动中开启gadget hid功能,从机需要和pc上位机进行大数据量(1k)通信时,从机每发一包(一个packet 8字节),必须延时50ms以上,不然上位机会丢失部分信息,用usb bus hound抓包工具查看,如果监控了从机设备号usb input device数据是没问题,但是Hid-compliant device数据就丢失了。我自己尝试改了linux内核里面hid.c文件
static struct usb_composite_driver hidg_driver = {
        .name                = "g_hid",
        .dev                = &device_desc,
        .strings        = dev_strings,
        .max_speed        = USB_SPEED_FULL,//by zl
        .bind                = hid_bind,
        .unbind                = hid_unbind,
};

把高速改成全速,但是好像没起到作用,设备信息里还是高速。请问,从机一次性需要把许多数据发给上位机,每发一个packet必须长时间延时,这是什么原因导致的。
huangcunxiake 发表于 2024-12-13 14:43 来自手机 | 显示全部楼层
有没有调试设备,看看那个延时是什么导致的在哪儿停下来了
riplay 发表于 2024-12-13 16:46 | 显示全部楼层
用usb bus hound抓包是,数据是否正确呢?如果正确应该是主机端的应用接收数据有遗漏。
白马过平川 发表于 2025-2-13 16:48 | 显示全部楼层
使用USB抓包工具(如USB Bus Hound)分析PC端接收到的数据,确认问题是否出在PC

失物招領 发表于 2025-2-14 01:31 | 显示全部楼层
如果你的设备配置为高速模式(High-Speed, HS),理论上它应该能够以更高的速率传输数据。然而,如果端点(Endpoint)配置不当或缓冲区大小不足,可能会导致数据丢失

她已醉 发表于 2025-2-14 02:38 | 显示全部楼层
你已经尝试将速度改为全速(Full-Speed, FS),但设备仍然显示为高速。这可能是因为设备描述符或其他配置信息未正确更新,或者PC端的USB主机控制器仍然以高速模式识别设备

将爱藏于深海 发表于 2025-2-14 03:21 | 显示全部楼层
检查设备描述符中的bMaxPacketSize0和各个接口的端点描述符中的wMaxPacketSize,确保它们与所选速度相匹配

温室雏菊 发表于 2025-2-14 04:29 | 显示全部楼层
HID设备通过报告(Report)与主机通信。报告描述符定义了报告的结构和内容

春日负喧 发表于 2025-2-14 05:27 | 显示全部楼层
如果你的HID报告描述符配置不当,或者报告大小超过了端点的处理能力,可能会导致数据丢失

故意相遇 发表于 2025-2-14 06:28 | 显示全部楼层
检查报告描述符,确保它适合你的数据传输需求,并且没有超出端点的限制

捧一束彼岸花 发表于 2025-2-14 07:23 | 显示全部楼层
USB HID通常用于低延迟、小数据包的应用,如键盘、鼠标等。对于大数据量传输,HID可能不是最佳选择

西洲 发表于 2025-2-14 08:29 | 显示全部楼层
考虑使用USB大容量存储(Mass Storage)或自定义类设备(如CDC ACM用于通信),这些类通常更适合大数据传输

风凉 发表于 2025-2-14 09:41 | 显示全部楼层
PC端的USB主机堆栈和HID类驱动程序负责处理来自设备的数据。如果它们存在缺陷或配置不当,可能会导致数据丢失

白马过平川 发表于 2025-2-14 10:51 | 显示全部楼层
使用USB抓包工具(如USB Bus Hound)分析PC端接收到的数据,确认问题是否出在PC

您需要登录后才可以回帖 登录 | 注册

本版积分规则

486

主题

3268

帖子

4

粉丝
快速回复 在线客服 返回列表 返回顶部