WinUSB
+ -

使用WinUSB检测USB设备是什么设备速率?高速、低速、全速

2022-05-11 1113 0

WinUSB提供了检测USB设备的速率代码,详见:

// Device Information types
#define DEVICE_SPEED            0x01

// Device Speeds
#define LowSpeed                0x01
#define FullSpeed               0x02
#define HighSpeed               0x03 


BOOL GetUSBDeviceSpeed(WINUSB_INTERFACE_HANDLE hDeviceHandle, UCHAR* pDeviceSpeed)
{
    if (!pDeviceSpeed || hDeviceHandle == INVALID_HANDLE_VALUE)
    {
        return FALSE;
    }

    BOOL bResult = TRUE;

    ULONG length = sizeof(UCHAR);

    bResult = WinUsb_QueryDeviceInformation(hDeviceHandle, DEVICE_SPEED, &length, pDeviceSpeed);
    if (!bResult)
    {
        printf("Error getting device speed: %d.\n", GetLastError());
        goto done;
    }

    if (*pDeviceSpeed == LowSpeed)
    {
        printf("Device speed: %d (Low speed).\n", *pDeviceSpeed);
        goto done;
    }
    if (*pDeviceSpeed == FullSpeed)
    {
        printf("Device speed: %d (Full speed).\n", *pDeviceSpeed);
        goto done;
    }
    if (*pDeviceSpeed == HighSpeed)
    {
        printf("Device speed: %d (High speed).\n", *pDeviceSpeed);
        goto done;
    }

done:
    return bResult;
}

调用函数代码:

     DEVICE_DATA           deviceData;
     BOOL    noDevice;
     hr = OpenDevice(&deviceData, &noDevice);

    UCHAR speed = 0;
    if(GetUSBDeviceSpeed(deviceData.WinusbHandle, &speed))
    {
        printf("speed =%d\n", speed);
    }
    ...
    CloseDevice(&deviceData);

参考资料:

HID人机交互QQ群:564808376    UAC音频QQ群:218581009    UVC相机QQ群:331552032    BOT&UASP大容量存储QQ群:258159197    STC-USB单片机QQ群:315457461    USB技术交流QQ群2:580684376    USB技术交流QQ群:952873936   

0 篇笔记 写笔记

USB3.2超高速兼容USB2.0数据收发的双总线架构
高速USB体系和以前的USB版本的功能一致,都是通过USB线缆将USB主机USB外设相连,进行数据交互的。所与连接到该条USB总线上的所有设备在主机控制器协调下,共享带宽。USB总线允许外部设备被接入(attached),配置,使用或移除。USB3.2是双总线架构,其中一条总线用于向后兼容USB2......
USB超高速3.0协议与USB2.0协议的差异
高速在框架层级是向后兼容 USB 2.0 的。然而, USB 2.0 和超高速协议还是有一些根本性的差异:USB 2.0 使用三部分事务交易(令牌,数据和握手),而超高速对这相同的三部分的使用是不相同的。对于输(OUTs),令牌被列入数据包;而对于输入(INs),令牌则被握手所取代。USB 2.0......
USB超高速高速端点伴随描述符
在接口中描述的每个超高速端点都紧跟着一个超高速端点伴侣描述符( EndpointCompanion descriptor)。这个描述符包含只给超高速端点定义的附加端点特性。这个描述符总是 作 为 配 置 描 述 符 信 息 的 一 部 分 在GetDescriptor(Configuration) ......
USB超高速 精密时间测量描述符
精密时间测量描述符(Precision Time Measurement)应由支持PTM能力的所有集线器和设备实现。OffsetFieldSizeValueDescription0bLength1数字描述符长度1bDescriptorType1常量描述符的类型,这里为DEVICE CAPABILIT......
USB超高速 GEN1设备状态
USB设备可能有很多状态,如断开状态,刚接入状态,分配地址状态,配置状态,工作状态等。当然由于USB3.0超高速协议规范的定义,USB超高速总线架构采用的是双总线结构。超高速设备的状态如下:AttachedPoweredDefaultAddressConfiguredSuspendedStateNo......
USB设备低速,高速硬件检测机制及断开过程
没有设备连接到主机时:D+和D-数据线上的下拉电阻起作用,使得两者都在低电平;主机端看来就是个SE0状态,同样地,当数据线上的SE0状态持续一断时间后,就被主机认为是断开状态。设备连接到主机时:当主机检到某一个数据线电平拉高并保持了一段时间,就认为有设备连上来了。 主机必需在驱动SE0状态以复位设备......
USB3.2超高速GEN2 128b/132b编码
USB3.2 GEN2的物理层PHY使用的是128b/132b编码,数据的传输速从GEN1最高的5Gbps达到了GEN现在的10Gbps。USB3.2 GEN2和GEN1一样,都是要传输的数据先进行序列化,然后再从低位(LSB)到高位(MSB)进行传输。USB3.2 GEN2对于传输1字节的symb......
USB3.2超高速GEN1 8b/10b编码概述
USB3.2 GEN1的物理层PHY使用的是8b/10b编码。USB3.2GEN1即USB3.0使用的8b/10b编码是对数据从8位到10的编码扩展。如对于发送的数据1字节,其各位从低到高记作 ABCDEFGH,这里将其分为2组,低5位一组,高3位一组。高3位的FGH被编码为fghj,低5位的ABC......
USB3.2超高速GEN2数据扰频
USB3.2GEN2的扰频规则和USB3.2GEN1的扰频算法是不一样的。USB3.2GEN2的扰频算法图:USB3.2GEN2的扰频有以下几种模式:扰码器前进并与数据异或。扰码器前进并被绕过(不与数据异或)。扰码器不前进且被绕过(不与数据异或)USB3.2GEN2的扰频规则:块头(Block he......
USB超高速 配置概要描述符
配置概要描述符可以由具有多个配置的设备实现,使用该功能用于标识设备支持的配置列表。如果实现配置概要描述符,设备提供的每个功能应通过单独的配置概要描述符表示。但是,如果设备功能存在于所有可能的配置中,则可以省略该功能的配置概要描述符。配置概要描述符应按首选项降序包含在BOS描述符中。配置概要描述符可由......
USB超高速 中断传输
中断传输类型用来支持带有轮询服务间隔需要高可靠性传输小数量数据的设备。这个规格的协议层章详细描述了与中断传输相关的包,总线事务和事务处理流程。超速中断传输类型一般提供以下方面:能保证最大的服务间隔能保证在下一次服务间隔中尝试重新传输在每个服务周期中为中断端点尝试中断传输,保留一定带宽保证在每个服务间......
USB超高速设备描述符的bMaxPacketSize0为0x09
USB3的设备中,其USB设备描述符和2.0的结构一致,不过在含义上有的字段稍有区别。比如说在USB3.2的版本中,其设备描述符中的bMaxPacketSize0和USB2.0有就所不同。在USB2.0中bMaxPacketSize0代表的是USB设备默认端点0的最大包的大小,一般为0x40即64字......
USB超高速(SuperSpeed)体系结构
USB超高速(SuperSpeed)体系结构在协议层分为物理层,数据链路层,协议层。USB3.0定义了超过高USB,USB3.1/USB3.2实现了超高速Plus架构。数据链路层(Link Layer)超高速链路(SuperSpeed link)是两个端口的逻辑和物理连接。被连接的端口(connec......
USB超高速对USB2.0的兼容性
当主机枚举时,所有设备都会被分配一个USB地址。每个设备支持一个或多个管道,主机可以通过这些管道与设备通信。所有设备都必须在端点0处支持指定的管道,设备的默认控制管道将连接到该管道。所有设备都支持通过此控制管道访问信息的公共访问机制。USB外接设备的兼容USB 3.0 外接设备 ( peripher......
USB3.2超高速 平台描述符
平台描述符用于标识平台或操作系统定义的128位UUID值,使用该值可以标识特定平台或操作系统的唯一设备功能。平台描述符可以包含与该功能特性能力相关联的一个或多个字节的数据。平台描述符的定义如下:struct _PLATFORM_DESCRIPTOR{ BYTE bLength; ......
关注公众号
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

您的支持,是我们前进的动力!