是否可以在linux中使用1.5个停止位作为串口?似乎POSIX不支持这一点。我查看了pyserial的源代码,其中1.5个停止位被解释为POSIX接口中的2个停止位。并且在串行端口支持代码中的单声道源代码中,1.5停止位根本就不被处理。 Linux中还有另一个非POSIX可能性/驱动程序支持1.5停止位吗?也许使用FTDI或silabs驱动程序?
答案 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标志传递给硬件,以及对线路的影响。