ch376控制从设备可以使用CH375HST文件夹的程序吗? 376有相关子程序吗??
CH375HST文件夹里的程序分别是两个单片机系统通过USB交换数据和控制USB打印机等设备的例子。关于CH376操作从设备的例子你可以参考CH375的例子,也从下面网址下载相关例子:http://www.wch.cn/bbs/View.asp?S=101&I=19463
我再问下。。如果我操作一个其他类的HID设备的话,端口号是要设置的?还是从描述信息中读出还是直接默认用0端口号?
其他类的USB设备与操作HID类相似,控制端点(端点0)进行设备的初始化,设备描述符、配置描述符、设置配置值等。
恩恩。。再问下,那不同的HID设备,我想发数据和收数据,他们之间需要单独配置的是哪里呢?哪里是共同配置呢?
数据的收发只需要根据配置描述符获取到端点号,再从对应端点获取数据。
超级谢谢呀。。您说的思路很清晰呢。。我再研究下。。
我仿照用375HST中代码的用CH376读取另一个CH376配置描述号进行控制从设备试验 nsigned char get_descr( unsigned char type ) { /* 从设备端获取描述符 */ unsigned char status; CH375_WR_CMD_PORT( CMD_GET_DESCR ); CH375_WR_DAT_PORT( type ); /* 描述符类型, 只支持1(设备)或者2(配置) */ status=wait_interrupt(); /* 等待CH375操作完成 */ if ( status==USB_INT_SUCCESS ) { /* 操作成功 */ unsigned char buffer[64]; unsigned char i, len; len=rd_usb_data( buffer ); 第一次读出来的是14 2E 09 02 2E 00 01 01 00 80 24 09 04 00 00 04 FF 80 37 00 07 再读第二次的话直接读buffer希望读出端口号但是是00.。。
然后376HOST例程中 receive_mode ^= 0x80; if(flag_config_2) //第二次获取设备的配置描述符 descr_len=data_buf[2]-RD_USB_DATA(data_buf); else descr_len=data_buf[0]-RD_USB_DATA(data_buf); while(descr_len>0) { p+=0x08; issue_token(receive_mode,( 0 << 4 ) | DEF_USB_PID_IN);status=wait_interrupt();
这里flag_config_2是怎么判断的,前面都没有赋值只是设了bit位。。这几句代码美看懂怎么2次读取呢
我们获取设备描述符的流程是先获取9个字节的配置描述符(一开始不知道配置描述的长度),第二次根据获取到的第三字节data_buf[2]来获取到完整的配置描述符。flag_config_2在第一次获取完配置描述符置1,因为两次获取配置描述的长度判断不同: if(flag_config_2) descr_len=data_buf[2]-RD_USB_DATA(data_buf); else descr_len=data_buf[0]-RD_USB_DATA(data_buf);
不好意思呀,又麻烦您了。。。 /* 从设备端获取描述符 */ unsigned char get_descr( unsigned char type ) { xWriteCH376Cmd( CMD_GET_DESCR ); xWriteCH376Data( type ); /* 描述符类型, 只支持1(设备)或者2(配置) */ status=Wait376Interrupt(); /* 等待CH375操作完成 */ if ( status==USB_INT_SUCCESS ) { /* 操作成功 */ unsigned char i, len; unsigned char buffer[64]; senddata(0x77); len=RD_USB_DATA( buffer ); senddata(len); for ( i=0; i!=len; i++ ) senddata( buffer[i] ); //for ( i=19; i!=26; i++ ) senddata( buffer[i] ); }
return( status ); }
然后我进行设备跟配置读写 get_descr(1); set_addr(10); get_descr(2); /* 获取USB设备的配置描述符 */
但是对配置读写终端成功,但返回buffer有0个值。。这是哪里有问题了呢。。
如果我不读设备符的话,配置符号可以正常读取了。。。 想问下 UINT8 RD_USB_DATA( UINT8 *buf ) {
unsigned char len, i; unsigned char *p; xWriteCH376Cmd( CMD01_RD_USB_DATA ); /* 从CH375的端点缓冲区读取数据块 */
CMD01_RD_USB_DATA这条命令一个是375LNK例程的,我现在调试376,是这里原因吗?
CH375(28H)与CH376(27H)的读命令码是不一样的,需要跟你使用的芯片对应起来。