剛?cè)胧諧H376模塊,準(zhǔn)備連接一個USB外設(shè),設(shè)備描述符是 12 01 00 02 00 00 00 40 57 24 1E 10 配置描述符是09 02 2E 00 01 01 00 80 32 下面是一部分配置程序 求指教為什么回的數(shù)不對呢 if(CH376DiskConnect()==USB_INT_SUCCESS) { // xWriteCH376Cmd( CMD_AUTO_SETUP); // mDelaymS(200); //if(CH376DiskMount()==USB_INT_SUCCESS) { mDelaymS(1); mCtrlGetDescr( 1 ); /* 獲取設(shè)備描述符 */ //mStopIfError( ); len = mReadCH376Data( buf ); /* 讀取設(shè)備描述符數(shù)據(jù) */ // 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 ); /* 設(shè)置USB地址,地址值為1到7EH,因為沒有用HUB并且只有一個USB設(shè)備,所以任意選 */ // mStopIfError( ); mCtrlGetDescr( 2 ); /* 獲取配置描述符 */ // mStopIfError( ); len = mReadCH376Data( buf ); /* 讀取配置描述符數(shù)據(jù) */ // printf( "Config descr data len: %d, data: ", len ); // for ( i = 0; i < len; i ++ ) printf( "%02X,", (unsigned int)DATA_BUFFER[i] ); // printf( "\n" ); /* 在此插入判斷USB目標(biāo)設(shè)備的代碼,類型是否正確,檢查端點屬性,包長度 */ // printf( "Set config value\n" ); i = buf[5]; /* 大多數(shù)USB設(shè)備只有一個配置,其配置值在配置描述符的第6個字節(jié) */ mCtrlSetConfig( i ); /* 設(shè)置USB配置值 */ // mStopIfError( );
mBulkInEndp = 1; mBulkOutEndp = 1; mBulkOutLen = 64; /* 假定批量IN端點號是1,批量OUT端點號是2,最大數(shù)據(jù)包長度是64 */
for ( i = 0; i < mBulkOutLen; i ++ ) send_buf[i] = i; /* 模擬產(chǎn)生數(shù)據(jù) */ mSetSendDataTog( 0 ); /* 設(shè)置發(fā)送的數(shù)據(jù)同步觸發(fā)位 DATA0 */ mDelaymS(100); mWriteCH375Data( send_buf,mBulkOutLen ); mDelaymS(100); mIssueToken( mBulkOutEndp, DEF_USB_PID_OUT ); /* 發(fā)出一個OUT令牌,數(shù)據(jù)是DATA0 */ // mStopIfError( ); #if 0 mSetSendDataTog( 1 ); /* 設(shè)置發(fā)送的數(shù)據(jù)同步觸發(fā)位 DATA1 */ mDelaymS(100); mWriteCH375Data( send_buf+mBulkOutLen, mBulkOutLen ); mDelaymS(100); mIssueToken( mBulkOutEndp, 0x01 ); /* 發(fā)出一個OUT令牌,數(shù)據(jù)是DATA1 */ #endif //// printf( "In data to bulk in endpoint\n" ); mSetRecvDataTog( 0 ); /* 設(shè)置接收的數(shù)據(jù)同步觸發(fā)位 DATA0 */ mIssueToken( mBulkInEndp, 0x09 ); /* 發(fā)出一個IN令牌,希望接收數(shù)據(jù)DATA0 */