Главная страница


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)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 Интересная проблема! (Еще разок :)   Dmitriy Lystsov   06 May 2003 18:39:32 
 Re: Интересная проблема! (Еще разок :)   Alexandr Goncharov   06 May 2003 22:54:08 
 Интересная проблема! (Еще разок :)   eugeny chernetcki   07 May 2003 13:39:00 
Архивное /ru.unix.bsd/12232fbec050d.html, оценка 2 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional