乐鑫技术交流
直播中

kasdlak

9年用户 1312经验值
擅长:光电显示
私信 关注
[问答]

请问usb host如何获得USB设备的描述字符串?

在usb_descriptor.h中有函数声明:                                                                                                                                                函数声明.PNG (25.1 KiB) Viewed 3594 times                                                                                                        
但是并没有对应的函数定义。

请问如何根据index、langid来得到描述符字符串?

比如我的USB设备为:
---------------------- Device Descriptor ----------------------
bLength : 0x12 (18 bytes)
bDescriptorType : 0x01 (Device Descriptor)
bcdUSB : 0x200 (USB Version 2.0) -> but device is Full-Speed only
bDeviceClass : 0x00 (defined by the interface descriptors)
bDeviceSubClass : 0x00
bDeviceProtocol : 0x00
bMaxPacketSize0 : 0x08 (8 bytes)
idVendor : 0x05E0 (Zebra Technologies)
idProduct : 0x1200
bcdDevice : 0x0201
iManufacturer : 0x01 (String Descriptor 1)
Language 0x0409 : "ᄅSymbol Technologies, Inc, 2002"
iProduct : 0x02 (String Descriptor 2)
Language 0x0409 : "Symbol Bar Code Scanner"
iSerialNumber : 0x03 (String Descriptor 3)
Language 0x0409 : "S/N:C8820020FD115541B46BDB1CBA3D5E16 Rev:NBRPPAAQ3"
bNumConfigurations : 0x01 (1 Configuration)
Data (HexDump) : 12 01 00 02 00 00 00 08 E0 05 00 12 01 02 01 02 ................
03 01 ..

想要获得"Symbol Bar Code Scanner"这个字符串。
尝试增加如下打印:                                                                                                                                                尝试打印.PNG (54.52 KiB) Viewed 3594 times                                                                                                        
得到乱码:                                                                                                                                                得到乱码.PNG (52.01 KiB) Viewed 3594 times                                                                                                        

回帖(1)

从未拥有

2024-6-6 18:16:50
要获取USB设备的描述字符串,您需要遵循以下步骤:

1. 初始化USB主机控制器:首先,您需要初始化USB主机控制器,以便它可以与USB设备进行通信。这通常涉及到配置硬件和设置必要的寄存器。

2. 枚举USB设备:在初始化主机控制器之后,您需要枚举连接到主机的USB设备。这包括获取设备的地址、速度和类代码等信息。

3. 获取设备描述符:在枚举设备之后,您可以使用USB主机控制器的函数来获取设备的描述符。描述符包含了设备的详细信息,例如制造商、产品ID等。

4. 解析描述字符串:在获取设备描述符之后,您可以解析描述字符串。描述字符串通常以Unicode编码存储,因此您需要将其转换为可读的格式。

在`usb_descriptor.h`头文件中,您可能会找到类似于以下的函数声明,用于获取USB设备的描述字符串:

```c
uint8_t USB_GetDescriptor(USB_Setup_TypeDef *pSetup, uint8_t *pDesc, uint16_t *pLen);
```

这个函数通常接受以下参数:

- `pSetup`:指向USB设置请求结构体的指针,其中包含了请求类型、请求号和语言ID等信息。
- `pDesc`:指向用于存储描述字符串的缓冲区的指针。
- `pLen`:指向一个变量的指针,该变量用于存储返回的描述字符串的长度。

要使用这个函数,您需要按照以下步骤操作:

1. 准备一个`USB_Setup_TypeDef`结构体,设置请求类型为`USB_REQ_GET_DESCRIPTOR`,请求号为`USB_REQ_GET_DESCRIPTOR`,以及语言ID。

2. 准备一个缓冲区,用于存储返回的描述字符串。

3. 调用`USB_GetDescriptor`函数,传入上述参数。

4. 检查函数返回值,如果成功,从缓冲区中获取描述字符串。

5. 将描述字符串从Unicode编码转换为可读的格式(例如UTF-8或ASCII)。

请注意,具体的函数名称和参数可能会因您使用的USB主机控制器和库而有所不同。因此,请参考您所使用的库的文档以获取详细信息。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分