1

我正在研究串行端口通信。要求是使用javascript通过串口与硬件通信。我现在正在研究 chrome WEB -USB-API

使用此 API,我能够连接到设备。现在我想向连接的设备发送命令,有人可以指导我吗?

device.controlTransferOut({requestType: 'class',recipient:'interface',request: 0x22,value: 0x01,index: 0x02})

上面的代码在 web-usb-api 文档页面上给出,但无法通过它发送任何命令。

任何与 javascript 和串行端口通信相关的指导都会非常有帮助。

4

1 回答 1

3

USB 协议和 USB CDC-ACM(“串行”的一个花哨的名称)协议的一些背景知识作为上下文是必要的:控制传输发送和接收少量数据,通常用于启用和禁用设备功能。在上面的代码片段中发送的控制传输来自 USB CDC-ACM 协议,并且是一个 SET_CONTROL_LINE_STATE 命令。当发送到实际的 USB 串行适配器时,它会告诉适配器在串行线上断言 DTR 信号,这允许连接的串行设备检测主机已准备好接收数据。在仅模拟 USB 串行适配器的设备中,例如本示例所针对的设备,它只是表明所有主机软件都已初始化并且设备已准备好发送数据。

现在,有了这个背景,应该清楚这不是您将自己的命令发送到设备的方式。设备期望它们作为虚拟串行端口上的数据发送,而不是作为关于其状态的控制信号。为此,您要使用该transferOut()功能。这接受两个参数,第一个是发送数据的端点号,第二个是数据本身。在博客文章的示例中,仅transferIn()使用了该函数。在此示例中,它从端点 5 读取 64 个字节。虽然文章中没有显示,但用于将数据发送回设备的端点是端点 4。对于您自己的设备,您应该检查 USB 设备描述符以确定适当的端点用于发送和接收数据。这些描述符可在configurationsUSBDevice 对象的属性。

于 2018-06-21T14:55:36.040 回答