[求助]键盘识别最后一步,问题出在哪了?

我键盘识别还差最后一步,最后关头出了问题。 初始化过程中的getdescr(),get_report(),set_report(),set_idle()都可以正确执行。 但是我按下键盘时,无法产生中断。 键盘灯亮了一会儿之后就灭了,然后才进入中断,反回值是0x16表示键盘已经断开。 我的中断程序如下所示,大家看一下是不是有问题,导致键盘中断没有执行。 还有,就是在前面的初始化执行完之后,第一次是可以进入键盘中断的, 但是len_temp=rd_usb_data(data_buf);这句执行后len_temp=0;表示没有键盘数据。 我怀疑这句话的端点设置错了,CH375_WR_DAT_PORT(1); /* 如果设备端不是CH37X芯片,那么需要修改端点号 */ 我不清楚键盘的端点号是多少?

/*中断读取键盘数据*msp430*/ if(P1IFG&0X01) { unsigned char len_temp,i; CH375_WR_CMD_PORT( CMD_GET_STATUS ); /* 产生操作完成中断, 获取中断状态 */ status=CH375_RD_DAT_PORT(); if(status!=USB_INT_SUCCESS) { CH375_WR_CMD_PORT( CMD_CLR_STALL ); CH375_WR_DAT_PORT(1); /* 如果设备端不是CH37X芯片,那么需要修改端点号 */ endp6_mode=0x80; endp7_mode=0x80; toggle_recv(); issue_token(( endp_int << 4 ) | DEF_USB_PID_IN);//发送从中断端点读数据的令牌 } else { len_temp=rd_usb_data(data_buf); //键盘中断端点数据长度一般为8字节,鼠标为4字节 for(i=0;i!=len_temp;i++) data_in[i]=data_buf[i]; flag_output=1; toggle_recv(); issue_token(( endp_int << 4 ) | DEF_USB_PID_IN);//发送从中断端点读数据的令牌 }

你看下你的配置描述符,或者把你的键盘描述符帖出来看下,从配置描述符就可以知道端点号。


USB主机和设备是通过端点来通讯的.建立通讯管道. 测试一下,是一直没有收到数据还是收到部分数据后出现了你说的情况?


我用BUS HOUND 得到了两种配置描述符: 1、DI 09 02 3b 00 02 01 00 a0 31 09 04 00 00 01 03 01 01 00 09 21 10 01 00 01 22 36 00 07 05 81 03 08 2、DO 09 02 22 00 01 01 00 a0 31 09 04 00 00 01 03 01 01 00 09 21 10 01 00 01 22 36 00 07 05 81 03 08

我单片机上得到的是上面的第一种描述符


你的描述符不全,丢掉数据了,你把BUS-HOUND的缓冲区开大点就可以抓取数据了,通过你这个来看的换端点应该是0X81才是,但是还是建议你把抓全的数据看下才能确定。


好像是一直没有收到数据。


把完整的描述符获取到帖出来,这样便于分析.你的程序是操作单个接口的设备,但是从1的配置描述符来看这是个复合设备.


是这个吧

Bus Hound 5.00 capture. Complements of www.perisoft.net

Device - Device ID (followed by the endpoint for USB devices) (30) PCI Express ECP Parallel Port (LPT1) (31) Printer Port Logical Interface (32) USB Mass Storage Device (33) MOAI USB Flash Drive [ROM=1.00] (34) MOAI USB Flash Drive [ROM=1.00] (35) USB 人体学输入设备 (36) HID-compliant mouse (37) USB Composite Device (38) USB 人体学输入设备 (39) USB 人体学输入设备 (40) HID Keyboard Device (41) 符合 HID 标准的用户控制设备 (42) HID-compliant device Phase - Phase Type CTL USB control transfer DI Data in DO Data out Data - Hex dump of the data transferred Descr - Description of the phase Cmd... - Position in the captured data

Device Phase Data Description Cmd.Phase.Ofs(rep) ------ ----- ------------------------------------------------------------------------------------------------------ ---------------- ------------------ 37.0 CTL 80 06 00 01 00 00 12 00 GET DESCRIPTOR 1.1.0 37.0 DI 12 01 10 01 00 00 00 08 4f 1c 02 00 10 01 01 02 00 01 ........O....... 1.2.0 37.0 CTL 80 06 00 02 00 00 09 00 GET DESCRIPTOR 2.1.0 37.0 DI 09 02 3b 00 02 01 00 a0 31 ..;.....1 2.2.0 37.0 CTL 80 06 00 02 00 00 3b 00 GET DESCRIPTOR 3.1.0 37.0 DI 09 02 3b 00 02 01 00 a0 31 09 04 00 00 01 03 01 01 00 09 21 10 01 00 01 22 36 00 07 05 81 03 08 ..;.....1....... 3.2.0 00 0a 09 04 01 00 01 03 00 00 00 09 21 10 01 00 01 22 32 00 07 05 82 03 03 00 0a ............!... 3.2.32 37.0 CTL 00 09 01 00 00 00 00 00 SET CONFIG 4.1.0 37.0 CTL 80 06 00 03 00 00 ff 00 GET DESCRIPTOR 5.1.0 37.0 DI 04 03 09 04 .... 5.2.0 37.0 CTL 80 06 02 03 09 04 ff 00 GET DESCRIPTOR 6.1.0 37.0 DI 1a 03 55 00 53 00 42 00 20 00 4b 00 65 00 79 00 6b 00 6f 00 61 00 72 00 64 00 ..U.S.B. .K.e.y. 6.2.0 37.0 CTL 80 06 00 03 00 00 ff 00 GET DESCRIPTOR 7.1.0 37.0 DI 04 03 09 04 .... 7.2.0 37.0 CTL 80 06 02 03 09 04 ff 00 GET DESCRIPTOR 8.1.0 37.0 DI 1a 03 55 00 53 00 42 00 20 00 4b 00 65 00 79 00 6b 00 6f 00 61 00 72 00 64 00 ..U.S.B. .K.e.y. 8.2.0 37.0 CTL 80 06 00 03 00 00 ff 00 GET DESCRIPTOR 9.1.0 37.0 DI 04 03 09 04 .... 9.2.0 37.0 CTL 80 06 02 03 09 04 ff 00 GET DESCRIPTOR 10.1.0 37.0 DI 1a 03 55 00 53 00 42 00 20 00 4b 00 65 00 79 00 6b 00 6f 00 61 00 72 00 64 00 ..U.S.B. .K.e.y. 10.2.0 37.0 CTL 80 06 00 03 00 00 ff 00 GET DESCRIPTOR 11.1.0 37.0 DI 04 03 09 04 .... 11.2.0 37.0 CTL 80 06 02 03 09 04 ff 00 GET DESCRIPTOR 12.1.0 37.0 DI 1a 03 55 00 53 00 42 00 20 00 4b 00 65 00 79 00 6b 00 6f 00 61 00 72 00 64 00 ..U.S.B. .K.e.y. 12.2.0 38.0 CTL 80 06 00 01 00 00 12 00 GET DESCRIPTOR 13.1.0 38.0 DO 12 01 10 01 00 00 00 08 4f 1c 02 00 10 01 01 02 00 01 ........O....... 13.2.0 38.0 CTL 80 06 00 02 00 00 09 00 GET DESCRIPTOR 14.1.0 38.0 DO 09 02 22 00 01 01 00 a0 31 ..".....1 14.2.0 38.0 CTL 80 06 00 02 00 00 22 00 GET DESCRIPTOR 15.1.0 38.0 DO 09 02 22 00 01 01 00 a0 31 09 04 00 00 01 03 01 01 00 09 21 10 01 00 01 22 36 00 07 05 81 03 08 ..".....1....... 15.2.0 00 0a .. 15.2.32 38.0 CTL 00 09 01 00 00 00 00 00 SET CONFIG 16.1.0 38.0 CTL 21 0a 00 00 00 00 00 00 SET IDLE 17.1.0 38.0 CTL 81 06 00 22 00 00 76 00 GET DESCRIPTOR 18.1.0 38.0 DI 05 01 09 06 a1 01 05 08 19 01 29 03 15 00 25 01 75 01 95 03 91 02 95 05 91 01 05 07 19 e0 29 e7 ..........)...%. 18.2.0 95 08 81 02 75 08 95 01 81 01 19 00 29 91 26 ff 00 95 06 81 00 c0 ....u.......).&. 18.2.32 39.0 CTL 80 06 00 01 00 00 12 00 GET DESCRIPTOR 19.1.0 39.0 DO 12 01 10 01 00 00 00 08 4f 1c 02 00 10 01 01 02 00 01 ........O....... 19.2.0 39.0 CTL 80 06 00 02 00 00 09 00 GET DESCRIPTOR 20.1.0 39.0 DO 09 02 22 00 01 01 00 a0 31 ..".....1 20.2.0 39.0 CTL 80 06 00 02 00 00 22 00 GET DESCRIPTOR 21.1.0 39.0 DO 09 02 22 00 01 01 00 a0 31 09 04 01 00 01 03 00 00 00 09 21 10 01 00 01 22 32 00 07 05 82 03 03 ..".....1....... 21.2.0 00 0a


你的键盘是一个复合设备,你的程序操作不起来。 发邮件到技术支持信箱 tech@wch.cn 给你发一份操作复合设备的例程。


示例程序已经给你发过去了,请注意查收你的邮件!


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