Исследование по com-портам в NetBSD

unlk аватар

Франкэнштейн в процессе сборки.

Предисловие

Известно, что используя смекалку и пару how-to можно в два такта настроить что угодно. А если еще учесть, что интерфейс RS-232 давно устарел и вот-вот уйдет в небытие, то возникает закономерный вопрос - зачем нужен этот мануал? Во-первых, не все еще перешли на домовые сети или ADSL и оставшимся диал-апщиком не помешает кое-какая информация про их пищащих друзей. Во-вторых, NetBSD выглядит так, как будто кто-то специально всё запутывал. В действительности же это следы былых реалий. В том числе связанных прямо или косвенно с последовательными линиями. Некоторые изложеные в статье исторические факты могут пригодится для дальнейших разборок с современными вопросами.

Может показаться, что статья помимо воды содержит слишком много не относящихся непосредственно к NetBSD подробностей. Всё нормально, так и есть!

Слово о ком-портах

С ростом компьютерной индустрии в начале 60-х годов прошлого века назрела необходимость введения единого стандарта на интерфейс последовательного порта. В 1962 году несколько американских промышленных корпораций разрабатывают и скрепляют печатью EIA (Electronic Industries Association) Rекомендованный Sтандарт RS-232. Рекомедованный стандарт отличается от настоятельно рекомендованного тем, что в случае несоблюдения последнего вы сядете в зону, а в случае игнорирования первого - в лужу.

Ужасы про то, что кабель RS232<->RS232 по канонам EIA должен быть 15 метров - это расхожий способ сделать лицо умнее. Берите пример с меня - я придумал лучший: в действительности, стандарт предусматривает не длину, а максимальную ёмкость кабеля (2500 пкФ). В зависимости от технологии приготовления длина кабелюги может значительно возрастать. Скажем, погонная емкость скрученной пары 5 категории 30 пкФ X 1 метр. С другой стороны, существуют (по мнению рунета) удовлетворяющие стандарту кабели длиной порядка 500 метров.

В стакане идут ожесточенные споры, как правильно: RS-232 или EIA-232? Правильно, товарищи, ГОСТ 18145-81. В крайнем случае говорите EIA-232-C, а если хотите, чтобы вас поняли - есть слово "компорт". Даже если вы ярый противник MS-DOS, то произносите "Comm port", поскольку именно такое обозначение применялось в руководствах к самым лучшим друзьям BSD UNIX и самым правильным терминалам серии VT от Digital Equipment.

Я предпочитаю в дальнейшем рассматривать рекомендации не американские (EIA), а международные, которые штампует ITU (подразделение ООН, до 1992 года - CCITT) под кодовыми номерами V.24 и V.28. Почему? Потому что достать первые мне не удалось, а вот вторые - да (с некоторыми затруднениями)

В 24-ой рекомендации группы V (передача данные через телефонные линии) описываются цепи обмена DCE/DTE, а в 28-ой - электрический интерфейс. Однако стандарт EIA-232 более конкретен и помимо этих двух аспектов объясняет конструкцию разъемов и ряд других вопросов.

По стандарту RS-232 предпологалось использовать более 50 цепей обмена. По V.28 в ком-портах должно быть 37 линий. Но чаще всего штырей 25. А еще чаще 9. Микросхемы ком-портов применяющиеся в большистве компьютеров требуют задействовать 7 линий, но самое забавное, что впринципе хватает и трех проводков правда придется выбрать управление потоком XON/XOFF.

В RS-232 различают (изо)синхронный и асинхронный режим передачи данных. Это очень легко – ком-порты PC, большинство терминалов и почти все модемы могут работать только в асинхронном режиме. А то, что постоянно в инструкциях мелькает «Syncro mode» - это так, для «совместимости». В конце абзаца они всегда сознаются, что эта опция «not available».

Поговариvaют, что разъемы последовательных портов иногда могут представлять из себя гнезда и вилки RJ45. Они места меньше занимают, а обжимать кабель обычно легче чем паять.

DCE и DTE: Введение в курс дела

На заре компьютерной эры, когда ЭВМ повылезали из нор пакетной обработки и обзавелись системами разделения времени, ушлые личности спроектировали коммутируемую сеть данных на основе готовенького телефонного хозяйства. Доступ к такой забавной сети данных по замыслу разработчиков должен был осуществлятся через Аппаратуру Терминалов Данных, или как они еще её называли, Data Terminal Equipment (DTE).

Позже они записали свои планы в рекомендацию CCITT X.25. По этой замечательной рекомендации выходило что цепь электрическая, образованная между двумя абонентами коммутацией телефонных каналов, приравнивается к цепи информационной. Цепь данных или информационная цепь на международном языке звучит как Data Circuit.

Но по причинам, подробно рассмотреным в соответствующей литературе, слаботочный дискретный сигнал используемый в цифровой электронике никак не может пробратся по телефонной паре. Ситуацию осложняет нехорошая привычка телефонистов выделять вам узкую частотную полосу обрубая её на отметке 300 Гц снизу и 3400 Гц сверху. Таким образом они здорово экономят на кабеле.


Обратите внимание – над головой Д. Ритчи неопознанный летатательный аппарат. Девушка за клавиатурой VT-100. Рядом – обычный модем. Снизу акустический модем (куплер) и строчный принтер (и по совместительству терминал). Справа два терминала Teletype-33, за ними мини-ЭВМ Digital Equipment PDP-11.

С учетом этих и других обстоятельств проектировщики будущего X.25 решили, что в схему обязательно нужно добавить Оконечную Аппаратуру Цепи Данных - Data Circuit-Terminating Equipment (DCE), через которую DTE мог бы цеплятся к телефонной паре (или к двум). На роль такой аппаратуры очень хорошо подходили тогдашние акустические модемы "куплеры". Эти умилительные устройства обеспечивали между двумя DTE информационный поток 300 бит на секунду. Помимо этого существовали нормальные варианты модемов. Раньше модемы любили называть Data-Set. Да так сильно, что одну из цепей RS-232 окрестили «Data Set Ready». Но об этом потом.

Да, терминалы данных могли вести обмен через коммутируемую телефонную сеть общего пользования (PSTN) или выделенную телефонную линию (Dedicated/Leased Circuit/Line), однако не менее важным методом был прямой обмен по линии цифровой. Что это такое. Всё просто, берете модемный кабель DTE-DCE, как следует его раскурочиваете, перепаиваете проводники по хитрой схеме и цепляете полученое чудо прямо в порты первого и второго терминала данных, после чего наслаждаетесь информационным обменом. Поскольку число модемов, участвующих в обмене равняется нулю, то такое соединение называли нулевым, а кабель нуль-модемным/нуль-модемом.

Схема общения DCE и DTE по V.24

Цифровой сигнал, метка, пробел, тайминг и стробирование для непрофессионалов

Науке известно два вида сигнала: непрерывный и прерывный. При непрерывном сигнале аппаратуре «важно» значение изменяющейся во времени физической величины в любой точке волны на графике. Например, напряжения. Если вы говорите что-то в трубку телефона, то в телефонной паре возникает электромагнитное колебание с формой волны аналогичной той, что давит на перепонку микрофона (помехи +заморочки телефонистов с обрубанием частот опустим). Поэтому непрерывный сигнал часто называют аналоговым.

Сигнал может воспринимать и «умное» цифровое устройство – микросхема или чипсет. Микросхеме важно лишь несколько уровней из всего бесконечного многообразия значений несущего параметра волны. В настоящее время электроника построена на двоичной логике, т.е. важны лишь два уровня сигнала. Например, микросхемы com-портов «рассматривают» приходящую волну и решают, какое значение она несет. Если в течение некоторого (строго определенного) времени напряжение составляет свыше +3В – микросхема снимает нуль, если же напряжение ниже -3В – то единицу.

Так как подобное соответствие дано не небесами, а разработчиками электронной логики конкретной модели микросхемы, то единицу в данном случае называют логической единицей, а нуль – логическим нулем. Когда лог.1 или лог.0 принимается по такой линии RS232, которая относится к группе цепей информации (данных), то логический нуль называют пробелом (SPACE), а логическую единицу – меткой(MARK). Когда лог.1/лог.0 снимается с одной из цепей группы контроля (управления), то лог.1 называют Включено (ON), а лог.0 – Выключено (OFF).

Перекурите и подумайте, если в течении одной секунды напряжение входящего тока составляет более +3В, то сколько логических единиц «сгенерирует» микросхема com-порта? Ответ зависит от скорости «взятия показаний». Если для com-порта установлена (например через getty) скорость 9600 бит/с, то легко догадатся, что микросхема передаст в компьютер 9600 единиц. Конечно, это чуть-чуть не так. Далее вы сами увидите изъян этого примера, но идея всё равно верна.

Процесс интерпретации волны в серию единиц или нулей называется стробированием. Вместо того, чтобы говорить «микросхема снимает показания напряжения тока и записывает в буфер бит 1 или 0», говорят «происходит стробирование сигнала».

