CH375B通過(guò)串口連接USB 鍵盤獲取設(shè)備描述符不成功,求助!

使通過(guò)串口方式連接至CH375B 芯片,串口速率為9600 ,8位數(shù)據(jù),2位停止,無(wú)校驗(yàn),無(wú)流控。

在電腦上通過(guò)串口助手,將命令字及數(shù)據(jù)依次發(fā)送至CH375B,

不能獲取插入鍵盤的設(shè)備描述,換成鼠標(biāo)也不可以,

但是插入手頭的U盤, 可以成功獲取到設(shè)備描述符!

請(qǐng)問(wèn)對(duì)于鍵盤鼠標(biāo)與U盤的差異在什么地方,應(yīng)該如何處理??

CH375串行數(shù)據(jù)格式不是 1個(gè)起始位、9個(gè)數(shù)據(jù)位、1個(gè)停止位嗎?搞不懂,樓主是怎么控制第九位對(duì)375進(jìn)行寫數(shù)據(jù)、寫命令的。本人剛開(kāi)始學(xué)CH375B,上面布置的任務(wù)是通過(guò)串口方式寫U盤,求指導(dǎo)


To:hubertboy 使用串口連接CH375,首先把測(cè)試命令測(cè)試通過(guò)。鍵盤和鼠標(biāo)的話一般是低速設(shè)備,區(qū)別于U盤,需要設(shè)置一線總線速度。 To:杜賓 第九位通過(guò)TB8寄存器來(lái)控制,首先初始化設(shè)置為9位,為1時(shí)是命令。為0時(shí)為數(shù)據(jù)。


To: ZBin 感謝您的回復(fù),您所說(shuō)的測(cè)試命令是指CHECK_EXIT嗎? 現(xiàn)在使用CHECK_EXIST 命令測(cè)試OK! 發(fā)送 0x06 0x55 , IC 返回0xAA !


你的測(cè)試命令是正確通過(guò)的,那注意一下速度設(shè)置,CH375操作鍵盤鼠標(biāo)你可以參考一下第8樓:http://m.findthetime.net/bbs/View.asp?S=101&I=19463


To: ZBin 感謝您的回復(fù),測(cè)試后,在來(lái)報(bào)告!

查看源碼中更改速度的代碼為: void set_freq(void) { CH375_WR_CMD_PORT(0x0b); /* 切換使375B進(jìn)入低速模式 */ CH375_WR_DAT_PORT(0x17); CH375_WR_DAT_PORT(0xd8); }

與手冊(cè)中 SET_USB_SPEED 0x04 不一致!請(qǐng)問(wèn)代碼是否正確?

測(cè)試發(fā)現(xiàn),使用GET_IC_VER 命令獲取版本,可以返回 0xB7, 使用 CHECK_EXIST 命令,可以接受到發(fā)送數(shù)據(jù)取反后的值。

調(diào)用 get_descr_ex()程序,此程序內(nèi) issue_token(( 0 << 4 ) | DEF_USB_PID_IN);status=wait_interrupt(); 返回狀態(tài)為0x2E, 請(qǐng)問(wèn)是什么錯(cuò)誤,該如何處理?


等待回復(fù)!


設(shè)置速度的話可以使用第5樓的函數(shù),也可以用SET_USB_SPEED 0x04這條命令。 獲取描述符get_descr_ex()中斷返回0x2E說(shuō)明主機(jī)發(fā)送命令設(shè)備沒(méi)有響應(yīng),有可能是你命令發(fā)送有問(wèn)題,最好使用USB分析儀監(jiān)控一下數(shù)據(jù)。


現(xiàn)在手頭沒(méi)有USB分析的設(shè)備,無(wú)法監(jiān)控到數(shù)據(jù)!


檢查代碼發(fā)現(xiàn)兩個(gè)問(wèn)題, 1,我現(xiàn)在使用的是STM32 ,數(shù)據(jù)存儲(chǔ)與51 有一個(gè)大小端的差異,導(dǎo)致數(shù)據(jù)發(fā)送順序錯(cuò)誤! 2,數(shù)據(jù)類型,在C51 中 int 是16為的, 在STM32 中int 是32 位的,導(dǎo)致共用體 union _REQUEST //請(qǐng)求包結(jié)構(gòu) { struct { unsigned char bmRequestType; unsigned char bRequest; unsigned int wValue; unsigned int wIndex; unsigned int wLength; }Req; unsigned char Req_buf[8]; }Request;

與實(shí)際想要的數(shù)據(jù)有出入! 要更改為: union _REQUEST //???ó°ü?á11 { struct { unsigned char bmRequestType; unsigned char bRequest; unsigned short int wValue; unsigned short int wIndex; unsigned short int wLength; }Req; unsigned char Req_buf[8]; }Request;


現(xiàn)測(cè)試結(jié)果如下:

1,可以成功返回設(shè)備描述符,以及配置符,并可成功設(shè)置配置! 2,調(diào)用 set_idle() ,返失敗。。 3,獲取report 成功, 4,調(diào)用set_report(),返回1, 調(diào)用成功, 5,調(diào)用 get_int_in() 后,沒(méi)有中斷發(fā)生。

請(qǐng)問(wèn) 1, 調(diào)用 set_idle() 失敗后,是否可以繼續(xù)操作? 2,調(diào)用 get_int_in() 后,沒(méi)有中斷發(fā)生。 可能的原因是什么?


程序也沒(méi)有做更改, 現(xiàn)在set_idle 調(diào)用后返回成功!

2,調(diào)用 get_int_in() 后,沒(méi)有中斷發(fā)生。

增加重試次數(shù)后,發(fā)生中斷!

另外,請(qǐng)問(wèn)當(dāng)一個(gè)設(shè)備有兩個(gè)輸出斷點(diǎn) 81 ,82 的時(shí)候,如何選擇充那個(gè)端點(diǎn)獲取數(shù)據(jù)??


get_int_in() 函數(shù)是在發(fā)送IN令牌包取數(shù)據(jù),操作鼠標(biāo)鍵盤需要每隔幾ms發(fā)送一次,這樣操作鼠標(biāo)鍵盤才能獲取到數(shù)據(jù)。 一般鼠標(biāo)鍵盤只有一個(gè)端點(diǎn)(81)來(lái)傳輸數(shù)據(jù),如果有兩個(gè)端點(diǎn),有可能一個(gè)端點(diǎn)沒(méi)用到,也有可能一個(gè)端點(diǎn)傳輸控制信息,一個(gè)端點(diǎn)傳輸數(shù)據(jù)。具體你插到電腦上監(jiān)控一下USB數(shù)據(jù)。


能否采用兩個(gè)端點(diǎn)輪流發(fā)送IN 令牌的方式來(lái)獲取兩個(gè)端點(diǎn)的數(shù)據(jù)?

另外,現(xiàn)在手頭有塊USB的紅外觸摸屏,插上后,act led 不停的閃爍,頻率大約2秒,

請(qǐng)問(wèn)是什么原因呢?


可以,我們CH375的ACT引腳是USB設(shè)備連接狀態(tài)輸出引腳,低電平有效。閃爍的話你的設(shè)備是不是一直在斷開(kāi)連接。


使用 獲取狀態(tài)命令 0x22 ,返回 0x15 0x16 ,交替返回!

可能是什么原因列?

懷疑是電源不夠,增加了一個(gè)470uF 的電容在USB 座上,測(cè)量實(shí)際平均電流也就100mA,

增加電容后,結(jié)果還是一樣!


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

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