1

我正在尝试将与 USB 通信到 TTL 设备的 .Net 代码转换为 boost::asio::serial_port 代码,以便能够在 Linux 下运行。我已经做了所有事情,但是有一条线我无法转换:

   port.Handshake = Handshake.RequestToSendXOnXOff;

我发现我们应该使用asio::serial_port_base::flow_control,但它的模式只有none,softwarehardware。我应该怎么做才能使我的代码与 .Net 代码相同?

谢谢

4

1 回答 1

0

您希望软件和硬件都与现有的相匹配。我会假设这些值可以或一起来激活这两种控制。

串行端口可以发生两种握手。第一种使用一对物理信号线,称为 RTS(请求发送)和 CTS(清除发送)。您应该能够在 RS232 连接器和电缆引出线中看到这些线。由于这些是必须连接的物理线路,因此这种握手将是“硬件”。另一种方法涉及发送特定字节(XOn 和 XOff)以指示缓冲区何时已满或设备何时准备好再次接收。大多数设备或驱动程序现在自动提供此功能,但由于它是使用标准发送/接收线路完成的,因此它是“软件”。

随着 USB“串行端口”的兴起,这种区别变得不那么有意义了,因为它在 USB 层丢失了。我在我的一些设备上使用的 USB 转串行芯片确实为终端设备重新创建了实际信号,但鉴于 USB 连接中固定数量的引脚,我假设所有握手都是通过 USB 层数据包完成的。

于 2013-06-19T03:49:39.220 回答