WebUSB 和 FTDI232

标签 webusb

我尝试连接到串行 USB 接口(interface) (FT232),但找不到任何有关如何配置它的信息...

我有什么:

我需要什么:

我需要使用WebUSB连接到这个接口(interface),发送消息,读取消息。

我取得的成就:

现在,我可以连接到该界面并“读取”某些内容。

我的问题:

我在网上找不到任何关于如何配置 USB 接口(interface)的信息,串行端口配置必须是 57600 波特/秒、E、8、1,但我找不到任何关于如何配置这些值的信息...

请参阅以下代码,根据我的理解,我必须在 controlTransferOut 中放入一些值,但我找不到要放入的内容以及原因。

device = await navigator.usb.requestDevice({ 'filters': [] });
console.log(device);

await device.open();
if (device.configuration === null) {
    await device.selectConfiguration(1);
}
await device.claimInterface(0);
await device.selectAlternateInterface(0, 0);
await device.controlTransferOut({ /* WHAT DO I PUT HERE?? */ });
let result = await device.transferIn(1, 64);
console.log((new TextDecoder).decode(result.data));

我可以从“我所取得的成就”部分中读到的是单个字符,因为串行配置不正确。

我调整了它,但为了让它工作,我用另一个软件打开了串行端口,配置了它,关闭了其他软件,然后用 webusb 连接到 USB 接口(interface)并读取消息。这有效,但是太复杂了......

任何帮助将非常感激:)

最佳答案

根据datasheet您的 TTL-232RG-VSW5V-WE 电缆包含 FT232R 芯片。其数据表为 here 。我希望找到芯片支持的协议(protocol)的描述,但我发现的只是 documentation对于他们的专有驱动程序。

另一方面,我知道Linux支持这些芯片,因此内核驱动程序中必须有用于设置波特率的代码。有问题的函数是 ftdi_sio.c 中的 change_speed() .

由此看来,您需要发送的控制传输是,

device.controlTransferOut({ requestType: 'vendor',
                            recipient: 'device',
                            request: 3 /* FTDI_SIO_SET_BAUDRATE_REQUEST */, 
                            value: divisor_value,
                            index: divisor_index });

divisor_valuedivisor_index是芯片时钟分频器的低16位和高16位,由ftdi_232bm_baud_to_divisor函数根据波特率计算出来要求的费率。

希望这是阅读代码并弄清楚您需要什么的良好开端。

关于WebUSB 和 FTDI232,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48889874/

相关文章:

google-chrome - "Failed to execute ' 打开 ' on ' USB设备 ': Access denied."

windows - Webusb:尝试在 Windows 上打开打印机时访问被拒绝

javascript - WebUSB 按 deviceClass 和 deviceSubClass 过滤

javascript - Web 串行 API - 未捕获( promise )DOMException : Failed to open serial port/required member baudRate is undefined

javascript - 使用javascript将DataView对象转换为位图

javascript - 如何从 webusb 响应状态 : "babble" 中恢复

javascript - Webusb API navigator.usb.requestDevice

python - USB : usb_device_handle_win. cc:1020 在 Windows10 上使用 Selenium 的 ChromeDriver v87/Chrome v87 无法从节点连接错误中读取描述符

javascript - WebUsb 上的速度 1.2 mb/秒正常吗?