我用的ch374作主機,操作之前用ch372作的設(shè)備能正常傳送數(shù)據(jù), 現(xiàn)在想要控制usb轉(zhuǎn)并口線(是PL2305芯片的)寫并口數(shù)據(jù)時返回0x20,發(fā)現(xiàn)是在函數(shù)HostTransact374()中出錯的!寫數(shù)據(jù)前都正常,包括get port status也能正常返回并口的PE SEL Err等信號,下面是程序出錯的地方: else if ( s & BIT_IF_TRANSFER ) { // 傳輸完成 Write374Byte( REG_INTER_FLAG, BIT_IF_USB_PAUSE | BIT_IF_TRANSFER );// 清中斷標志 s = Read374Byte( REG_USB_STATUS ); // USB狀態(tài) r = s & BIT_STAT_DEV_RESP; // USB設(shè)備應(yīng)答狀態(tài) switch ( pid ) { case DEF_USB_PID_SETUP: case DEF_USB_PID_OUT: if ( r == DEF_USB_PID_ACK ) return( USB_INT_SUCCESS ); else if ( r == DEF_USB_PID_STALL || r == DEF_USB_PID_NAK ) return( r | 0x20 ); else if ( ! M_IS_HOST_TIMEOUT( s ) ) return( r | 0x20 ); // 不是超時/出錯,意外應(yīng)答 [Emot]25[/Emot]【發(fā)現(xiàn)執(zhí)行到此處,s=0x80,】[Emot]25[/Emot] break; case DEF_USB_PID_IN:
那你有沒有按照計算機一樣在初始化PL2305的時候拿我們的CH374來對其初始化,一般情況下這種芯片都有自己的廠商請求的,需要你按照計算機的初始化步驟來進行初始化.
Device Phase Data Description ------ ----- -------------------------------------------------------------- 9.1 DI 04 . 9.0 CTL a3 00 00 00 02 00 04 00 GET STATUS 9.0 DI 01 01 01 00 .... 9.0 CTL 23 01 10 00 02 00 00 00 CLEAR FEATURE 9.0 CTL a3 00 00 00 01 00 04 00 GET STATUS 9.0 DI 00 01 00 00 .... 9.0 CTL a3 00 00 00 02 00 04 00 GET STATUS 9.0 DI 01 01 00 00 .... 9.0 CTL 23 03 04 00 02 00 00 00 SET FEATURE 9.1 DI 04 . 9.0 CTL a3 00 00 00 02 00 04 00 GET STATUS 9.0 DI 03 01 10 00 .... 9.0 CTL 23 01 14 00 02 00 00 00 CLEAR FEATURE 9.0 CTL a3 00 00 00 02 00 04 00 GET STATUS 9.0 DI 03 01 00 00 .... 9.0 CTL 80 06 00 01 00 00 40 00 GET DESCRIPTOR 9.0 DI 12 01 00 01 00 00 00 08 ........ 9.0 CTL a3 00 00 00 02 00 04 00 GET STATUS 9.0 DI 03 01 00 00 .... 9.0 CTL 23 03 04 00 02 00 00 00 SET FEATURE 9.1 DI 04 . 9.0 CTL a3 00 00 00 02 00 04 00 GET STATUS 9.0 DI 03 01 10 00 .... 9.0 CTL 23 01 14 00 02 00 00 00 CLEAR FEATURE 9.0 CTL 00 05 02 00 00 00 00 00 SET ADDRESS 9.0 CTL 80 06 00 01 00 00 12 00 GET DESCRIPTOR 9.0 DI 12 01 00 01 00 00 00 08 7b 06 05 23 02 02 01 02 00 01 9.0 CTL 80 06 00 02 00 00 09 00 GET DESCRIPTOR 9.0 DI 09 02 4e 00 01 01 00 a0 32 ..N.....2 17.0 CTL 80 06 00 01 00 00 12 00 GET DESCRIPTOR 17.0 DI 12 01 00 01 00 00 00 08 7b 06 05 23 02 02 01 02 00 01 17.0 CTL 80 06 00 02 00 00 09 01 GET DESCRIPTOR 17.0 DI 09 02 4e 00 01 01 00 a0 32 09 04 00 00 01 07 01 01 00 07 05 01 02 40 00 00 09 04 00 01 02 07 01 02 00 07 05 01 02 40 00 00 07 05 82 02 40 00 00 09 04 00 02 03 ff 00 ff 00 07 05 01 02 40 00 00 07 05 82 02 40 00 00 07 05 83 03 04 00 01 17.0 CTL 00 09 01 00 00 00 00 00 SET CONFIG 17.0 CTL a1 00 00 00 00 00 f1 03 GET DEVICE ID //上面是設(shè)備接入的枚舉,此時PC就可以打印了, //我用374在SET CONFIG后get port status也能正常返回并口的PE SEL Err信號,之后發(fā)送打印數(shù)據(jù) //就出現(xiàn)了之前說的問題了,感覺示例程序的枚舉沒有問題啊,怎么發(fā)送數(shù)據(jù)不行呢,同樣的程序發(fā)給 //我做的372設(shè)備沒有問題。 //下面是設(shè)備拔下。 9.1 DI 04 . 9.0 CTL a3 00 00 00 02 00 04 00 GET STATUS 9.0 DI 00 01 03 00 .... 9.0 CTL 23 01 11 00 02 00 00 00 CLEAR FEATURE 9.1 DI 04 . 9.0 CTL a3 00 00 00 02 00 04 00 GET STATUS 9.0 DI 00 01 01 00 .... 9.0 CTL 23 01 10 00 02 00 00 00 CLEAR FEATURE 9.0 CTL a3 00 00 00 01 00 04 00 GET STATUS 9.0 DI 00 01 00 00 .... 9.0 CTL a3 00 00 00 02 00 04 00 GET STATUS 9.0 DI 00 01 00 00 .... 9.0 CTL a3 00 00 00 01 00 04 00 GET STATUS 9.0 DI 00 01 00 00 .... 9.0 CTL a3 00 00 00 02 00 04 00 GET STATUS 9.0 DI 00 01 00 00 .... //謝謝您的回復(fù),希望能快找到問題所在。
建議您去按照PC的流程去枚舉,我們示例程序只做了標準的枚舉,由于設(shè)備的不同自己加入廠商命令和類命令.如果上面的流程正確的話你檢查DATA0,DATA1的標志是否正確.
請問“按照PC的流程去枚舉”發(fā)送命令是什么順序呢?SET ADDRESS->GET DESCRIPTOR->GET DESCRIPTOR-> SET CONFIG,行嗎?我這樣枚舉也不行啊。 另外 “檢查DATA0,DATA1的標志” 我在樓底寫過了 【發(fā)現(xiàn)執(zhí)行到此處,s=0x80,】不知道是不是說“XX00=設(shè)備應(yīng)答錯誤或者超時無應(yīng)答;”呢?
補充一下,枚舉時沒有錯誤,在我寫打印數(shù)據(jù)時才出錯的, 我寫的是EP1,64字節(jié)!