Советы по обустройству современного персонального компьютера.

COM.

СОМ-порт (от слова «коммуникационный»), или serial («последовательный») порт – отчасти ошибочно еще называют портом RS-232. Правильно сказать так: COM-порт передает данные, основываясь на стандарте последовательного интерфейса RS-232[5], который, кроме собственно протокола передачи и электрических параметров, стандартизирует разъем DB-25. Позднее, специально для ПК, выпустили стандарт RS-574, установивший всем знакомый разъем DB-9, теперь ставший фактическим стандартом для всей отрасли. Есть и еще один термин, который имеет непосредственное отношение к этой теме: UART (Universal Asynchronous Receiver-Transmitter, универсальный асинхронный приемопередатчик). UART есть составная часть СОМ-порта, его основа, то устройство, которое собственно передает и принимает данные и к которому адресуются пользовательские программы. Кроме UART, в СОМ-порт входит преобразователь электрических уровней UART/RS-232. Вообще-то на микросхемах UART можно построить линии передачи по различным протоколам: RS-422 (скоростному), RS-485 (повышенной надежности), даже USB. Рассматриваемый RS-232 – самый простой из них.

Стандарт RS-232 – один из самых древних протоколов передачи данных между устройствами, он был утвержден еще в 1969 году, и к компьютерам (тем более ПК) тогда еще не имел никакого отношения. Это очень простой в реализации, дешевый, неприхотливый и достаточно надежный способ соединения двух устройств. Существует несколько стандартов RS-232, различающихся добавленной буквой: RS-232C, RS-232D, RS-232E и пр. Вдаваться в различия между ними нет никакого смысла – они являются лишь последовательным усовершенствованием и детализацией технических особенностей одного и того же устройства. Заметим лишь для справки, что все современные порты поддерживают спецификации RS-232С или RS-232E.

Давайте немного подробнее остановимся на том, как работает RS-232 – это хорошо иллюстрируют не совсем очевидные принципы передачи целого набора битов всего по одному проводу. Идея заключается в посылке последовательных импульсов, каждый из которых может означать 0 или 1. Если в определенные (заранее известные) моменты времени считывать состояние линии, то можно восстановить то, что было послано. Однако эта очевидная мысль наталкивается на определенные трудности.

Для приемника и передатчика, связанных между собой тремя проводами («земля» и два сигнальных провода: «туда» и «обратно»), приходится задавать скорость передачи и приема, которая должна быть одинакова для устройств на обеих концах линии. Эти скорости стандартизированы и выбираются из ряда от 110 до 115200 битов в секунду. Проблема состоит в том, что приемник и передатчик – это физически совершенно разные системы, и скорости эти для них не могут быть строго одинаковыми (из-за разброса параметров тактовых генераторов), и даже если их каким-то образом синхронизировать в начале, то они в любом случае быстро «разъедутся». Поэтому в RS-232 придумали передачу каждого байта сопровождать начальным (стартовым) битом, который служит для синхронизации. После него идут от пяти до восьми информационных битов (девять – если используется проверка на четность), а затем стоповые биты, которых может быть один, два и более, – предполагается, что за время прохождения всей этой посылки приемник и передатчик по частоте «разойтись» не успеют.

Рисунок 3.1 иллюстрирует работу приемопередатчика RS-232. Стартовый бит передается положительным уровнем напряжения (в данном случае это считается логическим нулем), а стоповый – отрицательным уровнем (логической единицей). Обнаружив изменение уровней с отрицательного на положительный, приемник считает это стартовым битом и с заданными, согласно оговоренной заранее скорости передачи, промежутками времени отсчитывает от него все остальные.

Советы по обустройству современного персонального компьютера

Рис. 3.1. Передача байта по стандарту RS-232.

Одно из самых удобных с технической точки зрения качеств RS-232 – то, что стандарт предусматривает весьма широкий разброс напряжений сигнала – официально в пределах от ±5 до ±15 В (для RS-232C), а на самом деле он может быть еще расширен, потому что приемник принимает сигналы ±3 до ±25 В. Длина линии связи не должна превышать 15 м (RS-232C), но на практике это могут быть много большие величины. Если скорость передачи не выбирать слишком высокой, то такая линия может надежно работать на десятки и сотни метров (автору этих строк удавалось без дополнительных ухищрений наладить обмен с компьютером на скорости 4800 бод по кабелю, правда, довольно толстому, длиной около полукилометра). Никаких специальных витых пар не предполагается – линия может состоять из обычных проводов.

