我尝试连接到串行 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));
Run Code Online (Sandbox Code Playgroud)
我可以从“我所取得的成就”部分中读到的是单个字符,因为串行配置不正确。
我对它进行了一些调整,使其正常工作,我用另一个软件打开了串行端口,对其进行了配置,关闭了其他软件,然后使用 webusb 连接到 USB 接口并读取消息。这有效,但是太复杂了......
任何帮助将非常感激 :)
根据数据表,您的 TTL-232RG-VSW5V-WE 电缆包含 FT232R 芯片。其数据表在这里。我希望找到该芯片支持的协议的描述,但我找到的只是其专有驱动程序的文档。
另一方面,我知道Linux支持这些芯片,因此内核驱动程序中必须有用于设置波特率的代码。有问题的函数位于ftdi_sio.cchange_speed()中。
由此看来,您需要发送的控制传输是,
device.controlTransferOut({ requestType: 'vendor',
recipient: 'device',
request: 3 /* FTDI_SIO_SET_BAUDRATE_REQUEST */,
value: divisor_value,
index: divisor_index });
Run Code Online (Sandbox Code Playgroud)
divisor_value和divisor_index是芯片时钟分频器的低16位和高16位,该分频器是由函数ftdi_232bm_baud_to_divisor根据请求的波特率计算出来的。
希望这是阅读代码并弄清楚您需要什么的良好开端。
| 归档时间: |
|
| 查看次数: |
2636 次 |
| 最近记录: |