RM新时代网站-首页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

HID+CDC復(fù)合設(shè)備在WIN10的識別問題

STM32單片機(jī) ? 來源:未知 ? 作者:胡薇 ? 2018-05-30 17:49 ? 次閱讀

1 問題現(xiàn)象

有客戶使用STM32F405并參照ST官方USB標(biāo)準(zhǔn)庫下的HID+CDC的示例代碼做產(chǎn)品,發(fā)現(xiàn)在WIN7上使用得好好的,可放到WIN10上,CDC第一次能夠識別,再次拔插后就不能再識別,且此后無論插拔多少次都無法再識別,除非再次上電,又會重復(fù)上述現(xiàn)象,只有板子上電后第一次才能正確被識別,后續(xù)均不行。

2 問題分析

客戶使用 ST官方示例代碼STM32_USB-Host-Device_Lib_V2.2.0\Project\USB_Device_Examples\Composite_Examples\CDC_HID_Composite當(dāng)我嘗試使用此示例代碼重現(xiàn)客戶所遇到的問題時,發(fā)現(xiàn)此代碼在WIN7運(yùn)行OK,但與客戶不同的是,我測試到的情況是在WIN10下CDC一次都無法識別,HID卻一直可以識別。

下面來分析下問題,既然WIN7下HID和CDC都能正常識別,放在WIN10上才不正常,那么初步可以判斷,此問題可能與WIN10操作系統(tǒng)的USB主機(jī)驅(qū)動實(shí)現(xiàn)有關(guān)。

通過USB分析儀分析客戶代碼在WIN10下USB枚舉異常的數(shù)據(jù)通訊:

Figure 1 第一次USB枚舉過程

上圖是客戶代碼第一次正常枚舉的通訊數(shù)據(jù),從圖中可以看出,WIN10 USB主機(jī)在正常獲取HID報告描述符后,緊接著會獲取虛擬串口狀態(tài)和設(shè)置波特率,這樣就正常枚舉結(jié)束了。我們再來看看采集到的異常USB枚舉過程:

Figure 2 異常枚舉過程

上圖是WIN10下異常枚舉過程。從圖中可以看出,WIN10系統(tǒng)上USB主機(jī)在獲取到設(shè)備描述符和配置描述符后直接將設(shè)備掛起了。很明顯,WIN10系統(tǒng)的USB主機(jī)驅(qū)動實(shí)現(xiàn)對設(shè)備描述符或者配置描述符的內(nèi)容并不認(rèn)可,才會導(dǎo)致無法識別HID+CDC復(fù)合設(shè)備。

我們不妨檢查下客戶代碼中的設(shè)備描述符:

Figure 3 獲取的設(shè)備描述符

復(fù)合設(shè)備的class,subclass,protocol

必須為0xef,0x02,0x01,這里

VID=0x0483,PID=0x3256(Cube庫下為0x5740,但這個不重要),接下來看配置描述符:

Figure 4 win10不能識別的配置描述符

由此可見,客戶的描述符是HID interface + IAD + CDC interfaces結(jié)構(gòu)。對于WIN7,這種結(jié)構(gòu)可以識別,但對于WIN10,這種結(jié)構(gòu)WIN10未必能夠兼容,我們嘗試在HID interface外部加上一層IAD結(jié)構(gòu),使其成為IAD1 + HID interface + IAD2 + CDC interfaces結(jié)構(gòu),此時客戶的問題得以解決,在WIN10也可以正確識別了,修改后的描述符結(jié)構(gòu)如下:

Figure 5 win10能夠正確識別的配置描述符

結(jié)束本篇實(shí)戰(zhàn)經(jīng)驗(yàn)之前,讓我們再次回顧IAD的概念:

IAD(Interface Association Descriptor),為USB設(shè)備定義了一個標(biāo)準(zhǔn)來表述捆綁在一個邏輯功能(比如這里的CDC虛擬串口)上的多個接口聚合的方法。USB協(xié)會分配了一個設(shè)備級別的類編碼(即圖3中0xEF),使用IAD的設(shè)備必須使用它(如圖3的設(shè)備描述符);這樣可以很容易在設(shè)備枚舉時就能識別出采用了IAD的設(shè)備。IAD描述符通常放在它所要捆綁的多個接口的接口描述符之前。

3 結(jié)論

在WIN10系統(tǒng)中,建議復(fù)合設(shè)備每個邏輯功能的接口描述符前都搭載一個IAD描述符,不論這個邏輯功能是單個接口描述符完成(比如這里的HID功能)還是要由多個接口描述符完成(比如這里的CDC功能)。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • HID
    HID
    +關(guān)注

    關(guān)注

    2

    文章

    130

    瀏覽量

    46606
  • CDC
    CDC
    +關(guān)注

    關(guān)注

    0

    文章

    57

    瀏覽量

    17798
  • Win10
    +關(guān)注

    關(guān)注

    2

    文章

    710

    瀏覽量

    39980

原文標(biāo)題:HID+CDC復(fù)合設(shè)備在WIN10的識別問題

