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. Стартовый бит передается положительным уровнем напряжения (в данном случае это считается логическим нулем), а стоповый – отрицательным уровнем (логической единицей). Обнаружив изменение уровней с отрицательного на положительный, приемник считает это стартовым битом и с заданными, согласно оговоренной заранее скорости передачи, промежутками времени отсчитывает от него все остальные.