刚入手CH376模块,准备连接一个USB外设,设备描述符是 12 01 00 02 00 00 00 40 57 24 1E 10 配置描述符是09 02 2E 00 01 01 00 80 32 下面是一部分配置程序 求指教为什么回的数不对呢 if(CH376DiskConnect()==USB_INT_SUCCESS) { // xWriteCH376Cmd( CMD_AUTO_SETUP); // mDelaymS(200); //if(CH376DiskMount()==USB_INT_SUCCESS) { mDelaymS(1); mCtrlGetDescr( 1 ); /* 获取设备描述符 */ //mStopIfError( ); len = mReadCH376Data( buf ); /* 读取设备描述符数据 */ // printf( "Device descr data len: %d, data: ", len ); // for ( i = 0; i < len; i ++ ) printf( "%02X,", (unsigned int)DATA_BUFFER[i] ); // printf( "\n" ); mCtrlSetAddress( 5 ); /* 设置USB地址,地址值为1到7EH,因为没有用HUB并且只有一个USB设备,所以任意选 */ // mStopIfError( ); mCtrlGetDescr( 2 ); /* 获取配置描述符 */ // mStopIfError( ); len = mReadCH376Data( buf ); /* 读取配置描述符数据 */ // printf( "Config descr data len: %d, data: ", len ); // for ( i = 0; i < len; i ++ ) printf( "%02X,", (unsigned int)DATA_BUFFER[i] ); // printf( "\n" ); /* 在此插入判断USB目标设备的代码,类型是否正确,检查端点属性,包长度 */ // printf( "Set config value\n" ); i = buf[5]; /* 大多数USB设备只有一个配置,其配置值在配置描述符的第6个字节 */ mCtrlSetConfig( i ); /* 设置USB配置值 */ // mStopIfError( );
mBulkInEndp = 1; mBulkOutEndp = 1; mBulkOutLen = 64; /* 假定批量IN端点号是1,批量OUT端点号是2,最大数据包长度是64 */
for ( i = 0; i < mBulkOutLen; i ++ ) send_buf[i] = i; /* 模拟产生数据 */ mSetSendDataTog( 0 ); /* 设置发送的数据同步触发位 DATA0 */ mDelaymS(100); mWriteCH375Data( send_buf,mBulkOutLen ); mDelaymS(100); mIssueToken( mBulkOutEndp, DEF_USB_PID_OUT ); /* 发出一个OUT令牌,数据是DATA0 */ // mStopIfError( ); #if 0 mSetSendDataTog( 1 ); /* 设置发送的数据同步触发位 DATA1 */ mDelaymS(100); mWriteCH375Data( send_buf+mBulkOutLen, mBulkOutLen ); mDelaymS(100); mIssueToken( mBulkOutEndp, 0x01 ); /* 发出一个OUT令牌,数据是DATA1 */ #endif //// printf( "In data to bulk in endpoint\n" ); mSetRecvDataTog( 0 ); /* 设置接收的数据同步触发位 DATA0 */ mIssueToken( mBulkInEndp, 0x09 ); /* 发出一个IN令牌,希望接收数据DATA0 */