上一次说到把配置描述符返回给主控器那里了,现在接着下来,就会收到主控器发来字符串描述符。如果在设备描述符那里指定没有字符串描述的话,在这里是不会收到字符串描述符的。由于我在设备描述符里指定有字符串描述符的偏移地址,因此,就收到主控器发出请求字符串描述符。收到的数据如下:
80 06 00 03 00 00 FF 00
bmRequestType是80,表示方向USB设备发送给主控器,接收设备是USB设备。
bRequest是06,表示这是获取描述符。GET_DESCRIPTOR 6
wValue是00 03。低字节表示偏移地址00,高字节表示描述符的类型,如下:
STRING 3
wIndex是00 00。
wLength是FF 00。它表示返回描述符的长度。这里是256个字节。
因此,这个获取字符串描述符,就是从字符串描述内存里,0偏移地址开始的位置读取第一个字符串描述符返回给主控器。接着就返回下面的数据给主控器:
04 03 09 04
上面的数据是按字符串描述符来组织的,它的结构,我定义结构如下:
typedef struct _USB_STRING_DESCRIPTOR {
BYTE bLength;
BYTE bDescriptorType;
WORD bString;
} USB_STRING_DESCRIPTOR;
bLength是所有数据的长度。在这里是4。
bDescriptorType是描述类型,这里字符串描述符,所以它是3。
bString是可变的字符数组。不超过254个应都可以的,并且它是使用UNICODE编码的字符串。在这里是09 04,这是美国英语的标识,0x0409。如果想输入中文的标识,只要改为0x0804就可以了。
通过这个字符串描述符,主控器就知道字符串描述符是使用什么语言说明的了,这样就可以支持全世界的语言标识。
关键字:USB协议 字符串 描述符
引用地址:
USB协议深入分析 字符串描述符
推荐阅读最新更新时间:2024-03-16 14:28
在字符串中搜索标记--labview字符串函数之一
最近在做的项目需要用到分割字符串中的有效数据,而有效数据的分割一般是两个标识符中间的。一直未能找到合适的字符串函数来解析出来有效数据,而昨天恰恰看到了这样一个字符串函数 在字符串中搜索标记。 这个函数的描述是这样的: 其中标记是连接至函数的分隔符或运算符能够识别的文本片段,在这里就是指我上面所谓的有效数据段。而分隔符是上面所说的标识符。 其他引脚的说明如下: 允许空标记?确定函数在遇到多个相邻分隔符时是否能识别标记。如允许空标记?的值为FALSE(默认值),多个相邻的分隔符可以分隔输入字符串中的两个标记。如允许空标记?的值为TRUE,在每个相邻分隔符对之间都将返回空
[测试测量]
在STM32中使用printf发送字符串到串口
问题:在使用STM32调试时,经常使用串口发送信息,为了方便调试与串口发送信息,用printf()函数实现通过串口打印信息。 方法一: 1.添加包含printf()函数的头文件:#include “stdio.h” 2.重写 stdio.h 头文件中的 int fputc(int ch, FILE *f) 函数 int fputc(int ch, FILE *f) { while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET); //等待先前的字符发送完成 USART_SendData(USART1, (uint8_t) ch); //发送字
[单片机]
MSP430单片机USART串口发送字符和字符串
在MSP430单片机的官方历程中有使用串口中断发送字符以及字符串的程序,但是移植性不高,我专门写了两个函数,用于发送单个字符合字符串,不需要使用中断,供大家参考。 /********************************************** *程序描述:单片机的P3.4、P3.5作为串口发送字符和字符串 *作者 :Zhenhua Liu *时间 :2017.11.01 23:00 ***********************************************/ #include msp430x14x.h #define uchar unsigned char uchar DATA = hel
[单片机]
基于OHCI协议的S3C2440 USB Host Driver之协议介绍(二)
一 HCD的职责: 1.HCD负责HC的操作。 HCD可以直接与HC的可操作寄存器通信,且在HCCA中建立中断ED表头指针。HCD维护HC的状态,表处理指针,表处理使能,中断使能。 2.带宽分配。 HCD负责对USB访问进行调度。HCD给每一个周期端点分配一定可用的带宽。如果没有足够的带宽可用,一个新连接的周期端点不允许访问总线。 一部分带宽分给非周期传输。这会确保在每帧里一定量的批量和控制传输会发生。每帧是1ms。 每帧的开始,HC发起SOF给USB总线。HC紧接着服务非周期列表。然后服务周期列表。还有剩余时间的话,再次服务非周期列表。 3列表管理。 USB传输机制以通过连接ED表上的TD。HCD
[单片机]
labview的数据类型----通过类型描述符提取控件名称(LABEL)
通过分析类型描述符结构,我们已经得到的类型描述符的头部信息,我们知道,LV的存储结构中同时包括了控件的标签信息,看看如何能通过描述符得到控件的标签.OPENG中提供了这个功能,我们跟踪一下看看它实现的方法: 首先根据类型描述符头部信息中的类型码对LV的数据类型进行分类,每个CASE中的数据存储结构都是类似的. 先看看第一个CASE: 条件是: I8 .. CXT , Boolean , Variant ,这说明从I8--- CXT ,包括BOOLEAN VARIANT类型描述符的结构都是类似的.看看I8 和BOOLEAN的类型描述符的内容,我们分析一下. I8和BOOLEAN除了类型码不同(0X01,0X21)
[测试测量]
基于STM32单片机发送字符串的函数
最近由于要调试一个SMS发送短信的模块,该模块需要发送一系列AT指令,且需要字符串发送,但是STM32官方给的usart.c中并没有直接发送字符串的函数,因此写了一个发送字符串的函数。 其实发送字符串的本质还是发送一个个字符,所以只需在字符串结束标志之前,循环发送字符即可。不罗嗦,上程序。 //程序功能:利用串口发送一个字符串 // 参数:USARTx USART编号 可取 USART1、USART2、USART3、USART4、 USART5(STM32F103ZET6) str 需要发送的字符串 #include “stm32f10x.h” void Usart_SendString(USART_TypeDef* US
[单片机]