OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3837|回复: 10

GD32F4系列,使用USB-HID主机模式下的键盘鼠标例程遇到只能接收8字节的问题

[复制链接]

53

主题

167

帖子

0

精华

高级会员

Rank: 4

积分
839
金钱
839
注册时间
2016-8-23
在线时间
116 小时
发表于 2023-4-27 10:40:08 | 显示全部楼层 |阅读模式
10金钱
最近在用GFD32F405VG型号芯片,跟触摸框做一个USB数据通信功能。触摸框做从机,GD32F405VG做主机。然后参考GD的例程做简单的配置测试。现在遇到了个问题,使用例程接收到触摸数据只有8个字节。然后触摸框有两路USB,两路USB发送的触摸数据是一样的,我用BusHound工具从另一路USB接收数据,可以接收到62个字节,BusHound接收数据如下:
Bus Hound 6.00 capture on Windows Vista (x64). Complements of www.perisoft.net

  Device - Device ID (followed by the endpoint for USB devices)
            (21) HID-compliant touch screen
  Length - Total transfer length
  Phase  - Phase Type
            IN    Data in transfer           
  Data   - Hex dump of the data transferred
  Descr  - Description of the phase
  Cmd... - Position in the captured data


Device  Length    Phase  Data                                                Description       Cmd.Phase.Ofs(rep)
------  --------  -----  --------------------------------------------------  ----------------  ------------------
  21          62  IN     02 07 00 fb  05 b1 0a 60  00 08 01 00  ff 00 00 00  .......`........         1.1.0        
                         00 00 00 00  00 00 ff 00  00 00 00 00  00 00 00 00  ................         1.1.16      
                         ff 00 00 00  00 00 00 00  00 00 ff 00  00 00 00 00  ................         1.1.32      
                         00 00 00 00  ff 00 00 00  00 00 00 00  00 01        ..............           1.1.48      
  21          62  IN     02 07 00 fe  05 b8 0a 30  00 bc 00 00  ff 00 00 00  .......0........         2.1.0        
                         00 00 00 00  00 00 ff 00  00 00 00 00  00 00 00 00  ................         2.1.16      
                         ff 00 00 00  00 00 00 00  00 00 ff 00  00 00 00 00  ................         2.1.32      
                         00 00 00 00  ff 00 00 00  00 00 00 00  00 01        ..............           2.1.48      
  21          62  IN     02 07 00 03  06 c1 0a 30  00 bc 00 00  ff 00 00 00  .......0........         3.1.0        
                         00 00 00 00  00 00 ff 00  00 00 00 00  00 00 00 00  ................         3.1.16      
                         ff 00 00 00  00 00 00 00  00 00 ff 00  00 00 00 00  ................         3.1.32      
                         00 00 00 00  ff 00 00 00  00 00 00 00  00 01        ..............           3.1.48      
  21          62  IN     02 07 00 09  06 ca 0a 30  00 bc 00 00  ff 00 00 00  .......0........         4.1.0        
                         00 00 00 00  00 00 ff 00  00 00 00 00  00 00 00 00  ................         4.1.16      
                         ff 00 00 00  00 00 00 00  00 00 ff 00  00 00 00 00  ................         4.1.32      
                         00 00 00 00  ff 00 00 00  00 00 00 00  00 01        ..............           4.1.48      
  21          62  IN     02 07 00 0a  06 cc 0a 60  00 08 01 00  ff 00 00 00  .......`........         5.1.0        
                         00 00 00 00  00 00 ff 00  00 00 00 00  00 00 00 00  ................         5.1.16      
                         ff 00 00 00  00 00 00 00  00 00 ff 00  00 00 00 00  ................         5.1.32      
                         00 00 00 00  ff 00 00 00  00 00 00 00  00 01        ..............           5.1.48      
  21          62  IN     02 07 00 07  06 c1 0a 4d  00 a8 00 00  ff 00 00 00  .......M........         6.1.0        
                         00 00 00 00  00 00 ff 00  00 00 00 00  00 00 00 00  ................         6.1.16      
                         ff 00 00 00  00 00 00 00  00 00 ff 00  00 00 00 00  ................         6.1.32      
                         00 00 00 00  ff 00 00 00  00 00 00 00  00 01        ..............           6.1.48      
  21          62  IN     02 07 00 03  06 af 0a 45  00 87 00 00  ff 00 00 00  .......E........         7.1.0        
                         00 00 00 00  00 00 ff 00  00 00 00 00  00 00 00 00  ................         7.1.16      
                         ff 00 00 00  00 00 00 00  00 00 ff 00  00 00 00 00  ................         7.1.32      
                         00 00 00 00  ff 00 00 00  00 00 00 00  00 01        ..............           7.1.48      
  21          62  IN     02 04 00 fe  05 9c 0a 66  00 5f 00 00  ff 00 00 00  .......f._......         8.1.0        
                         00 00 00 00  00 00 ff 00  00 00 00 00  00 00 00 00  ................         8.1.16      
                         ff 00 00 00  00 00 00 00  00 00 ff 00  00 00 00 00  ................         8.1.32      
                         00 00 00 00  ff 00 00 00  00 00 00 00  00 01        ..............           8.1.48      


然后从GD32F4例程那边,在鼠标的decode函数里接收打印的数据是这样的:
usb_pipe *pp = &udev->host.pipe[2]
pp->xfer_count = 0
[14:19:52.524]收←◆x08
0x01 0x01 0x45 0x1c 0x95 0x4e 0x01 0x00

usb_pipe *pp = &udev->host.pipe[2]
pp->xfer_count = 0x08
0x01 0x01 0x45 0x1c 0x95 0x4e 0x01 0x00

usb_pipe *pp = &udev->host.pipe[2]
pp->xfer_count = 0x08
0x01 0x01 0x45 0x1c 0x95 0x4e 0x01 0x00

usb_pipe *pp = &udev->host.pipe[2]
pp->xfer_count = 0x08
0x01 0x01 0x34 0x16 0x89 0x48 0x01 0x00


测试结果就是这样,有哪位兄弟用过这个例程的,遇到跟我相似的问题的。你们是怎么解决这个问题的,请多指教

最佳答案

查看完整内容[请看2#楼]

经过触摸框供应商技术人员调试,最终发现是触摸框软件的问题。跟自己的USB软件没关系
天道酬勤
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

53

主题

167

帖子

0

精华

高级会员

Rank: 4

积分
839
金钱
839
注册时间
2016-8-23
在线时间
116 小时
 楼主| 发表于 2023-4-27 10:40:09 | 显示全部楼层
经过触摸框供应商技术人员调试,最终发现是触摸框软件的问题。跟自己的USB软件没关系
天道酬勤
回复

使用道具 举报

3

主题

821

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3329
金钱
3329
注册时间
2011-11-10
在线时间
207 小时
发表于 2023-4-28 08:40:29 | 显示全部楼层
描述符仔细检查一遍
回复

使用道具 举报

53

主题

167

帖子

0

精华

高级会员

Rank: 4

积分
839
金钱
839
注册时间
2016-8-23
在线时间
116 小时
 楼主| 发表于 2023-5-8 10:02:54 | 显示全部楼层
c2007s 发表于 2023-4-28 08:40
描述符仔细检查一遍

----- get only 1st 8 bytes device descriptor -----
send a SETUP packet

----- get only 1st 8 bytes device descriptor -----

receive a data packet from the USB device

----- get only 1st 8 bytes device descriptor -----

USB status OUT transaction

----- get only 1st 8 bytes device descriptor -----
bLength: 0x12
bDescriptorType: 0x01
bcdUSB: 0x0200
bDeviceClass: 0x00
bDeviceSubClass: 0x00
bDeviceProtocol: 0x00
bMaxPacketSize0: 0x40

---------- get full device descriptor ----------
send a SETUP packet

---------- get full device descriptor ----------

receive a data packet from the USB device
usb_pipe *pp = &udev->host.pipe[1]
pp->xfer_count = 0x08

---------- get full device descriptor ----------

USB status OUT transaction

---------- get full device descriptor ----------
bLength: 0x12
bDescriptorType: 0x01
bcdUSB: 0x0200
bDeviceClass: 0x00
bDeviceSubClass: 0x00
bDeviceProtocol: 0x00
bMaxPacketSize0: 0x40
idVendor: 0x2FE9
idProduct: 0xFF00
bcdDevice(version): 0x0902
iManufacturer: 0x01
iProduct: 0x02
iSerialNumber: 0x03
bNumberConfigurations: 0x01
VID: 2FE9
PID: FF00

---------- set address ----------
send a SETUP packet

---------- set address ----------

USB status IN transaction
usb_pipe *pp = &udev->host.pipe[1]
pp->xfer_count = 0x12

---------- set address ----------

----- get standard configuration descriptor ------
send a SETUP packet

----- get standard configuration descriptor ------

receive a data packet from the USB device

----- get standard configuration descriptor ------

USB status OUT transaction

----- get standard configuration descriptor ------
bLength: 0x09
bDescriptorType: 0x02
wTotalLength: 0x0029
bNumInterfaces: 0x01
bConfigurationValue: 0x01
iConfiguration: 0x00
bmAttributes: 0xa0
bMaxPower: 0x0096

---------- get full configure descriptor ----------
send a SETUP packet

---------- get full configure descriptor ----------

receive a data packet from the USB device
usb_pipe *pp = &udev->host.pipe[1]
pp->xfer_count = 0x09

---------- get full configure descriptor ----------

USB status OUT transaction

---------- get full configure descriptor ----------
bLength: 0x09
bDescriptorType: 0x02
wTotalLength: 0x0029
bNumInterfaces: 0x01
bConfigurationValue: 0x01
iConfiguration: 0x00
bmAttributes: 0xa0
bMaxPower: 0x0096
bLength: 0x09
bDescriptorType: 0x04
bInterfaceNumber: 0x00
bAlternateSetting: 0x00
bNumEndpoints: 0x02
bInterfaceClass: 0x03
bInterfaceSubClass: 0x00
bInterfaceProtocol: 0x00
iInterface: 0x00

---------- get interface descriptor ----------
bLength: 0x09
bDescriptorType: 0x04
bInterfaceNumber: 0x00
bAlternateSetting: 0x00
bNumEndpoints: 0x02
bInterfaceClass: 0x03
bInterfaceSubClass: 0x00
bInterfaceProtocol: 0x00
iInterface: 0x00

---------- get endpoint descriptor ----------
bLength: 0x07
bDescriptorType: 0x05
bEndpointAddress: 0x81
bmAttributes: 0x03
wMaxPacketSize: 0x40
bInterval: 0x01

---------- get endpoint descriptor ----------
bLength: 0x07
bDescriptorType: 0x05
bEndpointAddress: 0x01
bmAttributes: 0x03
wMaxPacketSize: 0x40
bInterval: 0x01
HID device connected.

---------- get string descriptor ----------
get manufacturing string
send a SETUP packet

---------- get string descriptor ----------
get manufacturing string

receive a data packet from the USB device
usb_pipe *pp = &udev->host.pipe[1]
pp->xfer_count = 0x29

---------- get string descriptor ----------
get manufacturing string

USB status OUT transaction

---------- get string descriptor ----------
get manufacturing string
Manufacturer: STMicroelectronics


[14:18:45.758]收←◆
---------- get string descriptor ----------
get product string
send a SETUP packet

---------- get string descriptor ----------
get product string

receive a data packet from the USB device
usb_pipe *pp = &udev->host.pipe[1]
pp->xfer_count = 0x26

---------- get string descriptor ----------
get product string

USB status OUT transaction

---------- get string descriptor ----------
get product string
Product: STM32F446 Bootloader


---------- get string descriptor ----------
get serial string
send a SETUP packet

---------- get string descriptor ----------
get serial string

receive a data packet from the USB device
usb_pipe *pp = &udev->host.pipe[1]
pp->xfer_count = 0x2a

---------- get string descriptor ----------
get serial string

USB status OUT transaction

---------- get string descriptor ----------
get serial string
Serial Number: 00000000001A

send a SETUP packet

USB status IN transaction
usb_pipe *pp = &udev->host.pipe[1]
pp->xfer_count = 0x1a
Enumeration completed.
天道酬勤
回复

使用道具 举报

53

主题

167

帖子

0

精华

高级会员

Rank: 4

积分
839
金钱
839
注册时间
2016-8-23
在线时间
116 小时
 楼主| 发表于 2023-5-8 10:04:10 | 显示全部楼层
紫气东升 发表于 2023-5-8 10:02
----- get only 1st 8 bytes device descriptor -----
send a SETUP packet

跟描述符有什么关系吗,如何检查,需要检查哪个参数。我不懂哦
天道酬勤
回复

使用道具 举报

70

主题

6697

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
12687
金钱
12687
注册时间
2012-11-26
在线时间
3710 小时
发表于 2023-5-8 10:22:30 | 显示全部楼层
HID一帧好像就是8个字节吧
学无止境
回复

使用道具 举报

53

主题

167

帖子

0

精华

高级会员

Rank: 4

积分
839
金钱
839
注册时间
2016-8-23
在线时间
116 小时
 楼主| 发表于 2023-5-8 15:13:22 | 显示全部楼层
jermy_z 发表于 2023-5-8 10:22
HID一帧好像就是8个字节吧

不是吧,一帧多少字节不是取决于从设备发过来的数据吗,不应该固定为8字节的
天道酬勤
回复

使用道具 举报

70

主题

6697

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
12687
金钱
12687
注册时间
2012-11-26
在线时间
3710 小时
发表于 2023-5-9 08:36:53 | 显示全部楼层
紫气东升 发表于 2023-5-8 15:13
不是吧,一帧多少字节不是取决于从设备发过来的数据吗,不应该固定为8字节的

        
学无止境
回复

使用道具 举报

53

主题

167

帖子

0

精华

高级会员

Rank: 4

积分
839
金钱
839
注册时间
2016-8-23
在线时间
116 小时
 楼主| 发表于 2023-5-12 14:59:50 | 显示全部楼层
今天我又用逻辑分析仪在触摸框的USB接口处读取数据。发现了个问题。逻辑分析仪读取的数据跟Bus Hound读取的数据不一样,逻辑分析读取的数据跟我的USB软件接收打印出来的数据一样。那么,我该相信逻辑分析呢,还是Bus Hound呢???触摸框供应商说Bus Hound读取的数据是对的,跟他们的定义的格式一样。但是逻辑分析仪接收的是实实在在的USB通信数据。这又如何解释
天道酬勤
回复

使用道具 举报

53

主题

167

帖子

0

精华

高级会员

Rank: 4

积分
839
金钱
839
注册时间
2016-8-23
在线时间
116 小时
 楼主| 发表于 2023-8-14 11:02:55 | 显示全部楼层
jermy_z 发表于 2023-5-8 10:22
HID一帧好像就是8个字节吧

大哥说的对,一帧是8字节
天道酬勤
回复

使用道具 举报

53

主题

167

帖子

0

精华

高级会员

Rank: 4

积分
839
金钱
839
注册时间
2016-8-23
在线时间
116 小时
 楼主| 发表于 2023-8-14 11:07:03 | 显示全部楼层
芯片供应商提供一个思路,可以修改#define HID_MIN_POLL         10U 这个宏的参数,这个宏变量是循环接收数据的间隔。可以适当改小这个参数值,让循环接收的频率快一点。这样就有可能全部接收到64个字节。
天道酬勤
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-23 07:00

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表