[求助]CH376主機(jī)模式無法獲取HID設(shè)備描述符

我想用CH376S讀取手柄鍵值,但是不能獲取手柄的HID設(shè)備描述符。 準(zhǔn)確的說是SETUP事務(wù)都執(zhí)行失敗了

事務(wù)執(zhí)行函數(shù)如下: void issue376(UCHAR tog,UCHAR pid) { wr_cmd376(CMD_ISSUE_TKN_X); wr_dat376(tog); wr_dat376(pid); _nop_(); }

獲取設(shè)備描述符函數(shù)如下: UCHAR get_dev_descr() { UCHAR length; UCHAR *p = data_buf; mode = 0x00; wr_buf376(8,SetupGetDevDescr); _nop_(); issue376(mode,DEF_USB_PID_SETUP); _nop_(); status = INT_QUERY376(); _nop_(); if(status!=USB_INT_SUCCESS) return(ERR_SETUP_F); else mode = 0x80; …… }

手冊(cè)上說事務(wù)執(zhí)行完畢后CH376會(huì)產(chǎn)生中斷,返回0x14,但是我查看上面函數(shù)的返回值,就是ERR_SETUP_F (這個(gè)是我自己定義的值) 我用的是89C52,晶振12M,376的晶振也是12M,CMD_CHECK_EXIST命令的返回值是正常的

調(diào)了半天也不對(duì),不知道怎么回事啊,請(qǐng)求大家?guī)兔纯?,謝謝!

對(duì)了,因?yàn)槲也惶莻€(gè)376總線地址是怎么來的,加上我又是用的自己做的板子,所以說讀寫函數(shù)就是通常的時(shí)序控制的,像這樣 UCHAR rd376() { UCHAR temp; DIR_IN376(); A0 = 0; RD = 0; _nop_(); temp = DATA_IN376(); RD = 1; return(temp); }

寫指令 void wr_cmd376(UCHAR cmd) { DATA_OUT376(cmd); A0 = 1; WR = 0; _nop_(); WR = 1; A0 = 0; }

寫數(shù)據(jù) void wr_dat376(UCHAR dat) { DATA_OUT376(dat); A0 = 0; WR = 0; _nop_(); WR = 1; }

從緩沖區(qū)讀 UCHAR rd_buf376(UCHAR *buf) { UCHAR i,length; wr_cmd376(CMD_RD_USB_DATA0); DELAY_US(5); length = rd376(); _nop_(); for(i=0;i!=length;i++) *buf++ = rd376(); return(length); }

向端點(diǎn)緩沖區(qū)寫 void wr_buf376(UCHAR length,UCHAR *buf) { wr_cmd376(CMD_WR_HOST_DATA); DELAY_US(5); wr_dat376(length); DELAY_US(5); while(length--) wr_dat376(*buf++); }

不知道這幾個(gè)有沒有問題,懇請(qǐng)指教


首先檢查一下你的硬件,主要是模擬并口和中斷的配置。至于獲取描述符的流程參CH376操作鼠標(biāo)鍵盤程序:http://www.findthetime.net/bbs/View.asp?S=101&I=19463 另外我們程序是支持模擬并口方式通訊的,具體時(shí)序參考\CH376EVT\EXAM\PARA_SW.C


謝謝

硬件方面,376的數(shù)據(jù)并口與51的P1直接連接,片選PCS口在初始化之后就一直拉低,中斷雖然連了51的外中斷,但是現(xiàn)在的程序只有操作376的,所以我沒有使用中斷,而是循環(huán)讀376并口的值

獲取描述符的函數(shù)我是照著你們給的例程寫的,但是SETUP事務(wù)那兒就會(huì)出錯(cuò),按照手冊(cè),事務(wù)執(zhí)行成功的話376會(huì)產(chǎn)生一個(gè)中斷,如果用CMD_GET_STATUS命令應(yīng)該能返回0x14并且取消中斷請(qǐng)求,但是在事務(wù)執(zhí)行之后我查詢中斷,并沒有返回0x14

