首页 > 其他分享 >USB接口与端点描述符

USB接口与端点描述符

时间:2024-03-17 19:31:14浏览次数:12  
标签:表示 USB 接口 描述符 端点 设备

主机在第一次发送获取配置描述符的命令时,只会读取配置描述符的前九个字节,它包含了配置描述符以及所有从属的接口,端点(及其他特定类描述符)的总长度。

获取其他长度不固定的描述符也是这样分成两步执行

如果一个配置描述符不只支持一个接口描述符,并且每个接口描述符都有自己从属的端点描述符,那么我们USB设备在响应USB主机发送获取配置描述符命令时,会将这每一个接口与端点描述符作为配置描述符的一部分被返回。

USB接口描述符

第一个字段(bLength)表示接口描述符的长度,

第二个字段(bDescriptorType)表示描述符类型 此处应该为0x04

第三个字段(bInterfaceNumber)表示接口的编号  他是由配置描述符的接口数量(bNumInterfaces)来决定的。

从0递增  所以这里为0  表示只有一个接口

第四个字段(bAlternateSetting)表示备用接口编号,它的用法和接口编号一样,就是下一个层次的接口,用的很少,不用就可以设置为0,

我们一个设备允许拥有多个配置,主机在总线枚举的时候会选择并激活其中一个,这个备用接口就是允许我们在只有一个配置的情况下,在同一个接口内实现多种模式的转换,从而实现达到多个配置的目的。

举个例子,我们使用USB声卡,他有暂停和播放两个功能,我们在播放的时候会不停给声卡设备端点发送数据,这个时候就会占用一定的总线带宽,如果暂停播放呢,我们可以选择不给端点发送数据,但是因为是同步传输,仍然会占用一定的总线带宽,这时候我们可以使用备用接口功能,就是设置两个备用接口,一个包含输出数据的端点,一个不包含,我们默认的时候就选择不包含端点的接口,就可以不占用总线线宽了,需要播放的的时候就启用包含端点的接口。

第五个字段(bNumEndpoints)表示接口使用的端点数量。该字段表示的端点数量不包含端点0

如果是0x01 就表示 0 1 使用了两个端点。

第六个字段(bInterfaceClass),第七个字段(bInterfaceSubClass),第八个字段(nInterfaceProtocol),他们分别代表接口类,接口子类,接口协议,如果我们在设备描述符中将bDeviceClass(设备类)定义为0,那么我们要在接口描述符中进一步定义具体要求的接口功能。

下面是bDeviceClass的一点简单介绍

如果bInterfaceClass为0xFF表示接口类由厂商自定义,如果是0x00,则为将来标准化保留,其他的字段由USB-IF分配,该字段为0x03,就表示该设备想把自己枚举成HID设备,

bInterfaceSubClass这个字段的值的设置随bInterfaceClass的不同而不同,如果为0,则bInterfaceSubClass也是必须为0,其他非0xFF都是由USB-IF分配的,HID设备的接口子类代码只有0x01和0x00是有效的,后者0x00表示没有子类代码,后者0x01表示基本输入输出系统,

所以该字段设置成了0x01

nInterfaceProtocol这个字段为0x02 意思如下图所示,代表鼠标的意思

如果我们要设计一个集线器设备,设备描述符的bDeviceClass同样可以为0,但是接口描述符中的bInterfaceClass的设置为0x09,第七个字段(bInterfaceSubClass),第八个字段(nInterfaceProtocol)都可以为0,集线器是没有分规范的。

第九个字段(Interface)表示接口字符串描述表的索引值,没有就为0

USB端点描述符


接口的端点数量是可以灵活调整的

第一个字段都是长度,

第二个字段也是固定的为0x05 表示为端点描述符类型

第三个字段(bEndpointAddress)用来描述端点地址和方向信息

端点号在低四位 可使用16个端点(低速只有两位  三个端点 )

端点的方向是以主机为参考的,输出OUT端点的数据传输方向是从主机到设备,输入IN端点则是相反的。(方向的定义对控制端点无效,控制传输类型是双向的,定义方向是无效的)

第三个字段(bmAttributes)决定了端点是什么传输类型

这里我们是0x03表示中断传输

第五个字段(wMaxPacketSize)表示端点支持接收或发送的最大数据包字节长度。