При скорости порта в те же самые 9600 бит/с, всё время разбивается микросхемой на равные интервалы длиной 1/9600 секунды с помощью своей подсистемы называемой таймингом. Когда начинается поток (синхронный режим) или пакет данных (асинхронный режим) чип запускает тайминг и начинает стробировать сигнал, заполняя внутренний буфер серией битов, которые постепенно поступают в ядро, а затем в процесс работающий с портом. Таким образом, говоря о скорости порта мы подразумеваем скорость тайминга и, одновременно, скорость стробирования.

Синхронный режим

Всякие часы, даже атомные постепенно накапливают ошибку. А что говорить про микросхемы стоимостью несколько рублей? Проблему подгонки времени в приемнике и передатчике решают через ввод в схему единого источника синхронизации. Посмотрите - даже если сихрогенератор отклоняется от нормы, то устройства всё равно работают в одно и то же время, синхронно. Для синхронизации в интерейсе RS232/V.24 отведено несколько специализированных цепей обмена.

В синхронном режиме обмена стробирование идет для всего информационного потока сразу. Это значит, что в синхронном режиме не существует понятия «пакет», вместо этого есть единственный битовый поток для каждой из цепей обмена. Пакетом в этом случае можно считать весь поток с начала до конца соединения.

Асинхронный режим

Асинхронный режим точно также как и синхронный требует, чтобы скорости стробирования двух сторон, участвующих в обмене совпадали. Но если в синхронном режиме синхронизация двух сторон происходит для каждого бита всего соединения сразу, то в асинхронном режиме синхронизация длится лишь на протяжении максимум 12 битного пакета – т.н. символа. Поскольку число бит ничтожно мало, то ошибка в тайминге приемника и передатчика не успевает нарости настолько, чтобы бит «выстреливаемый» во время А из передатчика не попал в интервал времени стробирования приемника.

Сумбурно? Возможно, я попытаюсь пояснить на примере.

Допустим, что две стороны информационного обмена это модем и компьютер. Пользователь соединил порт компьютера и порт модема прямым кабелем, включил питание модема и запустил эмулятор терминала на том последовательном порте, на котором «висит» модем. Эмулятор терминала открыл порт на скорости 9600 бит/с. Таким образом для микросхемы COM-порта установилась скорость стробирования 9600 строб/с и интервал тайминга 1/9600 с. Модем был настроен так, чтобы хитрым методом определять скорость «на той стороне» и подгонять под неё скорость своего локального COM-порта. Таким образом COM-порт скорость стробирования и интервал тайминга COM-порта модема стал равен таковым у порта компьютера.

Порты модема и компьютера асинхронные, и, таким образом, единый источник синхронизации отсутствует.
В свободном состоянии по всем линиям данных течет ток. Значение его напряжения менее -3В, что означает логическую единицу, метку.

Пользователь нажимает клавишу «A», что программное обеспечение эмулятора терминала записывает на линию TD (Transmitted Data) микросхемы порта компьютера число 65 (дес). Микросхема порта настроена на режим 8-N-1, что подразумевает прием/посылку пакета (символа) из 8 бит данных, нуля битов паритета, 1 стартового и 1 стопового бита. Вот в каком виде символ отсылается модему:

Обратите внимание, хоть я и указал в таблице столбец для бита паритета, в режиме нашего примера контроль паритета (четности) не используется. Таким образом, длина символа составит 10 битов.

Микросхеме COM-порта компьютера предстоит отправить этот cимвол по линии TD другой стороне. В данное время на линии удерживается логическая единица. Микросхема модема и компьютера стробирует сигнал в разное время, доля отклонения которого хоть и ничтожно мала для человека, но критична для правильной передачи информации. Одним словом, два порты рассинхронизированы.

В момент начала посылки символа COM-порт компьютера начинает тайминг. На время 1/9600 секунды поднимает напряжение на линии TD до +3В. Через ничтожно малое время прохождения тока через поперечное сечение проводника микросхема модема «понимает», что ей пришел сигнал старта. Она тоже запускает тайминг. Таким образом запуск тайминга на приемнике и на передатчике стартует практически сихронно. Конечно, дальше будет накапливаться расхождение. Что делать?

В следующие 8 * 1/9600 секунд в буфере приема COM-порта модема раз-за-разом оказывается 7 бит данных. Тайминг микросхемы COM-порта модема «щелкает» последний раз и последний бит данных успешно стробируется. В буфере модема лежит число 01000001 (2).
Счетчик тайминга наверняка уже накопил хоть и небольшую, но ошибку. Теперь микросхеме COM-порта модема следует сбросить счетчик тайминга и подготовится к приему следующего символа. Что она и делает.

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

