[研电赛技术支持] GD32 USB HID键盘 端点发送数据错误问题

[复制链接]
7382|11
 楼主| moshaoxi168 发表于 2021-6-21 10:48 | 显示全部楼层 |阅读模式
用官方案例,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抓到的端点描述符如图,求助!!!!!啊啊啊

fifo宏

fifo宏

Usbtree抓到的端点1

Usbtree抓到的端点1

Usbtree抓到的端点2

Usbtree抓到的端点2

端点1枚举图

端点1枚举图

端点1数据图

端点1数据图

端点2枚举图

端点2枚举图

端点2数据图

端点2数据图
 楼主| moshaoxi168 发表于 2021-6-21 11:05 | 显示全部楼层
sonicll 发表于 2021-6-21 10:58
需要注意,头文件里定义的FIFO_SIZE,单位是4字节(32bit),所有的FIFO_SIZE加起来不能超过320,FIFO的总容 ...

OK了,按照你的说法改了下FIFO大小,OK了,谢谢
 楼主| 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上好像没有太过详细的说明这点,也或许我看漏了
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的总上限
 楼主| 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的数据,我键鼠的端点都是配成中断端点的,不过在发数据的函数里好像也没体现出间歇性中断发数据的特性...
 楼主| moshaoxi168 发表于 2021-6-22 15:12 | 显示全部楼层
sonicll 发表于 2021-6-22 13:36
320包含RX FIFO,320(1.25KB)是RX+TX的总上限

GD32官方有没有组合设备的官方案例呢?搞这个USB hid组合设备各种碰坑,各种不懂,手头上连个参考程序都没
sonicll 发表于 2021-6-23 09:55 | 显示全部楼层
moshaoxi168 发表于 2021-6-22 15:11
假设我现在想做一个USB HID组合设备:键盘+鼠标,一个设备描述符,一个配置描述符,然后两个接口描述符, ...

中断端点的周期性,是指主机周期性的发IN或者OUT请求,设备端是没有周期概念的,设备只要收到IN请求就发数据,收到OUT请求就接收数据。你可以抓包看看主机有没有周期性的给你的端点1和2发IN请求,如果没有,那就是主机的问题,或者是你设备端的描述符没写对。如果主机发送的请求正确,那就看看你设备端是不是返回的NAK,再查查是什么原因导致的NAK
 楼主| 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按键状态的包了
 楼主| 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的数据
 楼主| moshaoxi168 发表于 2021-7-16 09:39 | 显示全部楼层
sonicll 发表于 2021-6-23 09:55
中断端点的周期性,是指主机周期性的发IN或者OUT请求,设备端是没有周期概念的,设备只要收到IN请求就发 ...

USB host端下这个状态包是传输给哪一个端点的?是自己配的输出端点还是所有USB设备都必须拥有的端点0?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

9

帖子

0

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