打印
[研电赛技术支持]

GD32 USB HID键盘 端点发送数据错误问题

[复制链接]
6200|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
用官方案例,USB keyboard改成端点2发数据,USB hound抓数据时发现发不了数据,后来发现端点2的FIFO大小在头文件里默认为0,改成128后,usb hound抓数据发现发的数据有问题,为什么呢?官方案例用的端点1就可以发数据,换成端点2发数据就有问题。。求助!!!

使用特权

评论回复
沙发
sonicll| | 2021-6-21 10:58 | 只看该作者
需要注意,头文件里定义的FIFO_SIZE,单位是4字节(32bit),所有的FIFO_SIZE加起来不能超过320,FIFO的总容量是1.25K,320x4=1280=1.25K

使用特权

评论回复
板凳
moshaoxi168|  楼主 | 2021-6-21 11:02 | 只看该作者
端点1/2抓到的枚举图,发数据数据帧以及UsbTree抓到的端点描述符如图,求助!!!!!啊啊啊

端点2数据图.jpg (481.7 KB )

端点2数据图

端点2数据图

端点2枚举图.jpg (471.29 KB )

端点2枚举图

端点2枚举图

端点1数据图.jpg (493.17 KB )

端点1数据图

端点1数据图

端点1枚举图.jpg (249.95 KB )

端点1枚举图

端点1枚举图

UsbTreeView抓到的端点2.jpg (292.84 KB )

Usbtree抓到的端点2

Usbtree抓到的端点2

UsbTreeView抓到的端点1.jpg (528.66 KB )

Usbtree抓到的端点1

Usbtree抓到的端点1

fifo大小宏.jpg (330.96 KB )

fifo宏

fifo宏

使用特权

评论回复
地板
moshaoxi168|  楼主 | 2021-6-21 11:05 | 只看该作者
sonicll 发表于 2021-6-21 10:58
需要注意,头文件里定义的FIFO_SIZE,单位是4字节(32bit),所有的FIFO_SIZE加起来不能超过320,FIFO的总容 ...

OK了,按照你的说法改了下FIFO大小,OK了,谢谢

使用特权

评论回复
5
moshaoxi168|  楼主 | 2021-6-22 11:22 | 只看该作者
sonicll 发表于 2021-6-21 10:58
需要注意,头文件里定义的FIFO_SIZE,单位是4字节(32bit),所有的FIFO_SIZE加起来不能超过320,FIFO的总容 ...

你好,我还想再问一个,RX fifo分配到的大小是否也要算到320KB里呢?还是说这个320KB只是TX fifo的总上限?我看GD32的SPEC上好像没有太过详细的说明这点,也或许我看漏了

使用特权

评论回复
6
sonicll| | 2021-6-22 13:36 | 只看该作者
moshaoxi168 发表于 2021-6-22 11:22
你好,我还想再问一个,RX fifo分配到的大小是否也要算到320KB里呢?还是说这个320KB只是TX fifo的总上限 ...

320包含RX FIFO,320(1.25KB)是RX+TX的总上限

使用特权

评论回复
7
moshaoxi168|  楼主 | 2021-6-22 15:11 | 只看该作者
sonicll 发表于 2021-6-22 13:36
320包含RX FIFO,320(1.25KB)是RX+TX的总上限

假设我现在想做一个USB HID组合设备:键盘+鼠标,一个设备描述符,一个配置描述符,然后两个接口描述符,一个接口mouse,另一个接口keyboard,键鼠各分配一个输入端点去传host数据(键盘端点1,鼠标端点2),现在可以枚举出混合设备,且mouse和keyboard都可以单独发数据给host,但是一旦mouse和keyboard一起开始发数据,就发现只有mouse的数据通过端点2发了出去,keyboard的端点1数据发不出去了,折腾了这些天还是没怎么搞清楚为什么。是否有什么互斥机制不允许不同端点之间同时发数据?其实也不是同时发,只不过是发完了keyboard的马上继续发mouse的数据,我键鼠的端点都是配成中断端点的,不过在发数据的函数里好像也没体现出间歇性中断发数据的特性...

使用特权

评论回复
8
moshaoxi168|  楼主 | 2021-6-22 15:12 | 只看该作者
sonicll 发表于 2021-6-22 13:36
320包含RX FIFO,320(1.25KB)是RX+TX的总上限

GD32官方有没有组合设备的官方案例呢?搞这个USB hid组合设备各种碰坑,各种不懂,手头上连个参考程序都没

使用特权

评论回复
9
sonicll| | 2021-6-23 09:55 | 只看该作者
moshaoxi168 发表于 2021-6-22 15:11
假设我现在想做一个USB HID组合设备:键盘+鼠标,一个设备描述符,一个配置描述符,然后两个接口描述符, ...

中断端点的周期性,是指主机周期性的发IN或者OUT请求,设备端是没有周期概念的,设备只要收到IN请求就发数据,收到OUT请求就接收数据。你可以抓包看看主机有没有周期性的给你的端点1和2发IN请求,如果没有,那就是主机的问题,或者是你设备端的描述符没写对。如果主机发送的请求正确,那就看看你设备端是不是返回的NAK,再查查是什么原因导致的NAK

使用特权

评论回复
10
moshaoxi168|  楼主 | 2021-7-16 09:31 | 只看该作者
sonicll 发表于 2021-6-23 09:55
中断端点的周期性,是指主机周期性的发IN或者OUT请求,设备端是没有周期概念的,设备只要收到IN请求就发 ...

大哥,我还想再询问一个事情,为啥我配出来的USB HID KEYBOARD设备连set report的命令都不支持呢?因为还有一个事情要做,num lock/cap lock这种按键按下后,host端会发一个包给所有的键盘设备让他们同步各个num lock/cap lock按键的状态(是否按下)。但是我的hid keyboard已经配置了输出OUT端点,也对这个输出端点做了初始化,然后发现当我外接的usb键盘按下num lock时,自己配的hid键盘,代码里根本不会走到set report的分支,那就更别谈怎么从host那里接收num lock/cap lock按键状态的包了

使用特权

评论回复
11
moshaoxi168|  楼主 | 2021-7-16 09:33 | 只看该作者
sonicll 发表于 2021-6-23 09:55
中断端点的周期性,是指主机周期性的发IN或者OUT请求,设备端是没有周期概念的,设备只要收到IN请求就发 ...

我在代码里,处理各个hid协议的handler函数里,set report分支里做了串口打印,发现我外接键盘无论怎么按num lock,自己配的hid键盘,代码压根就没进过这个set report的分支,usb hound也没抓到来自主机OUT的数据

使用特权

评论回复
12
moshaoxi168|  楼主 | 2021-7-16 09:39 | 只看该作者
sonicll 发表于 2021-6-23 09:55
中断端点的周期性,是指主机周期性的发IN或者OUT请求,设备端是没有周期概念的,设备只要收到IN请求就发 ...

USB host端下这个状态包是传输给哪一个端点的?是自己配的输出端点还是所有USB设备都必须拥有的端点0?

使用特权

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

本版积分规则

1

主题

9

帖子

0

粉丝