USB协议详解第3讲(USB描述符-设备描述符)

40 篇文章 1518 订阅
订阅专栏

我们第一个学习要点就是USB描述符,所谓描述符其实就是C语言里面的结构体或者数组,数组包含的信息说明当前的设备具有哪些特征。USB描述符有设备描述符配置描述符接口描述符端点描述符字符串描述符,HID设备有HID描述符报告描述符物理描述符。我们先学会每个描述符的细节,我会写的非常详细且简洁,后面在学习USB枚举的时候会通过抓包和波形来学习每一个描述符在总线上的作用,并且会介绍每一个描述符是在什么时候以哪种方式在总线上进行传输的,今天主要是学习USB设备描述符的组成。

设备描述符是USB主机枚举USB设备申请的第1个描述符,每个设备有且仅有一个设备描述符,也就是大家以后看到的任何的USB设备都只有一个设备描述符数组,设备描述符的长度是18字节,下面我们来学习设备描述符数据结构,看看USB设备具有哪些特征,它的结构我们可以通过下面的表格来逐一了解。

STM32 设备描述符代码实现如下:

	#define 	USB_DEVICE_DESCRIPTOR_TYPE              	0x01		// 设备描述符类别
	#define 	USB_OTG_MAX_EP0_SIZE                 		64			// 端点0支持的最大包长
	#define 	USBD_VID                        			0x0483		// 厂商ID		
	#define 	USBD_PID                       		 		0xDF11		// 产品ID
	#define  	USBD_IDX_MFC_STR                            0x01 		// 厂商字符串的索引
	#define  	USBD_IDX_PRODUCT_STR                        0x02		// 产品字符串的索引
	#define  	USBD_IDX_SERIAL_STR                         0x03		// 产品序列号字符串的索引
	#define 	USBD_CFG_MAX_NUM                			1 			// 设备的配置数	
	/* USB Standard Device Descriptor */
	uint8_t USBD_DeviceDesc[USB_SIZ_DEVICE_DESC] =
	  {
	    0x12,                       /*bLength */
	    USB_DEVICE_DESCRIPTOR_TYPE, /*bDescriptorType*/
	    0x00,                       /*bcdUSB */
	    0x02,
	    0x00,                       /*bDeviceClass*/
	    0x00,                       /*bDeviceSubClass*/
	    0x00,                       /*bDeviceProtocol*/
	    USB_OTG_MAX_EP0_SIZE,      /*bMaxPacketSize*/
	    LOBYTE(USBD_VID),           /*idVendor low*/
	    HIBYTE(USBD_VID),           /*idVendor high*/
	    LOBYTE(USBD_PID),           /*idVendor low*/
	    HIBYTE(USBD_PID),           /*idVendor high*/
	    0x00,                       /*bcdDevice rel. 2.00*/
	    0x02,
	    USBD_IDX_MFC_STR,           /*Index of manufacturer  string*/
	    USBD_IDX_PRODUCT_STR,       /*Index of product string*/
	    USBD_IDX_SERIAL_STR,        /*Index of serial number string*/
	    USBD_CFG_MAX_NUM            /*bNumConfigurations*/
	  } ; /* USB_DeviceDescriptor */

下面来介绍设备描述符每一个内容的详细含义(所有的描述符都是小端格式,先低后高)
(1)bLength
    描述符长度(18字节,十六进制为0x12),就是标志描述符数据结构的长度。
(2)bDescriptorType
    bDescriptorType代表了本描述符的类型,设备描述符为0x01。所有的描述符类型表示如下图,大家以后也可以速查:


(3)bcdUSB
    USB协议版本,表示形式0xJJMN版本JJ.M.N(JJ  - 主要版本号,M  - 次要版本号,N  - 次要版本)
    例子:如果是USB2.0,写成:0200H;如果是USB1.1,写成:0110H 如果是USB3.11,写成:0311H
(4)bDeviceClass、bDeviceSubClass、bDeviceProtocol
    bDeviceClass、bDeviceSubClass、bDeviceProtocol分别代表设备类型,子类型,设备使用的协议,USB-IF区分设备类分了三个等级(类-子类-协议码)其中,类包含人机交互类、图像类、无线类、音频类等等,子类比如音频类的音频控制、音频流等等,协议比如人机接口类中的鼠标、键盘、触摸屏等,为何会有这么多USB的Class分类,子分类,设备协议。我们要知道,USB协议设计的目的,就是为实现通用,用单一的USB接口取代之前种类繁多的各种其他接口。而为了取代其他各种接口,那意味着就要实现各种设备所对应的各种功能。如下图显示USB设备的各种类别,USB设备类信息更详细内容可进入https://www.usb.org/defined-class-codes查看。

