Linux串口1.5停止位

标签 linux serial-port posix

linux串口可以使用1.5位停止位吗?看来,这不受 POSIX 支持。我查看了 pyserial 的源代码,其中 1.5 个停止位在 POSIX 接口(interface)中被解释为 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 位意味着

stop bits = 1.5 for 5 bit words or 2 for 6, 7 or 8 bit words

如果您有不同的 UART,则必须查看内核源代码并查看 POSIX 标志如何传递到硬件,以及对线路的影响。

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

相关文章:

linux - 向用户授予权限/更改所有者

c++ - Linux 上的用户界面

python - pyserial - 如何读取从串行设备发送的最后一行

c# - 如何在 Queue<byte> 中搜索字节并提取数据包?

c - 获取系统 api 调用执行的命令的 pid

c - POSIX 多线程和信号处理

c - C 中的动态数组用于内存映射

linux - 使用 PSQL 从 Redshift 导出数据时遇到问题

C#串口检查设备是否连接

c++ - fork 进程一直监听服务器的端口