文章出處:【微信號:STM32_STM8_MCU,微信公眾號:STM32單片機(jī)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    求助,關(guān)于USB復(fù)合設(shè)備HID+CDC串口問題求解

    分別寫了CustomHID的鍵鼠代碼、CDC代碼測試均無問題,整合到一起后,插上電腦有時識別串口,有時識別HID,最終過不了幾秒HID
    發(fā)表于 03-07 06:11

    蘋果筆記本WIN10下面USB連接出錯的原因?

    STM32L151CBU6的單片機(jī)碰到一個問題,蘋果筆記本WIN10上STM32的HID識別識別
    發(fā)表于 04-22 08:21

    基于win10系統(tǒng)的HID I2C設(shè)備開發(fā)

    基于win10系統(tǒng)的HID I2C設(shè)備開發(fā),目前在網(wǎng)上很難找到實(shí)例,想做一個設(shè)備,類似鼠標(biāo)可以win1
    發(fā)表于 10-23 15:50

    USB HID示例適用于WIN10

    我試著UVC上添加HID作為一個聯(lián)機(jī)設(shè)備,但是Wi10USB 3.0接口上,HID
    發(fā)表于 01-04 14:24

    基于stm32f107+CubeMx+Keil如何去實(shí)現(xiàn)HID+CDC組合設(shè)備

    ruhe使用stm32 cubemx配置生成CDCHID工程呢?基于stm32f107+CubeMx+Keil如何去實(shí)現(xiàn)HID+CDC組合設(shè)備呢?
    發(fā)表于 10-28 08:51

    怎么解決Win10系統(tǒng)無法識別USB設(shè)備的問題?

    怎么解決Win10系統(tǒng)無法識別USB設(shè)備的問題?
    發(fā)表于 11-01 07:42

    STM32F4使用USB復(fù)合設(shè)備HID+BULK+MSC無法啟動是什么問題

    rtthread使用usb復(fù)合設(shè)備生成HID+BULK+MSC后,win10電腦端MSC無法啟動,且根據(jù)MCU端點(diǎn)池分析端點(diǎn)也是夠用的,想知道這個是RTT代碼框架問題還是什么問題。
    發(fā)表于 10-27 10:59

    HIDCDC項(xiàng)目并到復(fù)合USB設(shè)備上時無法正常工作咋辦

    我有兩個獨(dú)立的項(xiàng)目 HIDCDC 可以正常工作。但是當(dāng)我想將兩個項(xiàng)目合并到復(fù)合 USB 設(shè)備上時,HID 無法正常工作,卡住。只有
    發(fā)表于 12-28 10:19

    USB設(shè)備同時用作CDCHID時無法正常枚舉怎么解決?

    使用RT thread stdio的時候,USB配置成了復(fù)合設(shè)備CDCHID設(shè)備)無法正常枚舉設(shè)備
    發(fā)表于 08-20 16:41

    M480內(nèi)核USB2.0 HID+CDC+MSC復(fù)用的case嗎?

    請問各位大佬,M480內(nèi)核,有USB2.0 HID+CDC+MSC復(fù)用的case嗎,或者HID+CDC的case,謝謝了?
    發(fā)表于 08-25 07:25

    Win10 激活工具

    win10/win8激活工具
    發(fā)表于 02-07 16:14 ?52次下載

    win10電腦無法識別U盤應(yīng)該如何解決

    解決win10電腦無法識別U盤的方法我們需要對癥下藥,導(dǎo)致win10無法識別U盤的原因有很多,U盤本身問題,電腦設(shè)置問題,BIOS設(shè)置問題,系統(tǒng)問題等等。下面,我就告訴大家
    的頭像 發(fā)表于 12-07 11:55 ?1.4w次閱讀

    HID_CDC復(fù)合設(shè)備WIN10識別問

    HID_CDC復(fù)合設(shè)備WIN10識別問題(電源技術(shù)發(fā)展綜述)-本文以STM32F405為例,
    發(fā)表于 08-04 18:23 ?20次下載
    <b class='flag-5'>HID_CDC</b><b class='flag-5'>復(fù)合</b><b class='flag-5'>設(shè)備</b><b class='flag-5'>在</b><b class='flag-5'>WIN10</b>的<b class='flag-5'>識別問</b>題

    PICKIT3 WIN10無法識別問

    通過網(wǎng)上修改注冊表的方式?jīng)]有一點(diǎn)效果,后來發(fā)現(xiàn)跟系統(tǒng)可能有關(guān)系,換了一個新的WIN10系統(tǒng)就解決了解決方法:換新的win10操作系統(tǒng),測試版本:win10專業(yè)版64位(10.0 19042),在運(yùn)行輸入dxdiag可以查看版本.
    發(fā)表于 11-16 20:36 ?4次下載
    PICKIT3 <b class='flag-5'>WIN10</b>無法<b class='flag-5'>識別問</b>題

    KT1404A語音芯片USB連電腦,win7正常識別WIN10無法識別USB設(shè)備

    KT1404A語音芯片畫的板子,USB連接電腦,win7可以正常識別到U盤,WIN10提示無法識別USB設(shè)備(獲取
    的頭像 發(fā)表于 06-10 18:13 ?735次閱讀
    KT1404A語音芯片USB連電腦,<b class='flag-5'>win</b>7正常<b class='flag-5'>識別</b><b class='flag-5'>WIN10</b>無法<b class='flag-5'>識別</b>USB<b class='flag-5'>設(shè)備</b>
    RM新时代网站-首页