UART SW和HW流控制,Linux

时间:2019-04-08 08:24:00

标签: linux serial-port flow-control

当前,我正在测试2个RS485 UART端口之间的流控制(仅连接Rx和RX,Tx和Tx,未连接DTS / CTS)。

标记设置(在get和set属性之间)

  • 硬件流量控制:

tty.c_cflag | = CRTSCTS; // RTS / CTS tty.c_iflag&=〜(IXOFF | IXON | IXANY);

  • SW流控制:

tty.c_cflag&=〜CRTSCTS; tty.c_iflag | =(IXOFF | IXON | IXANY);

我假设如果我将UART1和UART2都设置为硬件流控制并且波特率较高(例如460800 bps),或者以较高的波特率写入UART1,则以较低的波特率从UART2中读取(), FIFO(当前为64byte)将溢出,就像内核发送一些通知一样。

但是实际上,它总是成功完成write()和read()。谁能给我建议如何观察者缓冲区溢出?

对不起,如果我的问题是有点转储,因为我是新的Linux精简用户。

非常感谢。

1 个答案:

答案 0 :(得分:0)

RS485标准中应该没有硬件流控制。
由于该API与RS232C标准共享,因此可以调用该API,但是它无法有效运行。

此外,您编写的64字节FIFO是硬件(接口芯片)缓冲区,而设备驱动程序也具有软件缓冲区。缓冲区通常以千字节为单位。

难怪即使是高速传输,短数据大小的发送和接收也能正常结束。

通过检查接收到的数据的格式以及检查命令和响应的平衡和顺序来执行诸如溢出之类的判断。