CH375B獲取配置描述符:USB_INT_BUF_OVER,請指點

本人采用MCU控制CH375B芯片來實現(xiàn)對USB設備的控制,MCU和CH375B之間采用的是串口通訊。當連接了USB打印機(該打印機采用的是PL2305作為接口芯片),程序調用打印機初始化函數(shù)對其進行初始化時,總是在獲取配置描述符處出錯,返回的狀態(tài)是:0x17,即USB_INT_BUF_OVER。打印機的初始化程序是參考沁恒提供的ch375prt.c,ch375inc.h寫的。看手冊上說,這種情況需要用戶自己使用Issue_Token命令自行處理,是需要這樣嗎?看到一個帖子里說是要用外部固件編程方式,不知是否如此?能夠提供一下解決思路和相應的Demo程序,非常感謝 :(

返回USB_INT_BUF_OVER(0x17)是因為你的打印機的配置描述符的長度超過64字節(jié)了,解決這個問題需要你通過ISSUE_TOKEN或者ISSUE_TKN_X命令自行處理控制傳輸。

你可以發(fā)一封郵件到我的郵箱zb@wch.cn,我把外置固件操作例子發(fā)給你。


啊,好的,多謝了。我這就聯(lián)系你的郵箱~


郵件已發(fā)


嗯,已收到查看中。移植后,在get_descr_ex()函數(shù)中的?status=issue_token(( 0 << 4 ) | DEF_USB_PID_IN),返回的status是0x2B,也就是?錯誤:對于OUT/SETUP事務返回DATA1,這個能幫忙看下大概是什么問題嗎?


注意setup階段數(shù)據(jù)是否發(fā)送成功(兩字節(jié)數(shù)據(jù)存在大小端問題),其次IN包接受的同步標志應該是DATA1,是否正確。


我是在Keil C51中進行開發(fā)的,Big_endian模式,Demo程序會是Little_endian的嗎?ARM類芯片的?


demo是基于51單片機的,大端模式。從你的返回值0x2B:USB_INT_RET_TOGX(0x0010X011B)錯誤:對于IN事務返回數(shù)據(jù)不同步。


你好,我在程序中做了如此修改:

tog_recv=0;//

? ?while(descr_len>0){

? ? ? ? ? ? CH375B_Toggle_Recv(tog_recv);//

p+=0x08;

status=CH375B_Issue_Token(( 0 << 4 ) | DEF_USB_PID_IN);

if(status==USB_INT_SUCCESS)/* DATA階段操作成功 */{

? ? ? ? ? ? ? ?tog_recv=~tog_recv;//

descr_len-=CH375B_Read_USB_Data(p);}

else {

? ? ? ? ? ? ? ? return(0);}}

后面有雙斜杠的是修改的,使用tog_recv變量交替控制DATA0和DATA1接收數(shù)據(jù),就能夠成功獲取描述符了。


對Demo程序深入分析后,感覺有些地方越看越不明白了。比如:

if ( p_cfg_descr->itf_descr.bInterfaceClass!=0x8 || p_cfg_descr->itf_descr.bInterfaceSubClass!=0x6 ) {

? ? ? ? ? ? return( UNKNOWN_USB_PRINT ); ?/* 不是USB打印機或者不符合USB規(guī)范 */

}

而在這之前,包括子函數(shù)內(nèi),并未調用rd_usb_data函數(shù)將數(shù)據(jù)從ch375讀出到buffer中,而這又直接用作判斷,在跟蹤調試時,程序就總是在這兒return了。程序應該時嚴格按照Demo程序中的各個函數(shù)進行實現(xiàn)的??磥磉€要再研究下USB通訊協(xié)議。。。



給你的程序只是提供給你控制傳輸?shù)膸讉€函數(shù),其他地方有改動,比如DATA0、DATA1肯定要切換的,原來打印機的判斷應該是if(p_cfg_descr->itf_descr.bInterfaceClass!=0x07||p_cfg_descr->itf_descr.bInterfaceSubClass!=0x01 )另外,buffer定義的話#define?? ?p_cfg_descr?? ((PUSB_CFG_DESCR_LONG)buffer)



呃,看來要改動改動的地方還很多。。。算是順帶熟悉USB的協(xié)議了吧.;)


你好,我現(xiàn)在采用外部固件方式控制CH375B,能夠順利地對連接的USB設備進行枚舉,并讀取保存了端點的地址,端點數(shù)據(jù)包大小等信息。枚舉流程也基本按照Demo中寫的。但在枚舉了之后,對連接的USB打印機進行塊數(shù)據(jù)傳輸時,總是失敗:第一次返回的是0x20,后面都是返回0x28,不知這是什么原因,能否提供一些參考意見呢?謝謝~


參考電腦對該打印機的枚舉過程,枚舉階段是否還要執(zhí)行其他命令,例如設置接口等。傳輸數(shù)據(jù)也一樣,給指定端點發(fā)數(shù)據(jù)才有效。


通過觀察,我發(fā)現(xiàn)USB設備描述符的bcdUSB域為0100,意味著是USB1.0協(xié)議的,但是我通過函數(shù)設置了USB總線速度:

CH375B_WriteCmd(0x04);

CH375B_WriteData(0x02);使CH375B工作在1.5Mbps低速模式,但此設置之后,就根本無法和USB設備進行通信了。所以問下,之前發(fā)送數(shù)據(jù)出現(xiàn)返回值是:0x20可能和總線速度不匹配有關嗎?這樣進行USB總線速度設置是否正確?



USB1.0也不能說明是低速設備。打印機一般默認都是全速的,所以不需要把CH375設置成低速模式,你這樣設置你前面初始化都通過不了。你的問題與速度無關。


只有登錄才能回復,可以選擇微信賬號登錄

国产91精品新入口,国产成人综合网在线播放,九热这里只有精品,本道在线观看,美女视频a美女视频,韩国美女激情视频,日本美女pvp视频