【问题标题】:UART SW and HW flow control, linuxUART软件和硬件流控制,linux
【发布时间】:2019-08-29 08:17:45
【问题描述】:

目前,我正在测试 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 精益者。

非常感谢。

【问题讨论】:

    标签: linux serial-port flow-control


    【解决方案1】:

    RS485 标准中不应有硬件流控制。
    由于 API 与 RS232C 标准共享,因此可以调用但不能有效工作。

    另外,你写的64字节FIFO是硬件(接口芯片)缓冲区,设备驱动也有软件缓冲区。缓冲区通常以千字节为单位。

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

    通过检查接收数据的格式,检查命令和响应的平衡和顺序,进行溢出等判断。

    【讨论】:

    • 是的。目前,API 与 RS232C 标准共享。我还检查了软件缓冲区,它仍然是 64 字节。我正在尝试比较输入和输出。感谢您的评论!
    猜你喜欢
    • 1970-01-01
    • 2017-07-23
    • 2012-04-17
    • 2014-01-30
    • 1970-01-01
    • 2020-07-14
    • 1970-01-01
    • 2018-03-02
    • 1970-01-01
    相关资源
    最近更新 更多