Как открыть последовательный порт в Linux, не меняя пин-код? - PullRequest
14 голосов
/ 23 февраля 2011

Posix требует изменения контакта RTS при открытии порта.Я хочу, чтобы этого избежать.

Ответы [ 3 ]

6 голосов
/ 13 февраля 2014

Я понятия не имею, почему вы хотите это сделать, но это можно сделать довольно легко, изменив драйвер ядра Linux для вашей последовательной консоли, чтобы он не переключал RTS. Например, для драйвера серии 8250 в drivers/tty/serial/8250/ вы можете изменить каждую запись в регистр MCR (UART_MCR), чтобы гарантировать, что бит 1 (маска UART_MCR_RTS) никогда не будет установлен.

Поскольку это абстракция в пользовательском пространстве, вам не повезло, если вы хотите сделать это без изменения драйвера ядра.

4 голосов
/ 25 ноября 2016

Имея ту же проблему, я бы попробовал, исправив драйвер ядра 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
}

и линия рукопожатия RTS больше не изменяется при open() вызове. Обратите внимание, что UART может больше не работать с аппаратным рукопожатием RTS / CTS, если загружен модифицированный драйвер ядра. Но вы все равно можете контролировать состояние линии рукопожатия RTS, позвонив, например, на телефон :*****

    int opins = TIOCM_RTS;
    ioctl(tty_fd, TIOCMBIC, &opins);

Я проверял это с помощью команды Ctrl+A+G picocom 2.3a, работающей с 64-битной версией Kubuntu 16.04 и адаптером usb uart на основе Ftdi FT2232H .

Вы можете найти более подробную информацию по этой теме здесь .

0 голосов
/ 23 февраля 2011

вызов fopen("/dev/ACM0", "r") не требует от вас никаких действий :) Однако вы можете не получить ожидаемые данные.

...