问题描述
我正在尝试构建USB 3.0设备。我在使usb枚举正常工作以获得超高速时遇到一些麻烦。我的枚举在OSX上正常工作,所以我知道描述符是正确的。但是在Windows上,BOS描述符并没有在超高速功能部分选择
(使用消息分析器验证了这一点)。
I am trying to build a USB 3.0 Device. I am having some trouble getting the usb enumeration to work correctly for super speed. My enumeration works correctly on a OSX, so I know descriptors are correct. But on windows the BOS descriptor is not picking up the superspeed capability part (Verified this using message analyzer).
设备可以工作但在高速设备下。我需要为Windows设置特殊的BOS描述符吗?我添加了Microsoft OS描述符1.0,设备列在设备管理器中的winusb设备下。
The device works but under high speed devices. Do I need to have special BOS descriptor for windows? I have added the Microsoft OS descriptor 1.0 and the device is listed under the winusb devices in device manager.
此外,我看到大多数超高速设备被列为多台不同笔记本电脑上的高速设备。 Windows的超高速设备是否存在问题?我认为在Windows中存在BOS描述符解析的错误,这导致设备
枚举为高速而不是超速。
Also I am seeing most of the superspeed devices listed as highspeed devices on multiple different laptops. Is there a issue with superspeed devices for windows? I think there is a bug with BOS descriptor parsing in windows and this is causing device to enumerate as high speed instead of superspeed.
我认为在解码USB 3.0二进制时对象描述符(BOS)Microsoft消息分析器有几个问题。
I think that when decoding the USB 3.0 Binary Object descriptor (BOS) the Microsoft message analyzer has a couple of issues.
我的设备使用赛普拉斯FX3并具有如下的BOS描述符:
My device uses a Cypress FX3 and has a BOS descriptor as follows:
/* Binary device object store descriptor */
const uint8_t CyFxUSBBOSDscr[] __attribute__ ((aligned (32))) =
{
0x05, /* Descriptor size */
CY_U3P_BOS_DESCR, /* Device descriptor type (0x0F) */
0x16,0x00, /* Length of this descriptor and all sub descriptors */
0x02, /* Number of device capability descriptors */
/* USB 2.0 extension */
0x07, /* Descriptor size */
CY_U3P_DEVICE_CAPB_DESCR, /* Device capability type descriptor (0x10) */
CY_U3P_USB2_EXTN_CAPB_TYPE, /* USB 2.0 extension capability type (0x02) */
0x02,0x00,0x00,0x00, /* Supported device level features: LPM support */
/* SuperSpeed device capability */
0x0A, /* Descriptor size */
CY_U3P_DEVICE_CAPB_DESCR, /* Device capability type descriptor (0x10) */
CY_U3P_SS_USB_CAPB_TYPE, /* SuperSpeed device capability type (0x03) */
0x00, /* Supported device level features */
0x0E,0x00, /* Speeds supported by the device : SS, HS and FS */
0x03, /* Functionality support */
0x0A, /* U1 Device Exit latency */
0xFF,0x07 /* U2 Device Exit latency */
};
应用程序在会话期间以及当我查看t时读取它数据所有22个字节都出现在消息数据窗口中。但是,描述符仅被解码到第一个设备能力的末尾(USB 2.0扩展),并且它错误地解码了
4'支持的设备级功能'字节,因此不是显示LPM位置位(1)并且Reserved1和Reserved2复位(0)表示Reserved2设置为32768(0x8000),LPM和保留1复位(0)。
The app reads it during the session and when I look at the data all 22 bytes are present in the message data window. However, the descriptor is only decoded to the end of the first device capability (the USB 2,0 extension), and it incorrectly decodes the 4 'supported device level features' bytes so that instead of showing that the LPM bit is set (1) and that Reserved1 and Reserved2 are are reset (0) it shows that Reserved2 is set to 32768 (0x8000) and LPM and Reserved 1 are reset (0).
是还有其他人看到这个问题吗?
Is anyone else seeing this problem?
推荐答案
https://blogs.msdn.microsoft.com/usbcoreblog/2014/09/02/capturing- usb-debug-traces
https://blogs.msdn.microsoft.com/usbcoreblog/2014/09/02/capturing-usb-debug-traces
这篇关于Winusb c ++超级协议问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!