第六个字段(0x20)表示主机轮询中断端点,其范围是1-255  我们STM32f103是全速的USB,没有高速,所以程序里就是32ms查询一次。计算方法如下图,简单了解一下就好。

标签:表示,USB,接口,描述符,端点,设备
From: https://blog.csdn.net/Z1799369927/article/details/136782087

相关文章

  • 带你了解USB Type-C的原理!!!
    USBType-C是一种通用串行总线接口标准,主要用于连接智能手机、平板电脑、笔记本电脑等便携式电子设备。它具有正反插、传输速度快、数据传输能力强、支持大功率充电等优点。USBType-C是一种通用的串行总线接口标准,它具有24个引脚,这些引脚的功能和用途如下: 1. VBUS:电......
  • 铭瑄主板重启后USB3.0失效键盘鼠标无反应需要重新插拔
    铭瑄主板重启后USB3.0失效键盘鼠标无反应需要重新插拔 环境:铭瑄B760主板,使用鼠标键盘使用USB3.0HUB连接到主板USB3.0口。 重启后,键盘鼠标无反应,需要重新插拔。 解决方法:在主板BIOS-USB设置中开启" xHCI hand-off ",中文名叫“可扩展的主机控制器接口”。 ......
  • 《安富莱嵌入式周报》第334期:开源SEM扫描电子显微镜,自制编辑器并搭建嵌入式环境,免费产
    周报汇总地址:http://www.armbbs.cn/forum.php?mod=forumdisplay&fid=12&filter=typeid&typeid=104 视频版:https://www.bilibili.com/video/BV1om411Z714/目录1、开源SEM扫描电子显微镜,数字图像采集解决方案2、Microchip专家为客户提供免费的产品设计审查服务3、开源植......
  • USB 1
    USB1buuctf解压打开记事本,无作用使用010查看key.ftm搜索flag,key等字段,在众多key字段中找到zip信息搜索十六进制文件头504b0304将两个压缩包都保存下来查看,发现都是个流量分析包USB流量分析使用命令提取键盘数据tshark-rkey.pcap-Tfields-eusb.capdata......
  • USB流量分析
    USB流量分析对CTF中USB做个了断,先摆定义USB是universalserialbus(通用串行总线)的缩写,是外部总线标准,通过对接口流量的监听,取得键盘敲击,鼠标移动与点击,存储设备的明文传输通信,USB无线网卡网络传输内容等等lsusb命令显示本机的USB设备列表及详细信息BUS002:指名设备连接哪条......
  • USB PHY
    USBPHY(USBPhysicalLayer)是USB(UniversalSerialBus)接口硬件设计中的一个重要组成部分,它负责实现USB协议的物理层功能。在USB通信过程中,PHY层负责将数据信号转换为适合传输的电信号,以及对接收到的电信号进行解码还原为数字数据。USBPHY主要包括以下功能:1.数据编码和解码:......
  • USB 2.0
    速度分类低速:1.5Mb/s,全速:12Mb/s,高速:480Mb/s,超级速度:4.8Gb/s,设备检测外围设备会通过拉高D+或D-告知主机设备插入总线电流完全配置前,允许从总线获取最大100mA电流,完全配置后,最大500mA电流。总线状态J状态、K状态、空闲状态、SE0状态 J状态和空闲状态的总线电压一样,都是一......
  • AP8851H DC-DC降压恒压IC+协议芯片 USB PD快充方案电源驱动
    产品描述    AP8851H一款宽电压范围降压型DC-DC电源管理芯片,内部集成使能开关控制、基准电源、误差放大器、过热保护、限流保护、短路保护等功能,非常适合在宽输入电压范围具有优良的负载和线性调整度。AP8851H芯片包含每周期的峰值限流、软启动、过压保护和温度保护,带......
  • C# 监听usb插拔
    privatestaticManagementEventWatcherinsertWatcher;privatestaticManagementEventWatcherremoveWatcher;staticvoidMain(string[]args){insertWatcher=newManagementEventWatcher();WqlEventQueryinsertQuery=newWqlEventQuery("SELECT*FROM__I......
  • C#获取指定usb设备的厂商信息
    stringvid="04B4"; stringpid="1003"; stringquery=$"SELECT*FROMWin32_PnPEntityWHEREDeviceIDLIKE'%VID_{vid}%&PID_{pid}%'";ManagementObjectSearchersearcher=n......