哦,hcn 我現(xiàn)已確定我的掃描槍屬HID設(shè)備。 至于后面的問題還是需要您給解答一下。即 請問您之前所說的“將375的D+和D-連接相對調(diào),也就是將375的D+和掃描槍的D-相連接,將375的D-和掃描槍的D+相連接”這個(gè)到底根據(jù)什么來調(diào)整呢?是根據(jù)低速?還是根據(jù)HID?
這個(gè)是根據(jù)主機(jī)對低速設(shè)備的檢測來決定的,你可以參考下USB協(xié)議里面 有關(guān)于怎么樣檢測是全速設(shè)備還是低速設(shè)備
請問hcn: 從抓取的設(shè)備描述符來看,Speed為Full,應(yīng)該指的就是全速,那是不是意味著UD+和UD-兩線不用交叉呢?
再問hcn: 對于PC機(jī)來講,為什么低速和全速,甚至高速USB接口設(shè)備在識別過程中卻不存在這個(gè)數(shù)據(jù)線交叉的問題呢?是否是master和slave模式的差異造成的呢?
這部分你可以去參考USB協(xié)議,里面有詳細(xì)的介紹
哦,好 謝謝hcn!
請問hcn: set_idle( ); set_report(); intt0(); 這3個(gè)子函數(shù)分別是干什么用的? get_descriptor_x(); 這個(gè)是獲取HID描述符吧?
前面的2個(gè)是根據(jù)HID協(xié)議來做的,后面一個(gè)函數(shù)是鍵盤向單片機(jī)發(fā)送數(shù)據(jù)的過程,實(shí)際流程應(yīng)該是單片機(jī)先發(fā)送取數(shù)據(jù)的令牌,看下有沒有數(shù)據(jù)上傳,如果有的話就就讀取數(shù)據(jù)。 get_descriptor_x()就是獲取HID描述符
hcn: 我覺得你給的USB鍵盤程序應(yīng)該可以用于我的USB掃描槍,只是需要修改接收數(shù)據(jù)部分。但現(xiàn)在我接上掃描槍后,連設(shè)備識別都成問題,就是說掃描槍并不能工作。 我抓了掃描槍的設(shè)備描述符,它的包長度是8個(gè)字節(jié),全速,跟鍵盤應(yīng)該很相似的。 但現(xiàn)在這種情況下,我應(yīng)該怎么做呢?
hcn: 我覺得你給的USB鍵盤程序應(yīng)該可以用于我的USB掃描槍,只是需要修改接收數(shù)據(jù)部分。但現(xiàn)在我接上掃描槍后,連設(shè)備識別都成問題,就是說掃描槍并不能工作。 我抓了掃描槍的設(shè)備描述符,它的包長度是8個(gè)字節(jié),全速,跟鍵盤應(yīng)該很相似的。 但現(xiàn)在這種情況下,我應(yīng)該怎么做呢?
你可以將描述符發(fā)到我們技術(shù)信箱,我?guī)湍憧聪率堑退僭O(shè)備還是全速設(shè)備?
DEVICE BUS SPEED :FULL
不是看這個(gè)的,我要看的是描述符,只有描述符才能確定是全速設(shè)備還是低速設(shè)備
hcn: 我把設(shè)備描述符抓圖發(fā)到你郵箱了,請你幫忙分析一下。謝謝! bMaxPacketSize0和wMaxPacketSize的大小都是8個(gè)字節(jié)嘛,即一次中斷傳輸?shù)臄?shù)據(jù)最多是8個(gè)字節(jié)啊。但是我發(fā)現(xiàn)了一個(gè)問題: l=rd_usb_data(buffer); 通過觀察變量發(fā)現(xiàn),獲取設(shè)備描述符操作時(shí),l竟為18;獲取配置描述符操作時(shí),l竟為34。而根據(jù)數(shù)據(jù)包的長度,l應(yīng)不超過8才對呀。
你如果直接用我們的命令而不是用外置固件來讀取描述符的話,那么這個(gè)函數(shù)返回的就是你描述符的長度,設(shè)備描述符長度為18,配置描述符長度為34