求助:单片机+CH376读写游戏手柄![求助]

各位工程师:大家好! 硬件是你们的CH376评估板!应该没什么问题吧 软件我用了你们的代码,修改了下读写 结果CMD11_CHECK_EXIST ; 没有问题 能正常通信,用固件方式读取设备和配置描述符也没有问题参考(CH375的代码),但是外部固件方式就读不出来(CH376的代码),而且读取HID报告描述符(get_report_descr_ex)一直读不出来了,不论采用和中方式 求解? 3q

这技术支持了?


CH376的代码是我们提供的还是你自己写的? 你的游戏手柄是全速的还是低速的?如果是低速是否切换了速度? 设备描述符是否获取到?如果没获取到返回的错误代码是多少?


你们提供的代码。 按照你们的代码来弄的 如果用CH375的代码 //=================================================================================== /************************************************************************************ **º¯Êý¹¦ÄÜ£º´ÓÉ豸¶Ë»ñÈ¡ÃèÊö·û **Èë¿Ú²ÎÊý£º1---É豸ÃèÊö·û 2---ÅäÖÃÃèÊö·û **·µ »Ø£º1---³É¹¦ 0---ʧ°Ü **±¸ ×¢£ºÎÞ ************************************************************************************/ unsigned char get_descr(unsigned char type) { status=0xff; 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 len; len=rd_usb_data(data_buf); //for(i=0; i!=len; i++)usartTransmit(data_buf[i]); return TRUE; } else { return FALSE; } }这个能获取到设备描述符 而Ch376的 //***************************************************** //* NAME: Get_Dev_Descr( ) //* FUCTION: »ñÈ¡É豸ÃèÊö·û //* ÊäÈë²ÎÊý: ÎÞ //* Êä³ö²ÎÊý£º³É¹¦·µ»Ø1£¬·ñÔò·µ»Ø0 //* ˵Ã÷£º ¸Ã³ÌÐò²ÉÓÃÍâÖù̼þģʽ»ñÈ¡É豸ÃèÊö·û //******************************************************

UINT8 Get_Dev_Descr( ) { UINT8 descr_len; UINT8 *p=data_buf; send_mode=0x00; WR_USB_DATA(8,SetupGetDevDescr);

issue_token(send_mode,( 0 << 4 ) | DEF_USB_PID_SETUP);status=wait_interrupt(); if(status==USB_INT_SUCCESS) //SETUP½×¶Î²Ù×÷³É¹¦ { receive_mode=0x80; } else return(0);

issue_token(receive_mode,( 0 << 4 ) | DEF_USB_PID_IN);status=wait_interrupt(); if(status==USB_INT_SUCCESS) //DATA½×¶Î²Ù×÷³É¹¦ { descr_len=data_buf[0]-RD_USB_DATA(data_buf); while(descr_len>0) { receive_mode ^= 0x80; p+=0x08; issue_token(receive_mode,( 0 << 4 ) | DEF_USB_PID_IN);status=wait_interrupt(); if(status==USB_INT_SUCCESS) //DATA½×¶Î²Ù×÷³É¹¦ descr_len-=RD_USB_DATA(p); else return(0); } } else return(0);

send_mode=0x40; WR_USB_DATA(0,SetupGetDevDescr); issue_token(send_mode,( 0 << 4 ) | DEF_USB_PID_OUT);status=wait_interrupt(); if(status==USB_INT_SUCCESS) //״̬½×¶Î²Ù×÷³É¹¦ return(1); else return(0); } 这代码获取不到描述符 我想请问下 CH375的代码是否CH376都能用?3Q


CH375的代码基本能用在CH376上,但是有一个命令码是不一样的,写主机缓冲区是不一样的, CH375定义如下: #define CMD_WR_USB_DATA7 0x2B /* 向USB端点2或者主机端点的发送缓冲区写入数据块 */ CH376定义如下: #define CMD10_WR_HOST_DATA 0x2C /* 向USB主机端点的发送缓冲区写入数据块 */


谢谢红桃六哈 按照你这个修改了 能读取所有的描述符了 但是最后那个函数UINT8 get_int_in(UINT8 tog,UINT8 endp_int) 读取的数据和Bus Hound捕获的数据不一样 一直输出是8个0x75 而按照Bus Hound捕获的应该是7f系列的八个数据201181620592228.bmp


结贴 是我自己的问题 不好意思 3q


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