WINUSB使用(附STM32Demo)


參考鏈接:

https://github.com/xtoolbox/TeenyUSB

https://github.com/pbatard/libwdi/wiki/WCID-Devices

https://www.amobbs.com/thread-5530162-1-1.html

https://github.com/MichaelTien8901/STM32WINUSB

https://0w0.pw/417.html

 上位機參考:https://github.com/xtoolbox/qtlua/tree/master/src/qlibusb

 

總結一下,主要需要做三個工作:

1.添加存儲在字符串索引0xEE處的【OS字符串描述符】,其中包含bMS_VendorCode值,接下來的請求將使用該值。

2.在收到Vendor Request的 bRequest  等於bMS_VendorCode值的請求以后,若設置包的 wIndex == 0x0004,返回【WINUSB_ExtendedCompatId_Descritpor】。

3.在收到 Interface Request 的 bmRequestType 等於0xC1值的請求以后,若設置包的 wIndex == 0x0005,則返回【WINUSB_ExtendedProperty_InterfaceGUID_Descritpor】。

 

在調試1的過程中,win只會在第一次插入時請求0xEE,所以

0x00 關於如何對WINUSB進行DEBUG
請注意,Windows僅查詢OS字符串描述符一次,在開發過程中會造成麻煩。OS描述符存儲在注冊表中
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\UsbFlags\VVVVPPPPRRRR
(VVVV - VID; PPPP - PID; RRRR - 版本號)
請刪除你USB設備對應的注冊表項,然后使用USBDeview卸載設備,以便始終獲得新的設備插入行為。

第一次插入:

 

 第二次及以后插入:

 

 可見只會在第一次查詢OS字符串描述符。

 

STM32F103C8T6 Demo:https://gitee.com/guanglunking/WINUSBF103Demo

如何從cubemx生成的USB CDC工程改為WINUSB工程可以看該次提交的diff:https://gitee.com/guanglunking/WINUSBF103Demo/commit/748cb59de2f920a92b7f5469e471eaa30cf356c6

測試上位機:https://gitee.com/guanglunking/WINUSB_PC_Test


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM