Главная страница
Библиотека (скачать книги)
Скачать софт
Введение в программирование
Стандарты для C++
Уроки по C#
Уроки по Python
HTML
Веб-дизайн
Ассемблер в среде Windows
ActiveX
Javascript
Общее о Линукс
Линукс - подробно
Линукс - новое
Delphi
Паскаль для начинающих
Турбопаскаль
Новости
Партнеры
Наши предложения
Архив новостей





Примечание
В обозначениях интерфейсов (двухпроводным, трехпроводный и т. п.) принято считать только сигнальные линии. Но не следует забывать, что в большинстве случаев, по крайней мере, шины заземления устройств также должны соединяться, поэтому формально двухпроводный интерфейс RS-232 предполагает как минимум три соединительных провода, трехпроводный SPI — четыре и т. д. Вместе с тем есть и "настоящие" двухпроводные интерфейсы — к ним относится, скажем, RS-485 (с некоторыми нюансами), модемная линия или коаксиальный Ethernet.
Однако установления нужной скорости передачи еще недостаточно. Проблема состоит в том, что приемник и передатчик — это физически совершенно разные системы, и скорости эти для них не могут быть строго одинаковыми в принципе (из-за разброса параметров тактовых генераторов), и даже если их каким-то образом синхронизировать в начале, то они в любом случае быстро "разъедутся".

Чтобы избежать этого, в RS-232 передача каждого байта сопровождается начальным (стартовым) битом, который служит для синхронизации. После него идут восемь (или девять — если задана проверка на четность, а также в некоторых других случаях) информационных битов, а затем стоповые биты, которых может быть один, два и даже более (в большинстве случаев это не имеет принципиального значения, потому что в паузах между импульсами линия находится обычно в состоянии непрерывного стопового бита).

Общая диаграмма передачи таких последовательностей показана на рис. 3.1. Диаграмма приведена в уровнях RS-232, которые инвертированы относительно уровней UART. В последнем действует обычная положительная логика с логическими уровнями 0-5 В (или 0-3 В, в зависимости от питания), а в RS-232 — отрицательная, притом с разнополярными уровнями сигнала (подробности см. главу 13).

Хитрость заключается в том, что состояния линии при передаче стартового и стопового битов имеют разные уровни: стартовый бит передается положительным уровнем напряжения (логическим нулем), а стоповый — отрица тельным уровнем (логической единицей), потому фронт стартового бита всегда однозначно распознается.

В момент передачи стартового бита и происходит синхронизация. Приемопередатчики UART обычно тактируются 16-кратной частотой по отношению к установленной скорости обмена. Приемник отсчитывает от фронта стартового бита несколько тактов (чтобы попасть в середину стартового бита), и три такта подряд проверяет состояние линии (оно должно быть логическим нулем). Если все три состояния совпали, то принимается решение, что действительно пришел стартовый бит. Тогда восемь (или девять, если это задано заранее) раз подряд с заданным периодом регистрируется состояние линии (это т. н. процедура восстановления данных). Данные в UART всегда передаются младшими битами вперед. После этого линия переходит в состояние стопового бита и может в нем пребывать сколь угодно долго, пока не придет следующий стартовый бит.

Обычный формат данных, по которому работает львиная доля всех устройств, обозначается 8п1, что читается так: 8 информационных битов, по parity, 1 столовый бит. "No parity" означает, что проверка на четность не производится (см. главу 13). На диаграмме рис. 3.1 показана передача некоего произвольного кода, а также байтов, состоящих из всех единиц и из всех нулей в формате 8п2 (т. е. с двумя стоповыми битами для наглядности).



     
 

Библиотека программиста. 2009.
Администратор: admin@programmer-lib.ru