首页 > 其他分享 >USB协议详解第6讲(USB描述符-端点描述符)

USB协议详解第6讲(USB描述符-端点描述符)

时间:2024-08-11 21:27:38浏览次数:13  
标签:USB 0x00 微帧 描述符 HID 端点

1.USB描述符

USB描述符有设备描述符标准配置描述符接口描述符端点描述符字符串描述符,HID设备有HID描述符报告描述符物理描述符。今天主要是学习USB端点描述符的组成

2.端点描述符组成

前面讲了设备描述符标准配置描述符、接口描述符,本篇我们讲解端点描述符。首先要明确的一点是端点描述符不能单独返回给USB主机,主机会请求获得配置描述符集合,配置描述符集合主要由标准配置描述符、接口描述符、端点描述符、HID描述符,报告描述符物理描述符是单独返回给USB主机。端点描述符包含7个字节,组成如下:

3.STM32配置描述符集合代码(必须按顺序)

 
/* USB Configuration Descriptor */
const uint8_t CustomHID_ConfigDescriptor[CUSTOMHID_SIZ_CONFIG_DESC] =
{
//
// 标准配置描述符
//	
    0x09, /* bLength: Configuation Descriptor size */
    USB_CONFIGURATION_DESCRIPTOR_TYPE, 	/* bDescriptorType: Configuration */
    CUSTOMHID_SIZ_CONFIG_DESC,			/* wTotalLength low : Bytes returned */
    0x00,								/* wTotalLength high: Bytes returned */
    0x01,         /* bNumInterfaces: 1 interface */
    0x01,         /* bConfigurationValue: Configuration value */
    0x00,         /* iConfiguration: Index of string descriptor describing the configuration*/
    0xC0,         /* bmAttributes: Bus powered */
                  /*Bus powered: 7th bit, Self Powered: 6th bit, Remote wakeup: 5th bit, reserved: 4..0 bits */
    0x96,         /* MaxPower 300 mA: this current is used for detecting Vbus */
    
//
// 接口描述符
//		
	/************** Descriptor of Custom HID interface ****************/
    /* 09 */
    0x09,         						/* bLength: Interface Descriptor size */
    USB_INTERFACE_DESCRIPTOR_TYPE,		/* bDescriptorType: Interface descriptor type */
    0x00,         /* bInterfaceNumber: Number of Interface */
    0x00,         /* bAlternateSetting: Alternate setting */
    0x02,         /* bNumEndpoints 此接口有两个端点 */
    0x03,         /* bInterfaceClass: HID */
    0x00,         /* bInterfaceSubClass : 1=BOOT, 0=no boot */
    0x00,         /* nInterfaceProtocol : 0=none, 1=keyboard, 2=mouse */
    0,            /* iInterface: Index of string descriptor */
    
//
// HID描述符(后续讲解)
//		
	/******************** Descriptor of Custom HID HID ********************/
    /* 18 */
    0x09,         /* bLength: HID Descriptor size */
    HID_DESCRIPTOR_TYPE, /* bDescriptorType: HID */
    0x10,         /* bcdHID: HID Class Spec release number */
    0x01,
    0x00,         /* bCountryCode: Hardware target country 国家代码 */
    
	0x01,         /* bNumDescriptors: Number of HID class descriptors to follow
					 类别描述符数目(至少有一个报表描述符)*/
    0x22,         /* bDescriptorType 报告描述符 */
    CUSTOMHID_SIZ_REPORT_DESC,	/* wItemLength: Total length of Report descriptor 报告描述符大小 */
    0x00,						/* 标志类别描述符说明结束 */ 
	
	
//
// 端点1描述符
//		
	/******************** Descriptor of Custom HID endpoints ******************/
    /* 27 */
    0x07,          /* bLength: Endpoint Descriptor size */
    USB_ENDPOINT_DESCRIPTOR_TYPE, /* bDescriptorType: */
 
    0x82,          /* bEndpointAddress: Endpoint Address (IN) */               
                   // bit 3...0 : the endpoint number
                   // bit 6...4 : reserved
                    // bit 7     : 0(OUT), 1(IN)
    0x03,          /* bmAttributes: Interrupt endpoint */
    0x40,          /* wMaxPacketSize: 64 Bytes max */
    0x00,
    0x02,          /* bInterval: Polling Interval (2 ms) */
    /* 34 */
 
//
// 端点2描述符
//		
    0x07,	/* bLength: Endpoint Descriptor size */
    USB_ENDPOINT_DESCRIPTOR_TYPE,	/* bDescriptorType: */
			/*	Endpoint descriptor type */
    0x01,	/* bEndpointAddress: */
			/*	Endpoint Address (OUT) */
    0x03,	/* bmAttributes: Interrupt endpoint */
    0x40,	/* wMaxPacketSize: 64 Bytes max  */
    0x00,
    0x02,	/* bInterval: Polling Interval (2 ms) */
    /* 41 */
}; /* CustomHID_ConfigDescriptor */

4.端点描述符组成详解

1.bLength

端点描述符的长度。

2.bDescriptorType

描述符类型,端点描述符为0x05。描述符的结构开头是一样的,都是先说描述符长度,然后说类型,每种描述符的类型是不一样的,如下表格,可速查。

image

3.bEndpointAddress

Bit 3…0: 端点编号;

Bit 6…4: 保留,默认为0;

Bit 7:如果是控制端点可以忽略,因为控制端点有两个方向,否则一般表示数据传输方向,0 = OUT endpoint 1 = IN endpoint。

4.bmAttributes

Bits 1..0: Transfer Type,表示传输类型(传输类型在后面讲传输一节会详细讲解)

00 = Control-控制传输

01 = Isochronous-同步传输

10 = Bulk-批量传输

11 = Interrupt-中断传输

Bits 7..2: 大家可以查看usb_20.pdf(下面有下载方法)。

5.wMaxPackeSize(双字节)

表示当前配置下此端点能够接收或发送的最大数据包的大小。

对于同步端点,此值用于指示主机在调度中保留的总线时间,这是每(微)帧数据有效负载所需的时间,有效负载时间就是发送一帧数据需要占用的总线时间,在实际数据传输过程中,管道实际使用的带宽可能比保留的带宽少,大家想想,如果实际使用的带宽比保留的还多,那就丢数了;
对于其类型的端点,bit10~bit0指定最大数据包大小(以字节为单位);

bit12bit11对于高速传输的同步和中断端点有效:bit12bit11可指定每个微帧的额外通信次数,这里大家一定要知道是在高速传输中,当一个事务超时时,在一个微帧时间内重传的次数,如果设置为00b(None),则表示在一个微帧内只传输一个事务,不进行额外的超时重传,如果设置为01b,则表示在一个微帧内可以传输两次事务,有一次额外的重传机会,从下面可以看出,一个微帧最多可以有两次重传事务的机会,如果微帧结束了还是失败,就需要等到下一个微帧继续发送该事务;

00 = None (1 transaction per microframe)

01 = 1 additional (2 per microframe)

10 = 2 additional (3 per microframe)

11 = Reserved

其它位默认为0,详细信息可参考usb_20文档第5章

6.bInterval

查询时间,就是主机多久和设备通讯一次,主机在枚举设备的时候会得到端点描述符,然后根据端点描述符这个值和此端点进行对应的数据交互,也就是主机多久给端点发送一次数据请求。根据设备运行速度以帧或微帧表示,低速和全速称为帧,下面的一个值代表1ms,高速称为微帧,一个值代表125us。

对于全速/高速同步端点,此值必须在1到16之间。bInterval值用作2的指数,例如bInterval为4,表示周期为8个单位;

对于全速/低速中断端点,该字段的值可以是1到255,也就是主机多少ms给设备发一次数据请求;

对于高速中断端点,使用bInterval值作为2的指数,例如bInterval为4表示周期为8。这个值必须在1到16之间;

对于高速批量/控制输出端点,bInterval必须指定端点的最大NAK速率。值0表示端点永不NAK。其它值表示每个微帧的bInterval*125us时间最多1个NAK。这个值的范围必须在0到255之间;

对于全速/低速批量/控制输出端点,此值无意义,可以任意指定。

大家根据以上说明对号入座使用,用的时候在详细看usb_20.pdf文档。

标签:USB,0x00,微帧,描述符,HID,端点
From: https://www.cnblogs.com/linhaostudy/p/18353928

