可以在Linux的串行端口上使用1.5个停止位吗?似乎POSIX不支持此功能。我查看了pyserial的源代码,其中POSIX接口(interface)中的1.5个停止位被解释为2个停止位。在串行源支持代码的单声道源代码中,仅处理了1.5个停止位。 Linux中是否还有另一个非POSIX可能性/驱动程序来支持1.5个停止位?也许使用FTDI或Silabs驱动程序?

最佳答案

什么是串行 Controller 和所需的字长?通常,使用5个位字(CS5),设置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表示



如果使用其他UART,则必须查看内核源,并查看POSIX标志如何传递到硬件,以及对线路的影响。

关于linux - Linux串行端口1.5停止位,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46905431/

10-13 03:54