Размышления о стоп-бите (:-

Я нигде не нашел явного ответа на этот вопрос. Вероятно авторы подразумевают, что читатель и так догадался, либо что он давно прошел подготовку в техническом ВУЗе и просто освежает свою память.

Ну что же, мне кажется, что стоп-бит нужен для 3 основных целей:

1) за время стоп-бита должен сбросится счетчик тайминга и опорожнится возможно уже переполненный буфер микросхемы.

2) если вместо положенного значения стоп-бита будет другое значение, этот факт можно рассматривать как нарушение формата символа, а следовательно, как сбой передачи.

3) везде пишут, что прием символа начинается не из-за того, что на входе микросхемы зафиксирован логический нуль (старт-бит), а из-за того произошел перепад напряжения. Т.е. из-за того, что на входе зафиксировано напряжение уровня противоположного последнему. Если я все правильно понял, то вывод #3 можно сформулировать так:

Cтоп-бит нужен для того, чтобы сработал старт-бит и его значение должно отличатся от значения стоп-бита.

Cледствием (возможно неверным) из этого (возможно неверного утверждения) является то, что в свободном состоянии на линии может удерживаться как логическая единица, так и логический нуль. Лишь бы старт-бит отличался от значения свободного состояния. Т.е., если в свободном состоянии (когда нету данных) в цепи существует напряжения тока +3В, то старт-бит должен быть выражен напряжением -3В, и наоборот.

Ну что ж, мы рассмотрели чуть ли не под микроскопом асинхронный режим обмена данными, и даже затронули одну из цепей RS-232/V.24 – TD, ответственную за передачу сигнала от DTE к DCE. Теперь вы не будете паниковать при появлении в man-ах просьб установить скорость порта, количество бит данных в символе, бит четности и т.д.

Цепи RS-232/V.24 для асинхронного обмена данными между оконечной аппаратурой

В предыдущем разделе автор как сумел раскрыл тему асинхронного обмена и даже затронул одну из цепей, а именно – TD – передаваемые данные. Напомню, что TD – это сокращение от Transmitted Data и по ней идет поток данных от компьютера (и любого другого DTE) к модему (или какому-то другому DCE).

Аналогичная функция возложена на цепь RD – Received Data – принимаемые данные. Если TD используется для потока данных от DTE к DCE, то цепь RD наоборот. Через ней данные «текут» от модема к компьютеру.

На этом цепи группы данных в стандартном асинхронном порте PC заканчиваются. Взгляните на таблицу. В ней два последних столбца (данные и управление) достаточно четко сие утверждение иллюстрируют. Перечень оставшихся цепей состоит из цепей группы управления (control) и земли.

Цепь V.24/102 «Signal Ground or Common Return» используется как общая земля для всех цепей группы управления и всех цепей группы информации асинхронного com-порта. Мои скромнейшие познания в электронике дают мне моральное право сообщить лишь о том, что эта цепь необходима. Что случится если эту цепь исключить из схемы проверяйте сами.

Цепи 105, 106, 107, 108/2, 109 и 125 составляют группу цепей управления.

Цепь 125 – Calling Indicator – индикатор вызова. Свободное состояние этой цепи - «Выключено». Когда с АТС поступает сигнал вызова, то модем переводит цепь CI в состояние «Включено». Стандарт V.24 ничего не сообщает по поводу того, когда CI должна быть переведена обратно в «Выключено», но другие источники сообщают, что цепь 125 работает «в соответствии с током звонка, переходя в положение ON на время звонка». Проведем эксперимент. Запустим эмулятор терминала, подключив его к порту, на котором висит модем. Модем не должен находится в состоянии автоответа (для чистоты эксперимента). Наберем с мобильника городской номер. Через пару секунд зазвенит телефонный аппарат, а на экране эмулятора терминала появится сообщение RING. Если мы не будем сбрасывать звонок, то заметим, что сообщение появляется синхронно со звонком на телефоне. Посмотрите – в данном случае видно, что эта цепь просто индикатор для человека, модема или программы на компьютере о том, что необходимо снять трубку. Если модем не в режиме автоответа, если человек не снял телефонную трубку и если программа не дала модему команду ATA – то цепь 125 будет периодически переводится из состояние «Включено» в состояние «Выключено» до тех пор, пока вызывные сигналы с АТС не прекратятся. В практическом плане - становится ясно, почему для успешного использования программы типа getty неоходимо, чтобы модем находился в режиме автоответа. Если бы за снятие трубки отвечал не модем, а программа – то getty кушала бы слишком много ресурсов на периодический опрос цепи индикатора звонка.