相关文章

  • USB协议详解第5讲(USB描述符-接口描述符)
    1.USB描述符USB描述符有设备描述符、标准配置描述符、接口描述符、端点描述符、字符串描述符,HID设备有HID描述符、报告描述符和物理描述符。今天主要是学习USB接口描述符的组成。2.接口描述符组成前面讲了设备描述符和标准配置描述符,本篇我们讲解接口描述符。首先要明确的一点......
  • USB type-c CC管脚如何做到正反接检测功能
    USBType-C连接器的CC(ConfigurationChannel)管脚用于实现插头方向检测和电源管理。具体来说,USBType-C连接器具有两个CC管脚:CC1和CC2。正反接检测功能的实现主要依赖于这两个CC管脚的电压状态。正反接检测原理CC管脚的布局:在USBType-C接口中,CC1和CC2分......
  • USB Type-C的工作原理与技术分析
    USBTYPE-C更加深入的应用,是从USB3.1开始的,这是因为从USB3.1开始,USB的功能开始变得更加丰富起来。USB3.1基本规格有SS字样的代表支持PD,有SS和10的USB标志代表支持USB3.1及PD2.0历代USB输出功率及标志比较本图来源于:https://www.datapro.net/techinfo/what_is_usb_type_c......
  • USB协议详解第4讲(USB描述符-标准配置描述符)
    1.USB描述符USB描述符有设备描述符、标准配置描述符、接口描述符、端点描述符、字符串描述符,HID设备有HID描述符、报告描述符和物理描述符。今天主要是学习USB标准配置描述符的组成。2.标准配置描述符组成一个USB设备至少有一个或者多个配置,这一点可以从设备描述符的最后一项bN......
  • USB PD和USB TYPE-C 的区别
    USBPowerDelivery(USBPD)和USBType-C是两个不同但相关的技术标准,它们在功能和应用上有所区别。1.USBType-C连接器标准:USBType-C是一种物理连接器标准。它定义了USB接口的外形和引脚排列。双面插入:USBType-C的设计使其可以双面插入,这意味着无论插头的正反......
  • USB协议详解第3讲(USB描述符-设备描述符)
    我们第一个学习要点就是USB描述符,所谓描述符其实就是C语言里面的结构体或者数组,数组包含的信息说明当前的设备具有哪些特征。USB描述符有设备描述符、配置描述符、接口描述符、端点描述符、字符串描述符,HID设备有HID描述符、报告描述符和物理描述符。我们先学会每个描述符的细节,我......
  • USB 控制写传输、控制读传输、无数据控制传输都是在什么场景下?
    在USB通信中,控制传输(ControlTransfer)是一个非常常见且重要的传输类型,主要用于配置设备、查询设备状态以及发送和接收命令。控制传输有三种主要形式:控制写传输(ControlWriteTransfer)、控制读传输(ControlReadTransfer)和无数据控制传输(NoDataControlTransfer)。这些传输类型......
  • USB协议详解第1讲(核心概念通俗理解)
    0.概括USB协议学习中最重要几个概念如下,没有提及的就是对USB协议学习中不重要的或者编程不需要用到的。大家也不用着急,概念必须要学会,否则都不知道下面这些东西是什么还学什么通用串行总线协议,大家也不用怕,其实也没有那么高深莫测。1.USB传输(Transfer)2.USB传输中事务(Transactio......
  • 记录5:ESP32S3的usb使用
    0、前期准备1、会使用idf开发环境2、懂得kconfig1、知识储备1.1概述​TingUSB是一个开源的跨平台的USB主机/设备的usb协议栈,常用在mcu开发平台,由于不采用动态分配内存以及阻塞所有中断事件,将中断事件要处理的事情都放在,非中断函数中处理,因此该usb栈内存设计非常安全......
  • 电脑外接设备管理软件有哪些(三款USB外设管理软件推荐)
    “小张,你上次用U盘拷贝资料时,有没有担心过数据安全问题?”“是啊,李姐,我总感觉用U盘传文件不太放心,万一数据被误删或者泄露就麻烦了。”正是这样的担忧,促使了电脑外接设备管理软件的出现。这些软件通过提供设备识别、访问控制、数据加密等功能,为企业的数据安全保驾护航。本......