衡阳派盒市场营销有限公司

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

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

HID+CDC復合設備在WIN10的識別問題

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

1 問題現(xiàn)象

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

2 問題分析

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

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

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

Figure 1 第一次USB枚舉過程

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

Figure 2 異常枚舉過程

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

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

Figure 3 獲取的設備描述符

復合設備的class,subclass,protocol

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

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

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

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

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

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

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

3 結論

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

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

    關注

    2

    文章

    131

    瀏覽量

    46713
  • CDC
    CDC
    +關注

    關注

    0

    文章

    57

    瀏覽量

    17856
  • Win10
    +關注

    關注

    2

    文章

    710

    瀏覽量

    40148

原文標題:HID+CDC復合設備在WIN10的識別問題

文章出處:【微信號:STM32_STM8_MCU,微信公眾號:STM32單片機】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    求助,關于USB復合設備HID+CDC串口問題求解

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

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

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

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

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

    USB HID示例適用于WIN10

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

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

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

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

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

    STM32F4使用USB復合設備HID+BULK+MSC無法啟動是什么問題

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

    HIDCDC項目并到復合USB設備上時無法正常工作咋辦

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

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

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

    M480內核USB2.0 HID+CDC+MSC復用的case嗎?

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

    Win10 激活工具

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

    win10電腦無法識別U盤應該如何解決

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

    HID_CDC復合設備WIN10識別問

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

    PICKIT3 WIN10無法識別問

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

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

    KT1404A語音芯片畫的板子,USB連接電腦,win7可以正常識別到U盤,WIN10提示無法識別USB設備(獲取
    的頭像 發(fā)表于 06-10 18:13 ?814次閱讀
    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'>設備</b>
    百家乐官网庄的概率| 百家乐官网微笑打法| 百家乐官网资金注码| 赌博游戏平台| 大发888 信用卡| 天博百家乐娱乐城| 广州百家乐赌场娱乐网规则| 澳门百家乐玩法心得技巧| 百家乐视频看不到| 24山分金周天度数| 澳门玩百家乐官网的玩法技巧和规则| 铁杆国际娱乐城| 大嘴棋牌手机版| 大发888游戏客户端| 永利高a1| 威尼斯人娱乐城游戏lm0| 百家乐破解分| 百家乐博百家乐的玩法技巧和规则 | 百家乐官网赢钱公式冯耕| 百家乐官网中的概率| 静安区| 香港六合彩白小姐图库| 白金会娱乐场怎么样| 德州扑克怎么玩的| 斗地主棋牌游戏| 大发888虎牌官方下载| 大发888婚庆车队| bet365注册找谁| 足球心水论坛| 久盛国际| 太子娱乐城开户| 博彩投注| 八大胜备用网址| 皇冠网vip小说| 皇冠足球开户| 百家乐官网赔率技巧| 真人百家乐官网海立方| 滨海湾百家乐官网娱乐城| 百家乐官网赌场分析网| 百家乐官网平台有什么优惠| 扑克王百家乐官网的玩法技巧和规则 |