CH376T接USB打印機,讀取配置描述符出錯

用STM32控制CH376T做USB打印的程序

參考CH375PRT.C中例子

unsigned char init_print()函數(shù)中

if ( p_cfg_descr->itf_descr.bInterfaceClass!=7 || p_cfg_descr->itf_descr.bInterfaceSubClass!=1 ) return( UNKNOWN_USB_PRINT );? /* 不是USB打印機或者不符合USB規(guī)范 */

?

這句中p_cfg_descr->itf_descr.bInterfaceClass和p_cfg_descr->itf_descr.bInterfaceSubClass的值始終不對

?

查看了一下

p_cfg_descr->itf_descr.bInterfaceClass=1
p_cfg_descr->itf_descr.bInterfaceSubClass=2

?

接著查看了一下讀出的配置描述符的數(shù)據(jù),即buffer中的數(shù)據(jù)

buffer[00]=09
buffer[01]=02
buffer[02]=20
buffer[03]=00
buffer[04]=01
buffer[05]=01
buffer[06]=00
buffer[07]=C0
buffer[08]=00
buffer[09]=09
buffer[10]=04
buffer[11]=00
buffer[12]=00
buffer[13]=02
buffer[14]=07
buffer[15]=01
buffer[16]=02
buffer[17]=00
buffer[18]=07
buffer[19]=05
buffer[20]=81
buffer[21]=02
buffer[22]=40
buffer[23]=00
buffer[24]=00
buffer[25]=07
buffer[26]=05
buffer[27]=02
buffer[28]=02
buffer[29]=40
buffer[30]=00
buffer[31]=00

?

好像指針p_cfg_descr指向錯位了


熱門產(chǎn)品 : USB3.0 HUB控制器:CH634

用STM32控制CH376T做USB打印的程序

參考CH375PRT.C中例子

unsigned char init_print()函數(shù)中

if ( p_cfg_descr->itf_descr.bInterfaceClass!=7 || p_cfg_descr->itf_descr.bInterfaceSubClass!=1 ) return( UNKNOWN_USB_PRINT );? /* 不是USB打印機或者不符合USB規(guī)范 */

?

這句中p_cfg_descr->itf_descr.bInterfaceClass和p_cfg_descr->itf_descr.bInterfaceSubClass的值始終不對

?

查看了一下

p_cfg_descr->itf_descr.bInterfaceClass=1
p_cfg_descr->itf_descr.bInterfaceSubClass=2

?

接著查看了一下讀出的配置描述符的數(shù)據(jù),即buffer中的數(shù)據(jù)

buffer[00]=09
buffer[01]=02
buffer[02]=20
buffer[03]=00
buffer[04]=01
buffer[05]=01
buffer[06]=00
buffer[07]=C0
buffer[08]=00
buffer[09]=09
buffer[10]=04
buffer[11]=00
buffer[12]=00
buffer[13]=02
buffer[14]=07
buffer[15]=01
buffer[16]=02
buffer[17]=00
buffer[18]=07
buffer[19]=05
buffer[20]=81
buffer[21]=02
buffer[22]=40
buffer[23]=00
buffer[24]=00
buffer[25]=07
buffer[26]=05
buffer[27]=02
buffer[28]=02
buffer[29]=40
buffer[30]=00
buffer[31]=00

?

好像指針p_cfg_descr指向錯位了


你檢查下程序給這兩個變量賦值的時候是不是偏移多加了1,導致賦值的時候就錯了,因為剛剛好偏移多一個字節(jié)就是1和2.


程序是CH375PRT.C中的,沒修改過

?


自己調(diào)試了幾次

可能跟CPU的內(nèi)存分配有關

這里用了stm32的cpu,32位的

因此用sizeof(USB_CFG_DESCR)計算了一下,

sizeof(USB_CFG_DESCR) = 10


在查詢打印機端口狀態(tài)函數(shù)

unsigned char get_port_status( )中

?

if ( issue_token( ( 0 << 4 ) | DEF_USB_PID_IN )==USB_INT_SUCCESS ) {? /* DATA階段操作成功 */

這句函數(shù)issue_token( ( 0 << 4 ) | DEF_USB_PID_IN )返回值始終不等于USB_INT_SUCCESS

返回值為USB_INT_RET_STALL(0x2E)

/* USB_INT_RET_STALL?0x001X1110B */??/* 錯誤:返回STALL */

?

這是為什么?


返回狀態(tài)說明命令不識別,應該是你還有命令沒有發(fā)送,打印機沒有正確枚舉,你在電腦端用USB抓包工具看看是不是哪個階段的命令還沒有完成。


打印機枚舉已經(jīng)完成,unsigned char init_print()函數(shù)返回USB_INT_SUCCESS


工具獲得的數(shù)據(jù)

x.png


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

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