LINUX.ORG.RU

USB -> RS-232 ломает ответ устройства

 , , ,


0

2

Привет! Прибор (осциллограф) подключается к ПК через

/dev/ttyS0
Оператор через самописную утилиту посылает команды управления (SCPI) и анализирует ответы устройства.
Добавил в цепочку конвертер USB-RS232 и заверте столкнулся с неприятным поведением - конвертер ломает ответ прибора. Вместо вменяемого ответа шлёт набор символов. При этом посылка команды осуществляется нормально. Все настройки этого USB-Com порта полностью соответствуют настройкам «железного» COM-порта.
За чтение отвечает вот такая функция:
void GDS::getAnswer(){
	unsigned char buf[OUTBUFF];
	int n = RS232_PollComport(GDS::port, buf, OUTBUFF-1);
	if (n > 0) {
		buf[n] = 0; /* always put a "null" at the end of a string! */
		for (int i = 0; i < n; ++i) {
			if (buf[i] < 32) /* replace unreadable control-codes by dots */
				{ buf[i] = '.'; }
			}
		std::cout << "Received: " << (char*)buf << std::endl;
	}
	else {
		std::cerr << "Wrong command." << std::endl;		
	}
}

Использую переходник PL-2303 XA/HXA от Prolific, драйверы взял с прилагающегося диска.
Кто-нибудь сталкивался с таким поведением этого (или другого подобного) конвертера? В какую сторону копать? Спасибо!


ну так а слайды-то, слайды будут? Дамп ответов хотя бы приведи, ожидаемый и получаемый.

demidrol ★★★★★
()

Было дело, конвертеры хреново иногда работают. FTDI вроде хорошо себя зарекомендовал.

UVV ★★★★★
()

RX TX через 10-100 Ом?

anonymous
()
Ответ на: комментарий от demidrol

Без конвертера:

COM Port: 1
Port speed: 19200
Port opened.
*idn?
Received: GW,GDS-810S,EG211572,V1.23.
С конвертером:
COM Port: 7
Port speed: 19200
Port opened.
*idn?
Received:  ▀            

hdclnr
() автор топика

Две причины вижу:

1. Неправильная скорость и формат слова.

2. Аппаратное управление потоком выключено или включено? Не требует ли производитель девайса закорачивать DTR на DSR и RTS на CTS?

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

Использую переходник PL-2303 XA/HXA от Prolific

А точно не левый переходник. Мне один раз попался левый. Они как-то попали на наш рынок. Симптомы были интересные: не работал на интеловских чипсетах, но работал на SiS. На PL2303

Проверь осциллографом, уровни там правильные на выходе переходника?

Zubok ★★★★★
()
Последнее исправление: Zubok (всего исправлений: 2)
Ответ на: комментарий от hdclnr

явно скорость не та. stty -F чего говорит?

А вообще, сделай, как тебе тут советуют — купи переходник на FTDI. Лучше всего — FTDI MINI MODULE, офигенная универсальная штука — тут тебе и UART, и SPI, и I2C и даже JTAG (хотя при нынешнем курсе стоит до фига).

demidrol ★★★★★
()

У меня Prolific U232-P9 на стандартных драйверах включенных в 4.2.0 kernel работает без нареканий

Попробуй в терминале заслать команду управления, будет ли ответ тоже сломан

picocom -b 19200 /dev/ttyUSB0
alx777 ★★
()

Что за драйверы «с прилагающегося диска»? Неужели ядро не знает этого конвертера?

Beewek ★★
()

Один такой пролайфик адаптер у меня вообще с ходу не заводился. Процедура всегда была: подключить, modprobe -r pl2303, modprobe pl2303.

Кстати:

тег c

std::cout

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

Вот только SPI-слейвом он не может быть. И несмотря на то что у SPI всего 4 режима, он не совсеми справляется без специальных трюков. А так, да, зверь: вытягивает положенные 60 МБ (брутто) usb2 (чуть более 50 МБ нетто).

gag ★★★★★
()

Не уверен, что это имеет отношение к описываемой проблеме, но сталкивался с тем, что, например, убунта пытается слать AT-команды на serial over USB порты, чтобы проверить не модем ли это. В результате некоторые контроллеры сходят с ума.

anonymous
()

А у твоего конвертера есть конвертер уровней с RS-232 на TTL? А то может ты напрямую в PL-2303 пытаешься уровни RS-232 запихнуть.

Если так, то ты, скорее всего, уже попалил свой переходник.

Картинка из даташита.

anonymous
()
Ответ на: комментарий от demidrol

Я имел ввиду железки за конвертером

anonymous
()
Ответ на: комментарий от Zubok

Zubok
1. Правильные. Без конвертера всё работает с точно теми же настройками.
2. Пробовал и так, и так. Нет, производитель хочет стандартные RxD-TxD.

Проверь осциллографом, уровни там правильные на выходе переходника?

Правильные, в пределах таблички из даташита.

alx777

Попробуй в терминале заслать команду управления, будет ли ответ тоже сломан

Да, в ответ сыпется набор символов.

anonymous

убунта пытается слать AT-команды на serial over USB порты, чтобы проверить не модем ли это. В результате некоторые контроллеры сходят с ума

Ни сам конвертер, ни система не шлют никаких левых пакетов - я бы это заметил по выхлопу функции чтения из порта.

А у твоего конвертера есть конвертер уровней с RS-232 на TTL?

Хороший вопрос. Хотел было сразу сказать, что есть, но не нашёл подтверждения в даташите. Коллега, работавший через этот конвертер с atmega328 уверяет, что есть, но тоже жалуется на него. Но уже из-за потери связи вообще.
Думаю, мне стоит просто взять другой конвертер. Всем спасибо.

hdclnr
() автор топика
Ответ на: комментарий от AlexVR

Да, точно. Прибору доступны 5 режимов по скорости, ответы несколько разнятся, но суть одна и та же:
2400 - нет ответа
4800 - одиночные символы
9600 - набор символов
19200 - одиночные символы
38400 - набор символов

hdclnr
() автор топика
Ответ на: комментарий от hdclnr

Хороший вопрос. Хотел было сразу сказать, что есть, но не нашёл подтверждения в даташите. Коллега, работавший через этот конвертер с atmega328 уверяет, что есть, но тоже жалуется на него

И в то же время утверждаешь, что уровни правильные. Получается, что точно ты не знаешь. Я же и говорю, что проверь осциллографом. Может, твой переходник уровни 0 - +5 В выдет, а не те, которые требует RS-232. У меня, например, тот глючный конвертер выдавал именно 0 - +5 В. Иногда это работает и некоторые приборы с интерфейсом RS-232 воспринимают это как «0» и «1». Но это не по стандарту.

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

Похоже ты не одинок:

https://lists.debian.org/debian-kernel/2013/03/msg00598.html

https://lists.debian.org/debian-kernel/2013/04/msg00181.html

«Sometimes you get only some bytes directly after connection of the serial device and then nothing. I checked the input of the chip, the signal is clear and perfect. It is the same result with 2 different adapter of the same type.

The sending of data is no problem, that's working.»

alx777 ★★
()

попадались искаропки поломатые китайские usb-serial донглы (на гребаном pl-2303), в основном был поврежден конвертер уровней (LV)TTL<->RS232. попробуй другой.

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

FTDI - это у которого драйвер мусор шлет, если думает, что чип паленый? Ну ну.

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