|
|
ru.unix.bsd- RU.UNIX.BSD ------------------------------------------------------------------ From : Alexandr Goncharov 2:5020/400 06 May 2003 22:54:08 To : Dmitriy Lystsov Subject : Re: Интересная проблема! (Еще разок :) -------------------------------------------------------------------------------- Dmitriy Lystsov <dima@bc.permonline.ru> wrote: DL> Привет всем! DL> Вопрос тот же: DL> 1. Каким образом проверить на целостность и DL> качество передачи данных кабель (витая пара) DL> используя ПРОГРАММHУЮ среду (FreeBSD или Linux); DL> Кабель с 25-пиновыми разъемами (DB-25) на концах, DL> оба "папы", длинной метра четыре. DL> Данный кабель соединяет принтсервер (Linux) DL> COM-порт (/dev/ttyS0) и принтер DFX8000; DL> Я слышал что из под DOS-а можно это как-то сделать DL> использую заглушку на другом конце провода DL> (разъема) и программу под названием CHECKIT. DL> Есть у кого идеи?! DL> -- DL> -= "Умное лицо, это еще не признак ума, господа" DL> (Барон Мюнхгаюзен) =- DL> Отправлено через сервер Форумы@mail.ru - http://talk.mail.ru Судя по вопросам, двумя словами не обойтись. Попробую поподробнее... Для начала - из каких частей состоит тракт передачи и как это работает, а потом - как проверить. Итак, составные части: 1. Микросхема UART. Hазначение - преобразование параллельного кода, принятого с шины, в последовательный, добавление стартовых и стоповых бит (для асинхронного порта) и выдача с заданной скоростью по одному проводу на передачу. И наоборот, при приеме. Скорость приема и передачи устанавливается одинаковой. Кроме того, имеется (не всегда) встроенный буфер для компенсации разницы скоростей шины и канала приема/передачи. 2. Микросхемы приемо-передатчиков. Hазначение - формирование формы и уровня сигнала для среды передачи. Для rs232 преобразование такое: до - уровень логического нуля "0"=0v, логической единицы "1"=5v после - "0" = -3...-12v, "1" = +3...+12v (В PC иногда вместо 12v бывает 5v, что попадает в допустимый диапазон). 3. Еще важный компонент внутри UART - схема управления потоком и состояния линии Hазвания достаточно условны, не уверен в точности, объясняю своими словами. Hазначение понятно, но пару слов все-таки скажу. Управлять потоком можно двумя способами - программно (путем вставки в поток данных управляющих последовательностей Xon/Xoff) мли аппаратно, используя линии RTS/CTS порта. В первом случае можно обойтись всего тремя проводами в кабеле, но на скорости выше 9600 почти гарантированно будут ошибки и потеря данных. Причина в том, что для того, чтобы заставить оппонента приостановить передачу, надо, чтобы управляющие символы дошли до приложения и обработались им. А они могут застрять в буфере. Во втором случае обработкой сигналов занимается непосредственно UART. Для определения состояния линии и аппаратуры на линии служат сигналы DTR, DSR и CD DTR устанавливается в "1" при включении оборудования и его готовности к передаче. DSR - ответный для DTR. Контроль за состоянием DSR позволяет узнать, готово ли удаленное (на другом конце кабеля) устройство к работе. CD устанавливается в "1", если к кабелю подключен модем, модем успешно провел процедуру хэндшейка с другим модемом и канал связи между модемами готов к пердаче данных. Теперо можно перейти к методике проверки. Так подробно расписано потому, что надо понимать, что в случае отсутствия связи проблема может быть не только в кабеле. Очень часто проблема бывает в настройках порта или в приемопередатчиках. Они могут быть очень легко выведены из строя, если соединять кабелем два включенных устройства. Для начала, надо изготовить (или добыть готовую) заглушку. А лучше - две. В данном случае, для проверки порта потребуется заглушка в разъеме типа "папа", для кабеля - в разъеме типа "мама" В заглушке надо замкнуть передачу на прием (2-3), RTS-CTS (4-5) DTR,DSR и CD (20-6,8). Hомера контактов для разъема DB-25. (В разъеме "папа" (модемном) нумерация выводов дана наоборот, не буду вдаваться в подробности, надо паять, гляды на номера на разъеме.) Суть проверки состоит в том, что в порт на передачу отравляются данные, затем они принимаются от этого же порта и сравнивается то, что отправили, с тем, что приняли. Как это проверяется в CheckIT. (насколько помню) 1. Если нет заглушки, то устанавливается т.н. локальная петля (передача замыкается на прием внутри UART, до выхода на линии приемопередатчиков). Данные отправляются, последовательно переключая скорости от наименьшей к наибольшей. Тем самым проверяется вся внутренняя структура UART, включая схемы управления скоростью, обработки RTS/CTS и прерываний, формирования старт-стопных последовательностей. Если все работает, то следующий шаг - 2. Устанавливается заглушка на порт, снимается локальная петля и проверка повторяется. Дополнительно к проверкам п.1 проверяются приемопередатчики (и кабели от материнской платы до разъема, если они есть). 3. Если все работает, то снимается заглушка с порта, устанавливается проверяемый кабель, на другой конец кабеля устанавливается заглушка (для данного случая другая, если был прямой кабель, то таже самая) и проверка повторяется. Теперь о проверке под Unix-ами. Для начала надо определиться с инициализацией порта. Порт может быть настроен для работы с модемом или нуль-модемным кабелем (точнее - с устройством DTE). В первом случае прежде чем начать передавать данные, надо дождаться сигнала CD. В предлагаемой заглушке это обеспечивается замыканием своего сигнала DTR на сигнал CD. Hо дело в том, что в кабеле может не оказаться провода для передачи этого замыкания на противоположную сторону. К нуль-модемном кабеле должны быть, даже соединенные правильно. Во втором случае - на состояние CD внимание не обращается и достаточно обеспечить связь DTR-DSR. Следующий момент - используются ли сигналы RTS/CTS? В тестовых программах типа CheckIT все эти настойки делаются в одном месте и понятно для человека, а в Unix-ах в разных местах, в зависимости от ... Признаюсь, не вникал, как Linux-е обстоит с этим дело, а во FreeBSD - есть команда stty, которая устанавливает параметры портов, есть скрипт rc.serial, задающий параметры портов при старте системы. И еще на уровне приложений можно управлять. Штатного способа проверки в полном объеме я не знаю. Hо для практического применения можно порекомендовать любую программу, умеющую работать с портом в терминальном режиме и управлять им (ppp, cu в FreeBSD, не знаю, есть ли в Linux-е, но что-то аналогичное точно есть.). Как вариант - cat $file >/dev/ttyXX с одновременным сat /dev/ttyXXX >$file1; diff $file $file1. С последним способом могут быть сложности. Лучше для этого или скрипт написать, чтобы посимвольно отправлять, принимать и сравнивать. Или простенькую программку, релизующую этот алгоритм. Вот как-то так. Получился больше рассказ о том, как должно работать, а не о том, как проверять, но может, поможет кому. -- Alexandr V. Goncharov, | Tomsktelecom, regional branch of JSC"Sibirtelecom" AGV-RIPE, | agv@tomsknet.ru AGV3-RIPN | phonе: +7(382-2)662510 --- ifmail v.2.15dev5 * Origin: Tomsktelecom - Digital Networks (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.unix.bsd/12232fbec050d.html, оценка из 5, голосов 10
|