Из всего этого вытекает, что RS-232 – идеальный способ для передачи данных с небольшими скоростями по минимальному количеству проводов[6]. Когда-то его всерьез намеревались развивать, отчего и стандартизировали разъем с 25 контактами (DB25) – «на вырост». В этом разъеме имеются дополнительные линии, смысл которых в том, что они могут применяться для организации различных синхронных протоколов обмена (протоколов с handshakes, «рукопожатием»). Все старые ПК имели по два COM-порта: и с 9-ю, и с 25-ю контактами. Быстро выяснилось, что 25 контактов – чистое излишество, вполне достаточно и 9-ти, и DB25 как-то незаметно исчез из обихода. Остался только DB9, да и в нем имеющиеся дополнительные линии мало какое устройство использует. Так как RS-232 – медленный способ передачи, то никаких особых требований к соединителям он не предъявляет, и нередко можно встретить устройства и с нестандартным разъемом – например, в некоторых старых цифровых фотокамерах под последовательный порт были приспособлены стереоаудиоразъемы. С 1991 года развитие RS-232 затормозилось – ему на смену пришли намного более сложные, зато удобные для пользователя и скоростные USB и FireWare.

Отметим еще, что обычный телефонный модем с точки зрения системы – тоже СОМ-порт, только поверх простейшего физического протокола RS-232 для него введены некоторые специализированные команды управления, а в остальном он ничем от СОМ-порта не отличается (даже если втыкается в USB). «Комом» является и инфракрасный (IR) порт, беспроводной интерфейс Bluetooth тоже образует виртуальные СОМ-порты, через которые ведется обмен.

С точки зрения современных технологий у COM-порта только два недостатка, зато очень серьезных. Во-первых, он медленный – со скоростью 115 кбит/с не только какое-нибудь видео, даже цифровой звук не всегда передашь с надлежащим качеством. Правда, современные порты поддерживают скорости и повыше (например, 256 кбит/с), но это не выход из положения. Во-вторых, он подразумевает только соединение «точка-точка» – если у вас один СОМ-порт, то вы к нему можете подключить только одно устройство. Тем не менее, хоронить протокол RS-232 не следует – это по-прежнему самый дешевый и простой способ связи внешних устройств с компьютером, отчего он и по сей день используется во многих специальных аксессуарах – вроде навигаторов, модемов или медицинских приборов.

Кабели для подключения RS-232 делятся на удлинительные (вилка-гнездо, рис. 3.2) и соединительные (гнездо-гнездо, рис. 3.3), последние часто называют нуль-модемными. В соединительных кабелях, обеспечивающих обмен между двумя устройствами, приемные-передающие линии (2-й и 3-й контакты 9-контактного разъема) соединены перекрестно. В правильном нуль-модемном кабеле контакт 4 (DTR, Data Terminal Ready, готовность компьютера) на противоположной стороне также соединяется с 1 и 6 контактами (DCD и DSR – готовность модема). В удлинительных кабелях все эти контакты соединены один к одному.

Советы по обустройству современного персонального компьютера

Рис. 3.2. Удлинительный кабель RS-232.

Советы по обустройству современного персонального компьютера

Рис. 3.3. Соединительный (нуль-модемный) кабель RS-232.

Если вы столкнулись с COM-интерфейсом на каком-то приборе, а в компьютере он отсутствует, – не отчаивайтесь. Есть несколько способов его организовать. Самые распространенные – приобрести переходник USB-COM в виде внешнего кабеля или вставную PCI-плату с набором портов. Последний способ предпочтительнее первого – кабели USB-COM бывают довольно капризными, и некоторые программы для работы через COM-порт с этими кабелями работают с ошибками или отказываются работать вовсе. «Железный» COM-порт, установленный, как постоянное оборудование компьютера, значительно надежнее и, кстати, даже предпочтительнее стационарного порта, установленного на материнской плате, – в случае чего выходит из строя дополнительная плата, а материнская остается в неприкосновенности.

Для ноутбуков такое решение, конечно, не подходит – в них можно пользоваться только переходниками, например, USB-COM. Более надежными будут переходники PCMCIA-COM, хотя они могут быть существенно дороже USB-кабелей. Есть и переходники ExpressCard-COM для тех ноутбуков, в которых нет PCMCIA.

Как определить номер виртуального COM-порта?

И вставные платы, и кабели, и различные переходники для ноутбуков, имеют, как правило, одну неприятную особенность – они не позволяют задать определенный номер COM-порта, он устанавливается произвольным образом после установки драйвера. Причем для переходников USB-COM часто номер порта еще и меняется в зависимости от того, в какой именно порт USB в этот раз воткнули кабель. Такую же особенность имеют и многие модемы (в том числе GSM-модемы для выхода в Интернет по сотовой связи или сотовые телефоны, используемые в качестве модема). А для соединения через COM в программах связи обычно приходится указывать его номер. Как быть?

Определить, какой именно номер присвоен в данном случае виртуальному COM-порту, можно через меню Панель управления | Система | Оборудование | Диспетчер устройств | Порты COM и LPT (в новых версиях Windows Диспетчер устройств может быть доступен прямо из панели управления). В указанном разделе может быть много разных COM-портов (особенно, если у вас в системе имеется Bluetooth), но нужный легко определяется наличием в названии «USB-to-serial» или другой подобной записи. Для модемов (а также сотовых телефонов, подключенных в качестве модема) соответствующий номер COM-порта можно узнать, если найти их в разделе Модемы Диспетчера устройств и обратиться к вкладке Модем в окне Свойства выбранного модема.