LINUX.ORG.RU

Неправильно работает USB-SERIAL CH340/CH341

 , , ,


2

2

Задача: обеспечить работу переходника USB-SERIAL на чипе CH340/CH341.

Система:

# uname -a
Linux test-serial 3.2.0-4-amd64 #1 SMP Debian 3.2.63-2+deb7u1 x86_64 GNU/Linux
Переходник определяется автоматически:
# dmesg | grep 'New USB device'
[ 4097.409095] usb 4-1: New USB device found, idVendor=1a86, idProduct=7523
[ 4097.409108] usb 4-1: New USB device strings: Mfr=0, Product=2, SerialNumber=0
# lsusb
Bus 004 Device 003: ID 1a86:7523 QinHeng Electronics HL-340 USB-Serial adapter
# ls /dev/ttyUSB*
/dev/ttyUSB0

Соединяю два компьютера нуль-модемным кабелем.
На тестируемом компьютере запускаю:

# cat /dev/ttyUSB0
На втором:
# echo 'zxc0' > /dev/ttyS0
# echo 'zxc1' > /dev/ttyS0
# echo 'zxc2' > /dev/ttyS0
# echo 'zxc3' > /dev/ttyS0
# echo 'zxc4' > /dev/ttyS0
# echo 'zxc5' > /dev/ttyS0
Вывод на первом:
# cat /dev/ttyUSB0
zxc0

zxc1

zxc2

zxc3

zxc4

zxc5
Теперь наоборот:
# echo 'zxc0' > /dev/ttyUSB0
# echo 'zxc1' > /dev/ttyUSB0
# echo 'zxc2' > /dev/ttyUSB0
# echo 'zxc3' > /dev/ttyUSB0
# echo 'zxc4' > /dev/ttyUSB0
# echo 'zxc5' > /dev/ttyUSB0

# cat /dev/ttyS0
zxc0

zzxc1

zzxc2

zzxc3

zzxc4

zzxc5

Видно, что цепляется какой-то мусор.

Установка драйвера не дала результата. Драйвер:
CH341SER_LINUX.ZIP http://wch.cn/downloads.php?name=serch&page=3&keyword=CH340

Понижение скорости передачи приводит к полному отсутствию передачи данных в обоих направлениях.
Под WinXP/Win7 этот переходник работает нормально.

Можно ли заставить работать этот переходник, или лучше какой-нибудь на другом чипе? И если так, то на каком лучше?

Запусти minicom на обоих портах (он предсказуемо настраивает порты) и посмотри на результат.

vel ★★★★★ ()
Ответ на: комментарий от vel

vel, спасибо. Направление верное.
minicom правильно передает данные при условии отключения Hardware Flow Control, т.к. нуль-модемнный кабель использован самый простой.

Но конечная задача все равно не решена. Мне требуется запустить программу Modpoll Modbus Master Simulator. Так вот, она через /dev/ttyS0 отлично работает, а через /dev/ttyUSB0 - завершается по тайм-ауту. А потом уже и остальная передача данных через echo и cat ломается. Полагаю, причина в инициализации портов.

На клиентской машине настройки портов как после инициализации через minicom, так и после работы modpoll, остаются прежними, а на серверной после запуска diagslave меняются следующие параметры портов:

Было:  min = 1; time = 5; -parenb  ignbrk -inpck
Стало: min = 0; time = 0;  parenb -ignbrk  inpck
После этого серверная машина отказывается принимать данные с порта через cat /dev/ttyS0, сразу же завершая выполнение. При этом связка diagslave-modpoll нормально работает при использовании /dev/ttyS0, но не работает через /dev/ttyUSB0.

Возможно, смена параметров порта на серверной машине как-то влияет на работоспособность адаптера USB-SERIAL, других вариантов я пока не вижу.

alxdon-rs ()

а использовать более адекватные ftdi? ну или на худой конец pl2303?

а по более по теме - не вижу какие параметры порта ты задаешь.

ktk ★★★★ ()
Ответ на: комментарий от alxdon-rs

stty позволяет настраивать порты

stty -F /dev/ttyUSB0 .....

vel ★★★★★ ()
Последнее исправление: vel (всего исправлений: 1)
Ответ на: комментарий от ktk

а использовать более адекватные ftdi? ну или на худой конец pl2303?

Переходник на pl2303 уже заказал, в воскресенье привезут. ftdi - не нашел, где купить. У нас есть только NIX под заказ, в остальных местах выбор еще хуже.

а по более по теме - не вижу какие параметры порта ты задаешь.

А вот это уже не в бровь, а в глаз.

параметры minicom:          9600 8N1
параметры diagslave-modpoll 9600 8E1
Четность включилась по умолчанию, стоило ее убрать, и связь через адаптер заработала.

Вывод: этот адаптер (или драйверы) не работает с включенной проверкой четности.
Было бы интересно узнать, возможно ли это исправить. Но меня не огорчит, если это невозможно.

В целом проблема решена, всем спасибо.

alxdon-rs ()
Ответ на: комментарий от vel

stty позволяет настраивать порты

О смене параметров портов я и узнал через
stty -F /dev/ttyS0 -a

alxdon-rs ()

Адаптер на чипе pl2303 заработал сразу же - как с проверкой четности, так и без нее.

alxdon-rs ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.