Порты передачи данных
Порты ввода-вывода преимущественно используются для управления простыми внешними устройствами: если бит установлен, мотор крутится (заслонка открыта, нагреватель включен и т. д.), и наоборот. Если же устройство более сложное, и работа с ним предполагает обмен последовательностями команд и ответов, или просто большими объемами данных, простой порт оказывается не очень удобен. Основная проблема при использовании простого порта в качестве средства обмена данными состоит в том, что принимающему устройству необходимо знать, выставило ли передающее устройство на своих выходах новую порцию данных, или еще нет. Три основных подхода к решению этой проблемы называются синхронной, асинхронной и изохронной передачами данных.
При синхронной передаче мы либо предоставляем дополнительный сигнал, строб, либо тем или иным способом передаем синхросигналы по тем же проводам, что и данные. Например, можно установить, что каждая следующая порция данных должна хотя бы одним битом отличаться от предыдущей. При этом необходимо предусмотреть протокол, посредством которого передатчик будет кодировать, а приемник декодировать повторяющиеся последовательности символов. Например, второй символ из пары одинаковых последовательных символов можно заменять на специальный символ повторения, впрочем, в этом случае нам необходимо предусмотреть и способ кодирования символа, совпадающего по значению с символом повторения. Передача стробирующего сигнала требует прокладки дополнительных проводов, но с реализационной точки зрения гораздо проще совмещения синхросигнала и данных и поэтому широко применяется в самых разнообразных ситуациях. Большинство стробируемых портов асимметричны: одно из устройств, ведущий (master – хозяин), генерирует стробовый сигнал, а второе, ведомый (slave – раб), пользуется этим сигналом для приема или передачи. Нередко вместо одиночного строба используется несколько различных сигналов – например, один сигнал выставляется передатчиком и сообщает, что следующая порция данных готова, а второй сигнал – приемником и сообщает, что приемник принял эти данные и готов принять следующие. Дополнительные сигналы могут также решать вопрос о том, какое из устройств в данном цикле будет приемником, а какое – передатчиком. В качестве примера синхронной передачи может служить интерфейс I2C.
При асинхронном обмене данными передающее устройство посылает специальный стартовый символ, сигнализирующий о том, что сейчас пойдут данные, и с фиксированным интервалом выставляет на своих выходах символы данных. Передаваемый за один прием блок данных обычно невелик по объему – ведь необходимо считаться с опасностью того, что часы приемника и передатчика, посредством которых они отмеряют интервал между последовательными порциями данных, недостаточно точны и могут разойтись. Обычно блок данных состоит из фиксированного количества символов и называется кадром или фреймом (frame). Кадр обычно завершается одним или несколькими стоповыми символами. Не обнаружив этих символов (или обнаружив на месте этих символов неверные значения), приемник может понять, что его часы все-таки разошлись с часами передатчика. Асинхронная передача позволяет сэкономить на проводах (не требуется стробирующих сигналов) и при этом избежать сложных способов кодирования, характерных для совмещенной синхронной передачи, однако стартовые и стоповые символы составляют значительную часть потока передаваемых данных и создают ощутимые накладные расходы. Кроме того, при передаче большого объема данных в виде плотно следующих друг за другом кадров велика опасность, что приемник потеряет заголовок очередного кадра и не сможет восстановить структуру потока, поэтому многие асинхронные протоколы требуют паузы между последовательными кадрами. Асинхронная передача данных удобна в ситуациях, когда объем передаваемых данных невелик, а потребность в их передаче возникает в труднопредсказуемые моменты. Обычно асинхронные порты работают на небольших скоростях, не более нескольких килобит в секунду. В качестве примера асинхронной передачи может служить интерфейс RS-232.
Изохронная передача данных по идее напоминает асинхронную, с тем лишь отличием, что при обмене данными приемник и передатчик пользуются высокостабильными, но независимыми – при использовании одного тактового генератора получится синхронная передача – тактовыми генераторами, и благодаря этому могут обмениваться кадрами большого размера. В идеале, изохронная передача сочетает преимущества синхронной и асинхронной, но на практике сложности обеспечения стабильности и калибровки тактовых генераторов достаточно велики и в чистом виде изохронная передача используется очень редко.
Как синхронные, так и асинхронные порты бывают следующих типов:
1. симплексные (simplex) – передавать данные может только одно устройство);
2. полудуплексные (half-duplex) – оба устройства могут принимать и передавать данные, но не способны делать это одновременно, например, потому, что прием и передача идут по одному проводу);
3. полнодуплексные (full-duplex) или просто дуплексные (оба устройства способны одновременно передавать и принимать данные, чаще всего по различным проводам).
Еще одна практически важная классификация портов передачи данных – это деление их на последовательные и параллельные порты. Последовательный порт состоит из одного провода, по которому, как следует из названия, последовательно передаются биты данных, а также, возможно, синхронизационные или стартовые и стоповые биты. Параллельный порт имеет несколько линий передачи данных. Как правило, последовательные порты – асинхронные или синхронные с совмещенной передачей синхросигнала, но исключения из этого правила – стробируемые последовательные порты – также нередки. Напротив, если уж мы проложили восемь проводов для данных, то экономить на девятом – синхронизующем проводе – было бы совсем уж глупо, поэтому подавляющее большинство практически используемых параллельных портов – синхронные стробируемые.
Дата добавления: 2015-09-29; просмотров: 972;