并口通訊的代碼我也是按著PARA_SW寫的,只不過沒有將片選拉高,而是使用延時(shí)


中斷那塊如果你連接了單片機(jī)中斷會(huì)直接查詢中斷引腳,沒連接才會(huì)循環(huán)讀并口值。另外你復(fù)位之后做一下測試命令看看有沒有通過?還有監(jiān)測一下status = INT_QUERY376();中status 的返回值。


376的中斷和51的外中斷連著的 但是我把51的中斷屏蔽了,在主函數(shù)里面進(jìn)行初始化后就循環(huán)讓主芯片和376通過并口進(jìn)行通信,因?yàn)槭窍胝{(diào)試,所以就是循環(huán)獲取HID的幾個(gè)描述符 復(fù)位之后進(jìn)行CMD_CHECK_EXIST的返回值是對(duì)的 在用CMD_ISSUE_TKN_X執(zhí)行SETUP事務(wù)之后返回的中斷狀態(tài)是0xd1,我不明白這個(gè)是什么意思,不應(yīng)該返回0x14么?

非常感謝!


你如果接的是HID低速設(shè)備的話需要在初始化完成之后將速度降為低速才能進(jìn)行SETUP包的傳輸。


我使用CMD_SET_USB_SPEED命令設(shè)置的速度,設(shè)置的是0x02 1.5M低速模式 不過就是這么設(shè)置還是不正常


那問下獲取設(shè)備描述符正確嗎?獲取配置描述符正確嗎?只是獲取HID類描述符有問題?


就是在獲取設(shè)備描述符階段的SETUP事務(wù)包執(zhí)行有問題,返回的中斷狀態(tài)代碼是0xd1


沒有這個(gè)中斷狀態(tài),建議你檢查下你的硬件連線是否有問題,最好做下測試命令。還有就是CH376晶振用的是否為12M?


晶振是12M的 我使用的51單片機(jī),連線方式是 PCS----------P2.1 RSTI---------P2.5 A0-----------P3.2 INT----------P3.3 WR-----------P3.6 RD-----------P3.7 D0~D7--------P1.0~P1.7 TXD下拉 RXD懸空 SD_CS連VSS SD_CK SD_DO SD_DI均懸空

命令的話 CMD_CHECK_EXIST可以通過 CMD_SET_USB_MODE可以通過


那很簡單,直接發(fā)送獲取設(shè)備描述符的命令: CMD = GET_DESCR(0x46); DATA = 0x01; //獲取設(shè)備描述符 等待中斷,這個(gè)時(shí)候的中斷狀態(tài)是什么?


我使用CMD_GET_DESCR命令了 然后使能了中斷 執(zhí)行命令后等待中斷 這個(gè)時(shí)候發(fā)的中斷狀態(tài)不是0xd1了 但是是0xac 似乎也沒有這個(gè)狀態(tài)吧……


按照你的這個(gè)情況,重點(diǎn)檢查這幾個(gè)地方: 1,中斷引腳定義是否正確? 2,仔細(xì)檢查測試命令,測試命令做2次,一次發(fā)送0X55數(shù)據(jù),讀取數(shù)據(jù)應(yīng)該是0XAA,再發(fā)送0XAA數(shù)據(jù),看下讀取數(shù)據(jù)是否為0X55。 按照你反饋的現(xiàn)象估計(jì)還是硬件上面有問題。


376的INT# 與P3.3 就是INT1 相連 我剛剛又試了下不用中斷 在main里面循環(huán)執(zhí)行命令 然后返回0xd1 我加了段代碼等中斷狀態(tài)不是0xd1之后再讀 是0xac 再等到0xac之后 是0xa4 硬件方面……我參考了開發(fā)板的連接方式的 板子用電表測過沒有虛焊

測試命令按你說的做了 沒有問題 發(fā)送0x55和0xaa后返回0xaa和0x55


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

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