(5)bMaxPackeSize0
    就是端点一次最大传多少个字节。USB协议里有规定,端点0最低8字节,端点的最大传输大小和USB速度等级以及传输类型有关,控制传输一般使用端点0,低速最大8字节,全速和高速最大传输64字节,如下图:

(6)idVender
    厂商ID,就是个2字节的编号,由USB协议分配,厂商申请时需要交费。自己随便写的话,仅限于学习、测试的情况下,不能用做产品。
(7)idProduct
    产品ID,厂家自己随便定义。
(8)bcdDevice
    产品版本号,厂家自己随便定义。
(9)iManufacturer
    描述厂商的字符串的索引,为0则表示没有,后面详细讲解。
(10)iProduct
    描述产品的字符串的索引,为0则表示没有,后面详细讲解。
(11)iSerialNumber
    产品序列号字符串的索引,为0则表示没有,后面详细讲解。
(12)bNumConfigurations
    指示设备由多少个配置,前面提到过,一个USB可能有多个配置,一般USB产品都是1个配置。

 

1.版权归本作者(一个早起的程序员)所有;

2.未经原作者允许不得转载本文内容,否则将视为侵权;

3.转载或者引用本文内容请注明来源及原作者;

4.对于不遵守此声明或者其他违法使用本文内容者,本人依法保留追究权等。

下面是我的个人微信公众号,关注【一个早起的程序员】精彩系列文章每天不断。

USB描述符
lushoumin的博客
03-29 1010
2 USB CDC类基础理论知识介绍2.1 USB CDC类、USB2.0标准与PSTN之间的关系 CDC(Communication Device Class)类是USB2.0标准下的一个子类,定义了通信相关设备的抽象集合。它与USB2.0标准以及其下的子类的相互关系如下图所示: 图 1 USB2.0标准、CDC、PSTN之间的关系 如上图,USB2.0标准下定义了很多子类,有音频类,CDC类,HID,打印,大容量存储类,HUB,智能卡等等,这些在urb.org官网上有具体的定义,这里我们主要的是通信类
32 usb 配置描述符_USB协议详解第6USB描述符端点描述符
weixin_33525785的博客
01-13 465
关注+星标公众号,不错过精彩内容编排 | 一个早起的程序员一个早起的程序员1USB描述符USB描述符设备描述符、标准配置描述符、接口描述符、端点描述符、字符串描述符,HID设备有HID描述符、报告描述符和物理描述符。今天主要是学习USB端点描述符的组成。一个早起的程序员2端点描述符组成前面设备描述符、标准配置描述符、接口描述符,本篇我们解端点描述符。首先要明确的一点是端点描述符不...
USB标准设备描述符
billliu66的博客
12-29 9731
USB标准设备描述符包括设备描述符、配置描述符、接口描述符、端点描述符、字符串描述符设备限定描述符和其他速率配置描述符
USB协议详解第6USB描述符-端点描述符
一个早起的程序员
01-08 8736
目录 1.USB描述符 2.端点描述符组成 3.STM32配置描述符集合代码(必须按顺序) 4.接口描述符组成详解 1.USB描述符 USB描述符设备描述符、标准配置描述符、接口描述符、端点描述符、字符串描述符,HID设备有HID描述符、报告描述符和物理描述符。今天主要是学习USB端点描述符的组成。 2.端点描述符组成 前面设备描述符、标准配置描述符、接口描述符,本篇我们解端点描述符。首先要明确的一点是端点描述符不能单独返回给USB主机,主机会请求获得配置描述符集合,配置描述符集合主
USB系列五:USB设备配置描述符(重要)
最新发布
挨踢农民的博客
05-10 1852
USB总线接口协议中,对于USB外部设备功能特征是通过端点(Endpoint)、配置(Configuration)和接口(Interface)来描述的,这些就是典型的USB描述符USB主机通过设备请求来读取外部设备USB描述符,可以掌握该设备的接口信息和功能。USB设备请求提供了USB设备描述符的读取和写操作,包括标准设备请求和自定义请求两种。USB描述符USB设备请求是USB外设的主要内容,是USB设备功能的体现。
USB HID介绍
热门推荐
08-26 4万+
HID是一种USB通信协议,无需安装驱动就能进行交互,在学习HID之前,先来复习一下USB协议的相关内容。   USB设备描述符-概述 当插入USB设备后,主机会向设备请求各种描述符来识别设备。那什么是设备描述符呢? Descriptor描述符,是一个完整的数据结构,可以通过C语言等编程实现,并存储在USB设备中,用于描述一个USB设备的所有属性,USB主机是通过一系列命令来要求设备发送
USB学习(3):USB描述符USB设备
主要分享硬件、嵌入式软件部分知识
10-28 1989
它描述了高速USB设备的信息,如果设备以另一速度运行,该描述符将发生更改,这在支持两种速度配置的设备中是必需的。同样,如果在设备以高速运行时请求此描述符描述符读取将告诉主机有关全速配置的信息。在上一节的USB描述符部分,USB设备类的定义在:设备描述符的第四个字节和接口描述符的第六个字节。接口描述符描述了配置中的特定接口,此描述符中确定了接口的端点数量,声明了设备USB类,供主机加载适合适驱动程序。设备描述符提供给主机一些信息,如设备符合的USB规范、设备支持的配置数量、支持的协议、制造商标识(
USB各类设备描述符(usb device enumeration descriptors)
tugouxp的专栏
07-02 2676
0. RealtekUSB网卡dongle。
USBHID设备报告描述符详解[归类].pdf
10-20
USBHID 设备报告描述符详解 本文将对 USBHID 设备报告描述符进行详细的解释。报告描述符是对数据传输的说明,包括数据的用途和操作方式。 USB 通讯协议的规范是以 1ms 产生一个 USB 帧,每个帧中可以发送和接收一个...
报告描述符详解
10-29
在探讨USB通信协议中,报告描述符起着关键的作用。它不仅定义了数据传输的目的,还详细地指明了数据的具体用途。这一概念对于理解USB设备如何与主机进行交互至关重要。本文旨在深入解析报告描述符的相关知识点,包括...
USB鼠标键盘报告描述符介绍[归类].pdf
10-20
1. USB 设备识别:在 USB 中,USB HOST 是通过各种描述符来识别设备的,有设备描述符、配置描述符、接口描述符、端点描述符、字符串描述符、报告描述符等等。 2. 报告描述符(Report Descriptor):USB 报告描述符...
USB_HID报告及报告描述符简介
10-29
USB通信过程中,设备与主机之间的数据传输是通过各种描述符实现的,其中包括设备描述符、配置描述符、接口描述符、端点描述符、字符串描述符以及本篇文章将重点讨论的**报告描述符**。 #### 二、报告描述符的重要...
STM32 官方USB 例程JoyStick 详解
08-08
hw_config.c 用于 USB 硬件配置,usb_pwr.c 用于 USB 连接、断开操作,usb_istr.c 用于直接处理 USB 中断,usb_prop.c 用于上层协议处理,usb_desc.c 用于具体设备的相关描述符定义和处理。 二、设备初始化所做的...
USB-cdc描述符详解
qq_23852045的博客
04-22 5204
设备描述符: /* USB Standard Device Descriptor */ const uint8_t Virtual_Com_Port_DeviceDescriptor[] = { 0x12, /* bLength 该描述符总长度*/ USB_DEVICE_DESCRIPTOR_TYPE, /* bDescriptorType 设备描述符类型,这里是设备描述符为0x01*/ 0x00, 0x02, /* bcdUSB = 2.00 USB协议
6、USB枚举
a986096115的博客
08-29 581
7.1 USB枚举 USB的概念实在是太多了,只挑了一些重要的作为笔记还有这么多概念,实在是心态爆炸. USB枚举,每个USB设备上电都会经历的一段过程,其实就是USB的初始化,只有初始化完成了,其他USB主机才能知道你到底是做啥的,至于怎么去做,做的好不好那就是枚举成功之后的事情了. 7.1.1 枚举流程 枚举流程在USB2.0协议规范里面的9.1.2小节有提到过,如下所示。 When a USB device is attached to or removed from the USB, the ho
STM32的USB设备描述符
newzhpfree的博客
03-08 975
USB设备描述符
STM32 USB AUDIO 基础篇②——USB的VID和PID
小康师兄
08-13 4289
文章目录一、前文二、修改usbd_desc 一、前文 VID(Vender ID供应商识别码),由供应商向USB-IF(Implementers Forum 应用者论坛)申请,每一个供应商的VID是唯一。 PID(Product ID产品识别码),,PID是由供应商自行决定。 主机通过VID和PID来识别不同的设备,根据他们(以及设备的版本号),可以给设备加载或安装相应的驱动程序。 可以通过这个网址查看常见的VID和PID,http://www.linux-usb.org/usb.ids 二、修改usb
gu8ConfigDescriptor描述符详解
06-10
gu8ConfigDescriptor是一个USB配置描述符数组,用于描述USB设备的配置信息。它通常由USB设备的制造商在设备固件中定义,由USB主机在插入设备时读取。 USB配置描述符包含了USB设备的配置信息,包括配置的唯一标识符、配置的描述信息、配置所需的最大功率、以及该配置所包含的所有接口和其他描述符的信息。 以下是一个典型的USB配置描述符的格式: ``` typedef struct { uint8_t bLength; // 描述符长度 uint8_t bDescriptorType; // 描述符类型 uint16_t wTotalLength; // 描述符总长度 uint8_t bNumInterfaces; // 接口数目 uint8_t bConfigurationValue; // 配置唯一标识符 uint8_t iConfiguration; // 配置描述信息 uint8_t bmAttributes; // 配置属性 uint8_t bMaxPower; // 配置所需的最大功率 } USB_ConfigurationDescriptorTypeDef; ``` 其中,bLength字段表示该描述符的长度;bDescriptorType字段表示该描述符类型,这里应该为0x02,表示该描述符是一个配置描述符;wTotalLength字段表示该配置描述符及其后续的所有描述符的总长度;bNumInterfaces字段表示该配置所包含的接口数目;bConfigurationValue字段表示该配置的唯一标识符;iConfiguration字段表示该配置的描述信息的字符串索引;bmAttributes字段表示该配置的属性,包括是否需要供电、是否支持远程唤醒等;bMaxPower字段表示该配置所需的最大功率,单位为2mA。 在gu8ConfigDescriptor描述符数组中,每个USB配置描述符之后通常还会包括该配置所包含的所有接口的描述符和其他描述符,如字符串描述符、端点描述符等。这些描述符的总长度应该等于wTotalLength字段指定的长度。通过读取gu8ConfigDescriptor数组中的各个描述符USB主机可以了解到USB设备支持的配置信息、接口信息和传输方式等,从而选择最合适的驱动程序进行通信。
写文章

热门文章

  • 1.PCIe扫盲——PCIe简介 93640
  • STLINK V2安装使用详解 44141
  • MIPI接口简介 41588
  • PCIe传输速率和有效带宽计算方式 28214
  • STM32F4中USB与PC双向通信 28185

分类专栏

  • PCIe应用实战 付费 45篇
  • USB协议详解 40篇
  • FPGA 88篇
  • ZYNQ 17篇
  • MIPI 7篇
  • MicroBlaze 16篇
  • 算法 2篇
  • 汽车电子 3篇
  • PCI-E理论剖析 42篇
  • STM32F1 USB外设详解 5篇
  • CPU 3篇
  • 硬件 2篇
  • C++语法 12篇
  • STL模板库 5篇
  • C语言 9篇
  • MFC 24篇
  • STM32 21篇
  • OpenCV学习 6篇
  • 视频采集及图像处理 5篇
  • ATL 1篇
  • 杂谈 16篇
  • 感悟 22篇
  • windows驱动编程 2篇
  • WPF 4篇
  • QT 16篇
  • 视频教程 1篇

最新评论

  • SCSI协议及大容量存储命令详解

    Winson Zhong: 请问,U盘如何知道取哪块的数据给我呢,是在命令里面设置吗

  • USB协议详解第13讲(USB传输-控制传输及事务组成)

    htsht: 控制传输的一个事务为什么只能读8给字节呀,它的数据包不是只在低速传输下,才只能读8个字节吗?

  • USB协议详解第14讲(USB传输-同步传输及事务组成)

    htsht: IN/OUT不就是令牌嘛?在同步传输中表示用来读或者写的数据阶段

  • USB协议详解第13讲(USB传输-控制传输及事务组成)

    Alan....: 对应的硬件设备是Voyager M310P,可以抓多种log,但是蛮贵的

  • USB协议详解第13讲(USB传输-控制传输及事务组成)

    Alan....: USB ProtocolSuitesw

最新文章

  • 什么时候用增量式PID,什么时候用位置式PID
  • XAPP585框架详解-LVDS时钟恢复逻辑
  • PLLE2_ADV、MMCME2_ADV源语详解
2023年1篇
2022年84篇
2021年86篇
2020年108篇
2019年61篇
2018年17篇
2017年15篇
2016年38篇

目录

目录

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一个早起的程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或 充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

深圳SEO优化公司青浦区提供网站服务商优化价格商洛网站推广优化网站排名优化可以火7星细心昌吉网站排名优化网站优化软件利搜铜陵营销型网站优化平台灵璧县网站排名优化公司优化网站方法帮你火21星网站谷歌优化SEO多少费用昌平网站优化企业登封优化网站排名贵州网站长尾关键词优化遵义有效果的优化网站公司网站产品优化不要错过易速达临洮县网站seo优化排名清远哪里有网站seo优化白山网站优化浏览器网站优化策略高要网站搜索引擎优化公司专业网站怎么优化服务至上搜索引擎优化的网站是什么品牌网站优化报价靖江外贸网站优化优化手机网站关键简单网站优化公司哪家好重庆网站seo优化公司金堂网站优化专业公司哈尔滨优化网站方法seo网站优化策划网站搜索优化用金苹果歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化