PL2303, присоединенный к ttyUSB0-> Изменение это к ttyS*?

Я хочу считать единственные строки состояния (txd, dtr...) преобразователя PL2303 USB2RS232 с statserial. Я уже присоединил свой PL2303 к ttyUSB0 порту. Но считывать данные, мне нужна команда statserial, который просто принимает ttyS* (если я пытаюсь использовать его с ttyUSB*, "разрешение отклонило" apperars). Как можно изменить ttyUSB* на ttyS* "адрес"??

lsusb:

gernot@gernot-Lenovo-G505s:~$ lsusb
Bus 002 Device 002: ID 0bda:0129 Realtek Semiconductor Corp. RTS5129 Card Reader Controller
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 004: ID 174f:147b Syntek 
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 003 Device 004: ID 0cf3:3004 Atheros Communications, Inc. 
Bus 003 Device 002: ID 062a:4101 Creative Labs 
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 006 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 005 Device 002: ID 067b:2303 Prolific Technology, Inc. PL2303 Serial Port
Bus 005 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

dmesg: 

...

[   53.186869] ISO 9660 Extensions: Microsoft Joliet Level 3
[   54.986337] ISOFS: changing to secondary root
[   76.485704] usb 5-1: new full-speed USB device number 2 using xhci_hcd
[   76.522777] usb 5-1: New USB device found, idVendor=067b, idProduct=2303
[   76.522786] usb 5-1: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[   76.522791] usb 5-1: Product: USB-Serial Controller
[   76.522795] usb 5-1: Manufacturer: Prolific Technology Inc.
[   76.557641] usbcore: registered new interface driver usbserial
[   76.557658] usbcore: registered new interface driver usbserial_generic
[   76.557668] usbserial: USB Serial support registered for generic
[   76.559702] usbcore: registered new interface driver pl2303
[   76.559719] usbserial: USB Serial support registered for pl2303
[   76.560192] pl2303 5-1:1.0: pl2303 converter detected
[   76.588044] usb 5-1: pl2303 converter now attached to ttyUSB0

...

Спасибо за справку!

Обновление: кажется, что я не был членом dialout группы. Я добавил своего пользователя к тому использованию группы sudo usermod -a -G dialout <username>

После этого у меня было разрешение получить доступ к USB-портам и Последовательным портам. Теперь терминальные программы как работа moserial. Но я все еще не могу получить доступ к использованию строк состояния statserial. Вместо этого я получаю то сообщение:

gernot@gernot-Lenovo-G505s:~$ statserial ttyUSB0
statserial: can't open device `ttyUSB0': No such file or directory

Обновление 2: Мне удалось заставить statserial работать (смысл этого потока выйдет из строя, я предполагаю): Сначала необходимо сбросить порт и затем установить жесткую ссылку на ttyS*-port с более высоким количеством, чем количество стандартных портов:

sudo rm /dev/ttyS40
sudo ln /dev/ttyUSB0 /dev/ttyS40 

Но как я могу скопировать данные, отображенные в терминале в какой-либо объект, который я могу считать с, самодельным кодом? И почему statserial-инструмент реагирует так медленно на измененные staus строки?

4
задан 25 May 2014 в 19:37

3 ответа

Ваша первая проблема (полномочия устройства) была устранена путем добавления пользователя к корректной группе.

Ваш второй выпуск (путь устройства), кажется, что Вы не используете весь путь устройства. От man statserial:

дополнительный параметр имени устройства является полным именем файла устройств для рассматриваемого последовательного порта. Если не определенный, значение по умолчанию взято от МОДЕМА переменной среды, если установлено, иначе/dev/cua1.

, Таким образом, необходимо сделать statserial /dev/ttyUSB0

(я проверил, источник для проверки этого корректен, он буквально делает fd = open(device,...), где устройство является argv [x])

Для универсальной информации о программировании последовательного порта, см. ПРАКТИЧЕСКОЕ РУКОВОДСТВО Последовательного программирования . Можно посмотреть на источник statserial с apt-get source statserial (это - очень простая программа, скомпилированная из единственного файла statserial.c, который является 195 строками долго).

