Linux串口1.5停止位

时间:2017-10-24 08:17:49

标签: linux serial-port posix

是否可以在linux中使用1.5个停止位作为串口?似乎POSIX不支持这一点。我查看了pyserial的源代码,其中1.5个停止位被解释为POSIX接口中的2个停止位。并且在串行端口支持代码中的单声道源代码中,1.5停止位根本就不被处理。 Linux中还有另一个非POSIX可能性/驱动程序支持1.5停止位吗?也许使用FTDI或silabs驱动程序?

1 个答案:

答案 0 :(得分:1)

串行控制器和所需的字大小是什么?通常,对于5位字(CS5),set CSTOPB标志表示发送1.5个停止位,而不是一个或两个。

例如,对于8250 UART,Linux执行此操作(在drivers/tty/serial/8250/8250_port.c中):

static unsigned char serial8250_compute_lcr(struct uart_8250_port *up,
                                            tcflag_t c_cflag)
{
        unsigned char cval;

        switch (c_cflag & CSIZE) {
        case CS5:
                cval = UART_LCR_WLEN5;
                break;
        case CS6:
                cval = UART_LCR_WLEN6;
                break;
        case CS7:
                cval = UART_LCR_WLEN7;
                break;
        default:
        case CS8:
                cval = UART_LCR_WLEN8;
                break;
        }

        if (c_cflag & CSTOPB)
                cval |= UART_LCR_STOP;
[…]
        return cval;
}

UART_LCR_STOP定义为0x04

According to this documentation of the 8250 UART,LCR寄存器中的第2位意味着

  

对于5位字停止位= 1.5或对于6,7或8位字停止位

如果你有一个不同的UART,你必须查看内核源代码,看看如何将POSIX标志传递给硬件,以及对线路的影响。