UART 软件和硬件流控制,linux
UART SW and HW flow control, linux
目前正在测试2个RS485串口之间的流控(只接Rx和RX,Tx和Tx,DTS/CTS没接)
标志设置(介于get和set属性之间)
- 硬件流量控制:
tty.c_cflag |= CRTSCTS; // RTS/CTS
tty.c_iflag &= ~(IXOFF|IXON|IXANY);
- 软件流量控制:
tty.c_cflag &= ~CRTSCTS;
tty.c_iflag |= (IXOFF|IXON|IXANY);
我假设如果我将 UART1 和 UART2 都设置为硬件流控制并且波特率很高(例如 460800 bps)或者以更高的波特率写入 UART1,从 UART2 以较低的波特率读取()- rate, FIFO (currently is 64byte) will overflow as same kernel send some notification.
但实际上,总是write()和read()成功。谁能告诉我如何观察缓冲区溢出的建议?
抱歉,如果我的问题有点乱,因为我是新 linux 瘦者。
非常感谢。
RS485标准中应该没有硬件流控。
由于 API 与 RS232C 标准共享,因此可以调用但不能有效工作。
还有,你写的64字节的FIFO是硬件(接口芯片)缓冲区,设备驱动也有软件缓冲区。缓冲区通常以千字节为单位。
难怪即使是高速,短数据大小的发送和接收也能正常结束。
通过检查接收数据的格式,检查命令和响应的平衡和顺序来进行溢出等判断。
目前正在测试2个RS485串口之间的流控(只接Rx和RX,Tx和Tx,DTS/CTS没接)
标志设置(介于get和set属性之间)
- 硬件流量控制:
tty.c_cflag |= CRTSCTS; // RTS/CTS tty.c_iflag &= ~(IXOFF|IXON|IXANY);
- 软件流量控制:
tty.c_cflag &= ~CRTSCTS; tty.c_iflag |= (IXOFF|IXON|IXANY);
我假设如果我将 UART1 和 UART2 都设置为硬件流控制并且波特率很高(例如 460800 bps)或者以更高的波特率写入 UART1,从 UART2 以较低的波特率读取()- rate, FIFO (currently is 64byte) will overflow as same kernel send some notification.
但实际上,总是write()和read()成功。谁能告诉我如何观察缓冲区溢出的建议?
抱歉,如果我的问题有点乱,因为我是新 linux 瘦者。
非常感谢。
RS485标准中应该没有硬件流控。
由于 API 与 RS232C 标准共享,因此可以调用但不能有效工作。
还有,你写的64字节的FIFO是硬件(接口芯片)缓冲区,设备驱动也有软件缓冲区。缓冲区通常以千字节为单位。
难怪即使是高速,短数据大小的发送和接收也能正常结束。
通过检查接收数据的格式,检查命令和响应的平衡和顺序来进行溢出等判断。