CH375如何设置设备端点?[求助]

void get_int_in() { endp6_mode=0x80; toggle_recv(); // endp_int=6; issue_token(( endp_int << 4 ) | DEF_USB_PID_IN);//status=wait_interrupt(); }

CH375如何设置设备端点?[Emot]1[/Emot]

PS:使用get_int_in()后不产生中断,修改endp_int 为 0 后可以产生中断.

配置描述符如下: 09 02 3b 00 02 01 00 a0 32 09 04 00 00 01 03 01 01 00 09 21 10 01 00 01 22 36 00 07 05 81 03 08 00 0a 09 04 01 00 01 03 00 00 00 09 21 10 01 00 01 22 34 00 07 05 82 03 03 00 0a

void parse_config_descr() { unsigned char i; num_interfaces=data_buf[4]; //保存接口数 config_value=data_buf[5]; //保存配置值 for(i=0;i!=data_buf[2];i++) { if((data_buf[i]==0x09)&&(data_buf[i+1]==0x04))//接口描述符 { } if((data_buf[i]==0x09)&&(data_buf[i+1]==0x21))//HID描述符 { report_descr_len=data_buf[i+7];} //REPORT描述符长度 if((data_buf[i]==0x07)&&(data_buf[i+1]==0x05))//端点描述符 { endp_int=data_buf[i+2]&0x0f;} //中断端点号 } }

执行parse_config_descr()后,report_descr_len和endp_int 的值是什么?

PS:设备为USB键盘

endp_int 修改这个值即可,但是这个值必须是设备的IN端点,否则无效


endp_int这个值哪里来的?


端点的值 都在设备的配置描述符当中。


配置描述符如下: 09 02 3b 00 02 01 00 a0 32 09 04 00 00 01 03 01 01 00 09 21 10 01 00 01 22 36 00 07 05 81 03 08 00 0a 09 04 01 00 01 03 00 00 00 09 21 10 01 00 01 22 34 00 07 05 82 03 03 00 0a

void parse_config_descr() { unsigned char i; num_interfaces=data_buf[4]; //保存接口数 config_value=data_buf[5]; //保存配置值 for(i=0;i!=data_buf[2];i++) { if((data_buf[i]==0x09)&&(data_buf[i+1]==0x04))//接口描述符 { } if((data_buf[i]==0x09)&&(data_buf[i+1]==0x21))//HID描述符 { report_descr_len=data_buf[i+7];} //REPORT描述符长度 if((data_buf[i]==0x07)&&(data_buf[i+1]==0x05))//端点描述符 { endp_int=data_buf[i+2]&0x0f;} //中断端点号 } }

执行parse_config_descr()后,report_descr_len和endp_int 的值是什么?


你的这个设备是一个HID类复合设备,你的程序可能不兼容该设备,可以发邮件到我们的技术支持信箱,给你发一个支持该设备的程序。tech@wch.cn


忘记说了,设备就是USB键盘来的


07 05 81 03 08 00 0a 07 05 82 03 03 00 0a 这两个就是端点描述符,端点分别为0X81,0X82。最高位为1表示IN端点,端点好为0X01,0X02


执行parse_config_descr()后,report_descr_len和endp_int 的值是什么?


这个长度是不确定的,report_descr_len是报表描述符长度。你可以不用关心这个数据。如果你要知道这个具体含义,需要查看HID规范。 endp_int的值7楼已经回答。


执行parse_config_descr() 后endp_int不是只存一个值吗?

在7楼的有2个值。会存哪一个呢


应该保存两个端点的地址,并且对不同的端点地址发IN事务取数据。


按照上面的程序执行后,好象只存一个数据?


对端点1可以获取键值,

端点2则不可以,没有响应,无中断


对端点2获取数据的前提是 前面的配置以及初始化操作都已经成功。


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