12

我正在尝试编写 Java 代码,让我的 XOOM 通过 USB 到串行电缆与我们的嵌入式设备进行通信。

我使用了这段代码:

connection.controlTransfer(0x21, 34, 0, 0, null, 0, 0);
connection.controlTransfer(0x21, 32, 0, 0, new byte[] { (byte) 0x80,
                                0x25, 0x00, 0x00, 0x00, 0x00, 0x08 }, 7, 0);

我知道这是向 USB 设备发送设置请求。我不明白为什么requestType是0x21,为什么requestID是32、34等等。

根据这里的规范:http ://www.beyondlogic.org/usbnutshell/usb6.shtml#SetupPacket ,在标准设备请求、标准接口请求和标准端点请求中,requestType 都不是 0x21 并且 requestID 都不是32 或 34. 这些参数包括传输的数据缓冲区有什么解释吗?

4

1 回答 1

23

设置数据包中的第一个字节 (bmRequestType) 由 3 个字段组成。前 5 位(最低有效位)是接收方,接下来的 2 位是类型,最后一位是方向。

如果您的值为 0x21,则其二进制表示为 100001。如果将其拆分为各个字段,则为 0 01 00001,对应于主机到设备、类和接口,用于方向,类型和收件人字段。

所以这是一个被发送到特定接口的控制消息,该接口由一些标准的 USB 类定义。

既然您提到这是用于与 USB 到串行适配器通信,我将假设这可能被发送到通信接口,根据通信设备的 USB 类定义

根据该文档,bRequest 值 34 (0x22) 对应于 SET_CONTROL_LINE_STATE 消息,而 32 (0x20) 对应于 SET_LINE_CODING 消息(第 51 和 53 页),这似乎是串行设置/初始化的一部分设备。

这些消息中的每一个的详细信息在第 57 页和第 58 页进一步定义。

于 2012-05-06T05:08:19.290 回答