Цепь 109 – Data Channel Received Line Signal Detector – Канала данных приема сигнала с линии детектор. Сие громоздкое название необходимо для соблюдения святого принципа «солидный документ должен запутывать». В стандарте RS-232 эта цепь носит название «Carrier Detect» - несущая обнаружена. Простые умозаключения позволяют сделать вывод о том, что «несущая» и «канала данных сигнал с линии» - это одно и то же.

Возникает смутное ощущение, что мы не знаем каких-то тайных схем, послуживших источником входновения для официального имени 109 цепи. Я попробовал порассуждать над этим и раскусил их коварный план. Вероятно разработчики V.24 делили сигналы телефонной линии на несколько разновидностей. Очевидно, это были:

- сигнал вызова с АТС
- сигнал набора номера
- прочие служебные сигналы АТС
- речевой сигнал
- модемный сигнал

Казалось бы, в этом списке определены все возможные виды сигналов. Тем не менее, опыт подсказывает, что лампа Carrier Detect на внешнем модеме загорается отнюдь не моментально, а лишь после какого-то времени с момента ответа удаленного модема. Посему я разбил бы последний пункт списка на два:

- модемный сигнал служебного канала
- модемный сигнал канала данных

Короче говоря, когда модемы (DCE) разговариют друг с дружкой втайне от компьютеров (DTE) – то говорят что в телефонной линии существует сигнал служебного канала. Но если модем детектирует (т.е. демодулирует) сигнал предназначенный для передачи в DTE – то этот сигнал называется канала данных сигналом линии связи или сигналом несущим данные. Или несущей волной. Или просто несущей.

Последовательность действий, необходимая для начала детектирования несущей представлена ниже. Условия просты DTE<->DCE---[телефонная сеть]---DCE<->DTE:

1.модем шлет на АТС сигналы набора номера
2.АТС посылает вызывные сигналы удаленному модему
3.удаленный модем снимает трубку, АТС перестает слать вызывные сигналы и телофонная сеть предоставляет двум абонентам линию связи.
4.модемы «снюхиваются» и выбирают самый подходящий протокол соединения – на этой стадии в телефонной линии существует сигнал служебного канала
5.модемы договариваются о параметрах, после чего каждый из них посылает своему DTE сообщение об успешном соединении: CONNECT
6.после этого оба модема переводятся из режима командного в режим данных, а на телефонной линии появляется сигнал канала данных

При достижении пункта 6 – цепь 109 переводится в состояние «Включено», на модеме загорается светодиод «CD», а контролирующая COM-порт программа (допустим ядро NetBSD) узнает об этом.

Цепь 108/2 Data Terminal Ready – терминал данных готов.

продолжение на подходе:

Некоторые особенности последовательного порта PC
4.4BSD/NetBSD схема работы с устройствами на портах Rs232/V.24
Пишем и пробуем простую терминалку
Стандартные терминалки cu и tip
chat – Неинтерактивные команды модему
Модель «Паразит/Хозяин»
getty – Определяем точки проникновения в хост

Прикрепленный файлРазмер
061130_175000.jpg39.93 кб
061205_2022034.jpg45.03 кб

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".
EvAn аватар

Вспомнил один

Вспомнил один факт из отечественного компьютеростроения. По сей день в определенных областях используется аналог RS232 под названием ИРПС. Отличия в разъеме: на кабеле папа, а не мама как у COM, другая распайка и по моему другие характеристики тока, благодаря которым удается надежно передавать данные на относительно большие расстояния.

unlk аватар

да кстати

да кстати говоря, спасибо. а гугль оказался довольно многословен насчет ИРПС. а я то думал, что это за "20 миллиампер" которые так упорно повторяются в мануалах DEC :-)

EvAn аватар

Пожалуйста. Еще

Пожалуйста. Еще вспомнил: для обычных ПК существуют платы PCI с портами ИРПС. ОС видит их как COM (но для этого кажется нужны драйверы).

unlk аватар

да так и есть

да так и есть наверняка. по всей видимости ком-порт себя еще не отжил. а помехоустойчивость ентой токовой петли оказывается полезной на предприятиях. схемку rs232<->ИРПС видел, паяется чуть ли не на коленке.

unlk аватар

да-да, там

да-да, там сигнал кодируется не напряжением относительно SG, а током. А вы батенька, случаем ЕС ЭВМ не видели :-))

EvAn аватар

Видел только

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

unlk аватар

на этом говорят

на этом говорят гоняли ленты с BSD

unlk аватар

а пардон BSD

а пардон BSD гоняли на CM а не на ЕС

www2 аватар

>Франкэнштейн в процессе

>Франкэнштейн в процессе сборки.

Жаль, что франкенштейн так и не собран.