ch375+d11的问题

我的usb设备是用philips的 D11片子,它被设计为HID设备,并且已经与PC成功通讯,读设备和配置描述符都没问题。 我的usb主机用ch375片子,读u盘一切正常,当然读设备和配置描述符ye没问题。

但375的主机接上D11的设备时,375能发现设备的接入,也能正常复位设备,但枚举时不能读D11的设备和配置描述符,请问这是何因?375不能与d11通讯吗?

375和d11都是用的12m的晶振。

你检查一下是否USB HOST和USB SLAVE两端的是否供地充分,还有你用示波器检查一下D11端的晶振是否为标准12M,如果时钟误差太大通讯就会不成功.


host和device的电源都在5.05v左右,D11的VCC大概3.35v(中间有个3.3de稳压块,D11是3.3v版),两者的晶振都在 12M左右,误差还是比较小的,应该还是准的。源代码如下:

但函数device_enum中 status=get_descr(1);一句,status的值总是0x28或0x2c或0x24,但我设备换成u盘,这个函数都没有出错,可以准确读出设备配置描述符。 大家帮帮我!难道375只能读u盘?

main() { unsigned char i ,s; mInitSTDIO( );

printf("begin set usb host mode\n"); set_usb_mode( 6 ); /* 设置USB主机模式 */ while ( wait_interrupt()!=USB_INT_CONNECT ); /* 等待USB打印机连接上来 */ printf("usb connect!\n"); set_usb_mode( 7 ); /* 复位USB设备,CH375向USB信号线的D+和D-输出低电平 */ printf("reset usb device\n"); for ( i=0; i<250; i++ ) { delay2us(); delay2us(); delay2us(); delay2us(); } /* 复位时间不少于1mS,建议为10mS */ set_usb_mode( 6 ); /* 结束复位 */ while ( wait_interrupt()!=USB_INT_CONNECT ); /* 等待复位之后的设备端再次连接上来 */ delay100ms(); delay100ms(); /* 有些USB设备要等待数百毫秒才能正常工作 */ delay100ms(); delay100ms(); /* 有些USB设备要等待数百毫秒才能正常工作 */ printf("usb reconnect after reset\nbegin enum device\n"); if ( device_enum()!=USB_INT_SUCCESS ) { printf("enum error\n"); while(1); /* 错误 */ } 。。。。

device_enum实现如下: unsigned char device_enum() { /* 初始化USB打印机,完成打印机枚举 */

unsigned char status, len, c ; unsigned char i; printf("get_descr\n"); status=get_descr(1); /* 获取设备描述符 */ printf("get_descr status=0x%02xh \n ", (unsigned int)status ); if ( status==USB_INT_SUCCESS ) { len=rd_usb_data( buffer ); /* 将获取的描述符数据从CH375中读出到单片机的RAM缓冲区中,返回描述符长度 */ 。。。。 printf("get device descr(len=%d):",(int)len ); for(i= 0 ; i < len; i++){ printf("%02x ",(int)buffer[i]); } printf("\n");


应该是硬件的问题吧!


我用的ch375模块是贵公司的串行u盘读写模块,而d11的产品我们已经生产了2年,一直没问题啊!晶振我也测了都很好啊! 难道ch375的兼容性不好????

有谁用ch375控制过 d11 或 d12?


D12我们是控制过的,D11没有。应该没有问题。


tech or usbxf:你的意思是说我的软件流程是对的?


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