求助:CH375主機模式下與掃碼槍通信

CH375能夠正常獲取USB鍵盤的設(shè)備描述符,配置描述符,正常config和set idle。接上USB掃碼槍之后只能運行到375進(jìn)入低速模式,后面的程序不運行了。然后拔掉掃碼槍之后,又開始運行,

get device descr failed

get config descr failed

get device descr again failed

get report descr failed

set report failed

是在拔掉掃碼器之后開始運行的,請問這是什么原因呢。

1.png2.png3.png

請先執(zhí)行“GET_DEV_RATE”獲取設(shè)備速度,根據(jù)設(shè)備速度情況進(jìn)行匹配。


? ? ? ? ? ? ? ? ? ? ? ? ? ?

請先執(zhí)行“GET_DEV_RATE”獲取設(shè)備速度,根據(jù)設(shè)備速度情況進(jìn)行匹配。


謝謝你。再請教一下,

CH375_WR_CMD_PORT( CMD_GET_DEV_RATE );要如何使用獲取的速度呢,是有幾位數(shù)據(jù)的?


"該命令需要輸入 1 個數(shù)據(jù) 07H,輸出為數(shù)據(jù)速率類型,其位 4 為 1 則是 1.5Mbps 低速 USB 設(shè)備,否則是 12Mbps 全速 USB 設(shè)備。該命令僅在 USB 模式 5(已啟用的 USB 主機方式,不產(chǎn)生 SOF 包)狀態(tài)下有效。",詳細(xì)查看CH375DS2手冊。


還是沒怎么搞懂,有沒有獲取設(shè)備速度再使用的例程,能不能提供一下,謝謝了。


unsigned char get_descr( unsigned char type )?

{ ?/* 從設(shè)備端獲取描述符 */

status=0xff;

CH375_WR_CMD_PORT( CMD_GET_DESCR );

printf( "get_descr WR_CMD SUCCESS\n" ); //20161015

CH375_WR_DAT_PORT( type ); ?/* 描述符類型, 只支持1(設(shè)備)或者2(配置) */

printf( "get_descr WR_DAT SUCCESS\n" ); //20161015

status=wait_interrupt(); ?/* 等待CH375操作完成 */

printf( "CH375操作完成\n" ); //20161015

if ( status==USB_INT_SUCCESS ) { ?/* 操作成功 */

unsigned char i, len;

len=rd_usb_data( data_buf );

printf( "%s描述符是:", type==1?"設(shè)備":"配置" );

for ( i=0; i!=len; i++ ) printf( "%02x ", (unsigned int)data_buf[i] );

printf( "\n" );

}

return( status );

}


后來加入一些打印符做標(biāo)記,發(fā)現(xiàn)是運行到status=wait_interrupt()就沒有運行下去了;

應(yīng)該是停在這一步while( CH375_INT_WIRE ); ?/* 查詢等待CH375操作完成中斷(INT#低電平) */


unsigned char Get_freq(void)
{??
?CH375_WR_CMD_PORT(0x0a);??? /* 查詢當(dāng)前設(shè)備速度 */
?CH375_WR_DAT_PORT(0x07);
?return (CH375_RD_DAT_PORT());
}
void Set_freq(void)
{?
?CH375_WR_CMD_PORT(0x04);??? /* 切換使375B進(jìn)入低速模式 */
?CH375_WR_DAT_PORT(0x02);
}

?s = Get_freq();?
??set_usb_mode( 7 );????/* 總線復(fù)位 */
??mDelayms(30);
??set_usb_mode( 6 );
??mDelayms(30);
??if( s&0x10 )?Set_freq();??/* 切換使375B進(jìn)入低速模式 */

PS:在執(zhí)行 CMD_SET_USB_MODE 命令設(shè)置 USB 工作模式后也會自動恢復(fù)到 12Mbps 全速方式


非常感謝 ?jie ??。。〈_實是速度不同,后來把設(shè)備的速度打印出來,使用的鍵盤是11,掃碼槍是2121.png雖然不知道11和21分別代表了什么速度,但確實是傳輸速度不同的問題導(dǎo)致沒能正常讀取數(shù)值。


21.png

程序能讀到鼠標(biāo)的鍵值和鼠標(biāo)移動的數(shù)值,但是鍵盤(和掃碼槍)的值讀不到。鍵盤(和掃碼槍)的那些配置之類的都可以配置成功,就是按下按鍵的時候串口沒有值輸出。用的是HP(惠普)的鍵盤。


不同設(shè)備類的的類命令不同,還有需要注意端點號。


我這邊使用的代碼是官網(wǎng)提供的/* 用CH375操作HID設(shè)備,比如鍵盤,鼠標(biāo)*/,應(yīng)該是可以直接

操作鍵盤鼠標(biāo)了吧?我也不是很懂,剛接觸USB。關(guān)于設(shè)備類命令和端點號,剛剛百度了一下,

大概明白是什么,但是不懂的如何操作,還請大蝦賜教,指導(dǎo)一下,謝謝你了。


鼠標(biāo)的鍵值和鍵盤的鍵值除了位數(shù)不同,操作方式有什么不同?發(fā)現(xiàn)鍵盤上有三個按鍵,音量+,音量-和靜音按下去是有鍵值出來的,和鼠標(biāo)一樣都是4位的,但是其他按鍵都沒有值,應(yīng)該就是八位的了。為什么8位的就讀不出來呢?求指導(dǎo)?。。。。。?!


issue_token的參數(shù)包含了端點號和命令類型,IN到數(shù)據(jù)后,執(zhí)行CMD_RD_USB_DATA的數(shù)據(jù)流必須全部讀出。如果想了解傳輸,建議通過BUS HOUND在電腦上查看。


試過把這段代碼

len_temp1=rd_usb_data(data_buf);

for(i=0;i!=len_temp1;i++)data_in[i]=data_buf[i];

加進(jìn)get_int_in();函數(shù)里面,但是效果還是一樣。

第一張圖是鍵盤電腦上用BUS HOUND抓的數(shù)據(jù),第二張是鼠標(biāo)


鍵盤2.png





鼠標(biāo)2.png



這是鍵鼠的數(shù)據(jù)?方便把代碼發(fā)給我看吧 gj@wch.cn


? ? ? ? ? ? ? ? ? ? ? ? ? ?

這是鍵鼠的數(shù)據(jù)?方便把代碼發(fā)給我看吧 gj@wch.cn

? ? ? ? ? ? ? ? ? ? ? ?

已發(fā)送,請查收。感謝你,百忙之中抽空解答。


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

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