WebUSB和FTDI232

时间:2018-02-20 16:29:46

标签: webusb

我尝试连接到串口USB接口(FT232)但无法找到有关如何配置它的任何内容......

我得到了什么:

我需要什么:

我需要使用WebUSB连接到此接口,发送消息,阅读消息。

我取得的成就:

现在,我可以连接到界面并且"阅读"东西。

我的问题:

我无法在网上找到关于如何配置USB接口的任何内容,串口配置必须是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));

我可以从"我所取得的成就" section是单个字符,因为序列配置不正确。

虽然我调整了它,但是我已经用另一个软件打开了串口,配置了它,关闭了其他软件,然后用webusb连接到USB接口并读取消息。这很有效,但复杂的方式......

任何帮助都会非常感激:)

2 个答案:

答案 0 :(得分:2)

根据datasheet您的TTL-232RG-VSW5V-WE电缆包含FT232R芯片。数据表是here。我希望能够发现该芯片支持的协议的描述,但我找到的只是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函数根据请求的波特率计算。

希望这是阅读代码并找出所需内容的良好开端。

答案 1 :(得分:-1)

非常感谢。它像一种魅力。 我想出9600的波特率:

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