小智 6
我不知道你为什么要这样做,但这可以很容易地通过修改串行控制台的linux内核驱动程序来完成,因此它不会切换RTS.例如,对于8250系列驱动程序,drivers/tty/serial/8250/
您可以更改每次写入MCR寄存器(UART_MCR)以确保从未设置位1(屏蔽为UART_MCR_RTS).
由于它是在用户空间中抽象出来的,如果你想在不修改内核驱动程序的情况下这样做,那你就不走运了.
遇到同样的问题,我会通过修补内核驱动程序来尝试一下ftdi_sio
。您只需取消注释一小段代码,ftdi_dtr_rts()
如下所示:
static void ftdi_dtr_rts(struct usb_serial_port *port, int on) {
...
/* drop RTS and DTR */
if (on)
set_mctrl(port, TIOCM_DTR /*| TIOCM_RTS*/); // <<-- HERE
else
clear_mctrl(port, TIOCM_DTR /*| TIOCM_RTS*/); // <<-- and HERE
}
Run Code Online (Sandbox Code Playgroud)
并且 RTS 握手线不再在open()
调用时更改。请注意,只要加载了修改后的内核驱动程序,uart 可能就不再与 RTS/CTS 硬件握手一起工作。但您仍然可以通过调用以下命令手动控制 RTS 握手线的状态:
int opins = TIOCM_RTS;
ioctl(tty_fd, TIOCMBIC, &opins);
Run Code Online (Sandbox Code Playgroud)
我使用Ctrl+A+G
picocom 2.3a 的命令对此进行了测试,运行 Kubuntu 16.04 64 位和基于Ftdi FT2232H的 USB uart 适配器。
您可能会在此处找到有关此主题的更多详细信息。
归档时间: |
|
查看次数: |
1524 次 |
最近记录: |