ch374T操作usb鼠标碰到的问题

我现在用的是ch374T的主机模式来操作USB鼠标,通过和arm9单片机spi接口和374进行通信来和鼠标通信。程序用的是贵司提供的ch374_hid.c

现在MCU和ch374之间可以进行正常的通信。上电之后,24MHz的晶体能够正常其振,spi读取ch374内部寄存器0~64的内容和datasheet中规定默认值想吻合。设备描述,配制等到hid描述符都可以正常枚举,但是没有到了获得鼠标数据 next_operate2: // 下面开始读取数据 ( 实际在读取数据的时候,要先发送中断端点的令牌来读取数据,接着才能获取到数据 ) tog1=0; //开始取DATA0 while(1) { s=Interrupt_Data_Trans(buf); if(s==USB_INT_SUCCESS) { for(i=0;i!=8;i++) printf("%02x ",(unsigned short)buf[i]); printf("\n"); } else if(s==USB_INT_DISCONNECT) // 这个是为了知道设备拔出产生的中断状态 { close_bit_flag=1; break; } } 时候就不能获得鼠标的数据.程序一直在上面的while(1)中循环,接收不到鼠标的任何数据,即使换了几个鼠标也是如此(鼠标有移动). //串口输出的信息如下: Wait Device In Reset Device Start Low-Speed Device GetDeviceDescr: 12 01 10 01 00 00 00 08 d9 15 37 0a 00 01 00 01 00 01 address_status=14 09 02 22 00 09 02 22 00 01 01 00 a0 32 09 04 00 00 01 03 01 02 00 09 21 10 01 00 01 22 34 00 07 05 81 03 04 00 0a hid_des_leng=34 endp_in_addr=08 endp_out_addr=00 config_status=14 SetUsbConfig_success Set_Idle Set_idle success Get_Hid_Des HID_Desc: 05 01 09 02 a1 01 09 01 a1 00 05 09 19 01 29 03 15 00 25 01 95 03 75 01 81 02 95 01 75 05 81 01 05 01 09 30 09 31 09 38 15 80 25 7f 75 08 95 03 81 06 c0 c0

后来我为了验证PID_IN令牌,endp_in_addr端点地址等是否发送成功,就在HostTransact374中加了两个语句: ..... s = Read374Byte( REG_INTER_FLAG ); // 获取中断状态 printf("sa=%02x \n",(T_U16)s);//自己添加的 ...... Write374Byte( REG_INTER_FLAG, BIT_IF_USB_PAUSE | BIT_IF_TRANSFER );//清中断标志 s = Read374Byte( REG_USB_STATUS ); // USB状态 r = s & BIT_STAT_DEV_RESP; // USB设备应答状态 printf("sb=%02x \n",(T_U16)s);//自己添加的

我主要在上述两处加了两个printf调试信息,其他的地方都没有改动.打印REG_INTER_FLAG和REG_USB_STATUS的寄存器的值.

//串口信息如下 HID_Desc: 05 01 09 02 a1 01 09 01 a1 00 05 09 19 01 29 03 15 00 25 01 95 03 75 01 81 02 95 01 75 05 81 01 05 01 09 30 09 31 09 38 15 80 25 7f 75 08 95 03 81 06 c0 c0 sa=f5 sb=80 sa=f5 sb=80 sa=f5 在枚举成功后HID_Desc,就无法收到鼠标的数据,REG_USB_STATUS=0x80,低四位为0.

后来出现了一个更奇怪的现象,我将鼠标拔出去,然后再插上,居然出现了下面的数据, sa=f5 sb=88 sa=f5 sb=93 d9 15 37 0a 05 01 09 02 sa=f5 sb=80 sa=f5 sb=9b a1 01 09 01 a1 00 05 09 sa=f5 sb=88 sa=f5 sb=93 19 01 29 03 15 00 25 01 sa=f5 sb=80 sa=f5 sb=9b 95 03 75 01 81 02 95 01 sa=f5 sb=88 sa=f5 sb=93 75 05 81 01 05 01 09 30 sa=f5 sb=80 sa=f5 sb=9b 09 31 09 38 15 80 25 7f sa=f5 sb=88 sa=f5 sb=93 75 08 95 03 81 06 c0 c0 sa=f5 sb=80 sa=f5 sb=9b 12 01 10 01 00 00 00 08 sa=f5 sb=88 sa=f5 sb=93 d9 15 37 0a 05 01 09 02 sa=f5 sb=80 sa=f5 sb=9b

仔细分析这些数据,他们是HID_Desc的内容,现在非常疑惑不知道哪里出了问题,请贵司的技术人员帮我分析一下,万分感激.

endp_in_addr=08这个变量不正确,正确分析到的数据的话那上面这个鼠标来说,数据应该是0X81


但是我是用你们提供的ch374_hid程序,除了改了spi接口问题,程序其他的地方都没有做改动.为什么会出现这种情况呢?谢谢!


请问一下hcn你是知道我的endp_in_addr一定为0X81,如何得出来的,难道GetConfigDescr那个函数有误吗?


07 05 81 03 04 00 0a 81就是端点号.


我的也和上面楼主说的差不多。我也什么也没有改,已经改了下接口。但我的是在设置USB设备配置时出现错误显示的是2A。查了好久不知道那里出了问题。。。请贵司的技术人员帮我分析一下,万分感激.


0 0 80 0 d1 40 c0 3 0 40 ea fe 0 90 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 52 4d 95 39 5b 42 8f 15 11 80 32 1a 83 d3 32 40 20 48 21 af 50 1 6b 2c 70 6e 2d 48 cd 3a 2 42 Start CH374 Host Wait USB device inset... Reset Device Start Full-Speed Device GetDeviceDescr: device_status=2e Wait Device Out Wait USB device inset... Reset Device Start Full-Speed Device GetDeviceDescr: device_status=14 12 1 0 2 0 0 0 8 CF 1B DA 8 11 26 0 2 0 1 address_status=14 9 2 3b 0 9 2 3B 0 2 1 0 A0 32 9 4 0 0 1 3 1 1 0 9 21 0 1 0 1 22 41 0 7 5 81 3 8 0 2 9 4 1 0 1 3 1 2 0 9 21 0 1 0 1 22 74 0 7 5 82 3 8 0 1 hid_des_leng=74 HID MOSE/KEY endp_in_addr=1 endp_out_addr=0 config_status=14 ERROR = 2A Wait Device Out

这是我读鼠标串口反回的信息!!查了好久不知道那里出了问题。。。请贵司的技术人员帮我分析一下,万分感激.


0 0 80 0 d1 40 c0 3 0 40 ea fe 0 90 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 52 4d 95 39 5b 42 8f 15 11 80 32 1a 83 d3 32 40 20 48 21 af 50 1 6b 2c 70 6e 2d 48 cd 3a 2 42 Start CH374 Host Wait USB device inset... Reset Device Start Full-Speed Device GetDeviceDescr: device_status=2e Wait Device Out Wait USB device inset... Reset Device Start Full-Speed Device GetDeviceDescr: device_status=14 12 1 0 2 0 0 0 8 CF 1B DA 8 11 26 0 2 0 1 address_status=14 9 2 3b 0 9 2 3B 0 2 1 0 A0 32 9 4 0 0 1 3 1 1 0 9 21 0 1 0 1 22 41 0 7 5 81 3 8 0 2 9 4 1 0 1 3 1 2 0 9 21 0 1 0 1 22 74 0 7 5 82 3 8 0 1 hid_des_leng=74 HID MOSE/KEY endp_in_addr=1 endp_out_addr=0 config_status=14 ERROR = 2A Wait Device Out

这是我读鼠标串口反回的信息!!查了好久不知道那里出了问题。。。请贵司的技术人员帮我分析一下,万分感激.


这个鼠标是一个复合设备,操作和普通的鼠标有点区别 ,参考下面的程序修改 UploadImages/20101258385968.rar


你这个鼠标是一个复合设备,你可以去看下你需要取数据的是哪个端点,也就是说你取数据的端点可能是端点0X81也可能是端点0X82.


谢谢_study_提供的程序,现在行了可以拿来给小车定位了,呵呵。。。。。。非常感谢贵司的技术人员。。。


请问楼上是怎么解决的,谢谢


HUB 0 device out Wait Device In Wait Device In HUB 0 device in Reset Device Start Low-Speed Device 0x12 0x01 0x10 0x01 0x00 0x00 0x00 0x08 0x8F 0x0E 0x22 0x00 0x10 0x02 0x01 0x02 0x00 0x01 GetConfigDescr: 0x09 0x02 0x3B 0x00 0x02 0x01 0x00 0xA0 0x32 0x09 0x04 0x00 0x00 0x01 0x03 0x01 0x01 0x00 0x09 0x21 0x10 0x01 0x00 0x01 0x22 0x3E 0x00 0x07 0x05 0x81 0x03 0x08 0x00 0x0A 0x09 0x04 0x01 0x00 0x01 0x03 0x00 0x00 0x01 0x09 0x21 0x10 0x01 0x00 0x01 0x22 0x47 0x00 0x07 0x05 0x82 0x03 0x03 0x00 0x0A USB-Print Ready Not HID Device , So Not Support Not HID Device , So Not Support


只有登录才能回复,可以选择微信账号登录