обновление является медленным, потому что statserial только опрашивает последовательный порт каждую секунду, основной цикл:

  for (;;) {

    /* get modem status info */ 
    status = ioctl(fd, TIOCMGET, &arg);
    if (status != 0) {
      perror("statserial: TIOCMGET failed");
      exit(1);
    }

...

    printw("Device: %s\n\n", device);
    printw("Signal  Pin  Pin  Direction  Status  Full\n");
    printw("Name    (25) (9)  (computer)         Name\n");
    printw("-----   ---  ---  ---------  ------  -----\n");
    printw("FG       1    -      -           -   Frame Ground\n");
    printw("TxD      2    3      out         -   Transmit Data\n");
    printw("RxD      3    2      in          -   Receive  Data\n");
    printw("RTS      4    7      out         %1d   Request To Send\n", !!(arg & TIOCM_RTS));
    printw("CTS      5    8      in          %1d   Clear To Send\n", !!(arg & TIOCM_CTS));
    printw("DSR      6    6      in          %1d   Data Set Ready\n", !!(arg & TIOCM_DSR));
    printw("GND      7    5      -           -   Signal Ground\n");
    printw("DCD      8    1      in          %1d   Data Carrier Detect\n", !!(arg & TIOCM_CAR));
    printw("DTR     20    4      out         %1d   Data Terminal Ready\n", !!(arg & TIOCM_DTR));
    printw("RI      22    9      in          %1d   Ring Indicator\n", !!(arg & TIOCM_RNG));
    refresh();

    /* break out if -n option was used */
    if (n_option)
      exit(0);

    /* delay 1 second between loops */
    sleep(1);
  }

, Если бы Вы делаете какую-либо серьезную работу с последовательными портами, я настоятельно рекомендовал бы, чтобы Вы получили реальную карту последовательного порта (плата PCI с контроллером RS232 на ней). Адаптеры USB не достаточно надежны, особенно если Вы свяжетесь со старыми аппаратными средствами, Вы найдете, что они не воспроизводят синхронизации сигнала точно, которые вызовут проблемы с некоторыми устройствами. Другая типичная проблема состоит в том, что последовательные порты USB не реализуют (или плохо реализуют), аппаратные средства квитирование РТС/CTS, и таким образом закончите тем, что были несовместимыми со старыми устройствами последовательного порта. Однако PL2303 является одними из лучших микросхем и должен работать с большинством устройств.

4
ответ дан 17 November 2019 в 14:29

Я не знаю о statserial (и я знаю, что это - старый вопрос), но если Вы хотите иметь название отдельного устройства, можно отбросить файл в /etc/udev/rules.d/ как этот (мой называют 98-devicename.rules):

SUBSYSTEM=="tty" ATTRS{idVendor}=="067b" ATTRS{idProduct}=="2303" SYMLINK+="devicename%n" MODE:="0666"

Это будет соответствовать идентификатору/поставщику USB и позволять всем пользователям доступу, не будучи в dialout группа (MODE). Это также создаст символьную ссылку /dev/devicename0 -> /dev/ttyUSB0 принятие его является первым из обоих. Если бы у Вас было другое устройство с другим чипсетом USB (например, Сайпрес один) уже включенный, то это могло бы быть первым из этого чипсета, таким образом, /dev/devicename0 -> /dev/ttyUSB1. При наличии udev обработайте символьные ссылки, Вы не должны волноваться об этом включаемый в другой порт и т.д. - devicename0 должно всегда быть первое устройство, которое использует тот чипсет.

Для нахождения большего количества вещей, которым можно соответствовать посмотрите udevadm info -a -p $(udevadm info -q path -n /dev/ttyUSB0).

1
ответ дан 17 November 2019 в 14:29

Что касается того, как подключить пользовательский код к последовательным портам, так как я обычно использую Python, я рекомендовал бы проверить pySerial библиотеку https://wiki.python.org/moin/PySerial

0
ответ дан 17 November 2019 в 14:29

Другие вопросы по тегам:

Похожие вопросы: