На тему: « Реализация обмена данными между устройствами SDK 2.0».
Задание: Реализовать передачу данных между устройствами SDK 2.0 с помощью интерфейса RS-232 по аппаратному и временному прерыванию.
Общие сведения:
Интерфейс RS-232 – стандартный интерфейс, предназначенный для последовательной двоичной передачи данных между терминальным (DTE, Data Terminal Equipment) и связным (DCE, Data Communications Equipment) оборудованием.
Ассоциация электронной промышленности (EIA) развивает стандарты по передаче данных. Стандарты EIA имеют префикс "RS". "RS" означает
рекомендуемый стандарт, но сейчас стандарты просто обозначаются как "EIA" стандарты. RS-232 был введен в 1962, в 1969 была представлена третья редакция (RS-232C). Четвертая редакция была в 1987 (RS-232D, известная также под EIA-232D). RS-232 идентичен стандартам МККТТ (CCITT) V.24/V.28, X.20bis/X.21bis и ISO IS2110.
Рис. 1 Соединение двух удаленных терминалов при помощи модемов. Чтобы не составить неправильного представления об интерфейсе RS-232, необходимо отчетливо понимать различие между этими видами оборудования. Терминальное оборудование, например микрокомпьютер, может посылать и (или) принимать данные по последовательному интерфейсу. Оно как бы оканчивает (terminate) последовательную линию. Связное оборудование – устройства, которые могут упростить передачу данных совместно с терминальным оборудованием. Наглядным примером связного оборудования служит модем (модулятор–демодулятор). Он оказывается соединительным звеном в последовательной цепочке между компьютером и телефонной линией.
Рис. 2 Соединение двух терминалов при помощи null-modem кабеля.
Различие между терминальными и связными устройствами довольно
расплывчато, поэтому возникают некоторые сложности в понимании того, к
какому типу оборудования относится то или иное устройство. Рассмотрим
ситуацию с принтером. К какому оборудованию его отнести? Как связать два
компьютера, когда они оба действуют как терминальное оборудование. Для ответа на эти вопросы следует рассмотреть физическое соединение устройств. Информация передается по проводам с уровнями сигналов, отличающимися от обычных уровней цифрового сигнала (5В, 3,3В и т.п.), для обеспечения большей устойчивости к помехам. Асинхронная передача данных осуществляется с установленной скоростью при синхронизации уровнем сигнала стартового импульса. RS-232 используется для передачи данных на небольшое расстояние (единицы - десятки метров) с небольшой скоростью (обычно, не быстрее 115200 бит/с). Для формирования уровня сигнала используются микросхемы приёмопередатчиков, а для формирования и распознавания посылок – микросхемы UART. Модуль универсального синхронно-асинхронного приемопередатчика
(Universal Synchronous/Asynchronous Receiver and Transmitter, USART) стал стандартом «де-факто» среди контроллеров последовательного обмена. В названии часто опускают слово «синхронный», и модуль не совсем корректно именуется UART (чисто асинхронные приемопередатчики сейчас встречаются достаточно редко). Характеристики последовательного порта UART не позволяют производить приём и передачу данных за пределы печатной платы. Для связи с другими устройствами сигнал от UART необходимо пропустить через приёмопередатчик, работающий в одном из стандартов: RS-232, RS-485, RS-422.
Обычно модули UART в асинхронном режиме поддерживают протокол обмена для интерфейса RS-232 (8N1 или 9N1); в синхронном режиме – нестандартные синхронные протоколы, в некоторых случаях – протокол SPI. Приемопередатчик – преобразователь уровня, как правило, в интегральном исполнении. Предназначен для преобразования электрических
сигналов из уровня ТТЛ в уровень, соответствующий физическому уровню определенного стандарта. Контроллер UART обычно содержит:
1. Источник тактирования (обычно с увеличенной частотой тактирования
по сравнению со скоростью обмена, чтобы иметь возможность
отслеживать состояние линии передачи данных в середине передачи
бита).
2. Входные и выходные сдвиговые регистры.
3. Регистры управления приемом/передачей данных, чтением/записью.
4. Буферы приема/передачи.
5. Параллельная шина данных для буферов приема/передачи.
6. FIFO-буферы памяти (опционально). Ошибки UART:
1. Overrun Error (ошибка из-за повышенной скорости передачи,
переполнение буфера приема).
Эта ошибка случается, когда приемник UART не успевает обрабатывать
приходящие из канала символы, т. е. буфер переполняется.
2. Framing Error (ошибка кадрирования).
Эта ошибка случается, когда фиксируется некорректное состояние линии
данных в момент передачи старт- или стоп-бита. Например, после передачи 8
бит данных приемник ожидает перехода линии в стоп-состояние, но этого не
Этот сигнал информирует о том, что входная линия данных находилась в
неизменном нулевом состоянии в течение времени, больше передачи одного
символа. В буфере приема нулевой байт. Некоторые устройства используют
такую последовательность, чтобы сообщить передатчику, например, о переходе на другую скорость обмена данными. Существуют и другие ошибки, отслеживаемые контроллером UART.
Сигнальные линии последовательного интерфейса
Произведя незначительные изменения в линиях интерфейса RS-232, можно заставить связное оборудование функционировать как терминальное. Чтобы разобраться в том, как это сделать, нужно проанализировать функции сигналов интерфейса RS-232C.
Разъемы и кабели
Устройства для связи по последовательному каналу соединяются кабелями с 9-ю или 25-ю контактными разъѐмами типа D-sub. Обычно они обозначаются DE-9 (или некорректно: DB-9), DB-25, CANNON 9, CANNON 25. Первоначально в RS-232 использовались DB-25, но, поскольку многие
приложения использовали лишь часть предусмотренных стандартом контактов, стало возможно применять для этих целей 9-штырьковые разъёмы DE-9 (D-subminiature). (Рис.3)
Таблица 1. Функции сигнальных линий интерфейса RS-232
Рис.3 Разъемы серии D-sub
D-subminiature, или D-sub – название электрического разъёма,
применяемого, в частности, в компьютерной технике. Название «субминиатюрный» было уместно тогда, когда эти разъёмы только появились, в наше же время эти разъѐмы относятся к числу наибольших по размерам из используемых в компьютерах. Разъём D-sub содержит два или более параллельных рядов контактов или гнёзд, обычно окружённых металлическим экраном в форме латинской D, который обеспечивает механическое крепление соединения и экранирует от электромагнитных помех. Форма разъёма в виде буквы D предохраняет от неправильной ориентации разъёма. Часть разъёма, содержащая контакты, называется по-английски male connector, или plug (по-русски штекер, или вилка, хотя чаще в данном контексте используется жаргонный термин «папа»), а часть, содержащая гнёзда — female connector, или socket (розетка или «мама»). Экран розетки плотно входит внутрь экрана вилки. Если используются экранированные кабели, экраны разъёмов соединяются с экранами кабелей,
обеспечивая, таким образом, непрерывное экранирование для всего соединения. Разъёмы D-sub были изобретены и введены в употребление фирмой ITT Cannon, подразделением ITT Corporation в 1952 году. В принятой этой фирмой системе обозначений, буква D обозначает всю серию разъёмов D-sub, а вторая буква используется для указания размера разъёма, исходя из числа стандартных контактов, которые могут разместиться внутри D-образного экрана (A = 15 контактов, B = 25, C = 37, D = 50, E = 9). После чего следует цифра, обозначающая фактическое число используемых контактов, и буква, обозначающая «пол» разъѐма (M – male, «папа» , F – female, «мама», P – plug, штепсель или «папа», S – socket, розетка или «мама»). Вероятно, потому, что в оригинальном PC как для параллельного, так и для последовательного портов использовались разъёмы DB-25, многие, не понимая, что «B» в данном случае означает размер экрана, стали сам разъём D-sub называть DB, вместо того, чтобы использовать обозначения «DA», «DC» или «DE». Когда для последовательного порта стали использовать 9-штырьковые разъёмы, их начали называть DB9 вместо DE9. Сейчас достаточно распространено, что разъёмы DE9 продаются, как DB9. Под DB9 в современном мире почти всегда подразумевают 9-штырьковый разъѐм с размером экрана Е.
изоляцию) получили название от способа присоединения кабеля. Контакты этих разъемов со стороны, обращенной к кабелю, имеют ножи, подрезающие и смещающие изоляцию проводников кабеля. Эти разъемы предназначены в
основном, для ленточных кабелей-шлейфов, хотя в них возможна заделка и
одиночных проводников. Для заделки кабелей в эти разъемы существуют
специальные инструменты-прессы, но при необходимости можно обойтись
плоской отверткой (и умелыми руками). Разъемы IDC существуют как ответные части для краевых печатных разъемов (рис. выше, а) и штырьковых контактов (рис. выше, б). Разъемы могут иметь ключи: для печатных разъемов это прорезь и соответствующая ей перемычка, расположенная ближе к первым контактам. Для штырьковых разъемов ключом является выступ на корпусе, но этот ключ сработает, только если ответная часть имеет пластмассовый бандаж с прорезью. Ключом может являться и отсутствующий штырек – на разъеме для него не оставляют отверстия. На ленточном кабеле крайний провод, соединяемы с контактом «1», маркируют цветной краской (например, красной). На печатной плате штырек «1» обычно имеет отличающуюся от формы других (квадратную) форму контактной площадки. Такого типа разъем используется в учебном лабораторном стенде SDK-2.0 для подключения по интерфейсу RS-232.
Формат последовательной передачи данных
Поскольку данные обычно представлены на шине микропроцессора в
параллельной форме (байтами, словами), их последовательный ввод-вывод
оказывается несколько сложным. Для последовательного ввода потребуется
средства преобразования последовательных входных данных в параллельные
данные, которые можно поместить на шину. С другой стороны, для
последовательного вывода необходимы средства преобразования параллельных данных, представленных на шине, в последовательные выходные данные. В первом случае преобразование осуществляется регистром сдвига с последовательным входом и параллельным выходом (SIPO), а во втором – регистром сдвига с параллельным входом и последовательным выходом (PISO). Оба регистра обычно входят в состав приемопередатчика USART.
Последовательные данные передаются в синхронном или асинхронном
режимах. В синхронном режиме все передачи осуществляются под
управлением общего сигнала синхронизации, который должен присутствовать на обоих концах линии связи. Асинхронная передача подразумевает передачу данных пакетами; каждый пакет содержит необходимую информацию, требующуюся для декодирования содержащихся в нем данных. Конечно, второй режим сложнее, но у него есть серьезное преимущество: не нужен отдельный сигнал синхронизации.
Рис.5 Осциллограмма последовательной передачи данных по интерфейсу RS-232.
В асинхронном режиме посылке очередного байта информации
предшествует специальный старт-бит, сигнализирующий о начале передачи
(обычно логический «0»). Затем следуют биты данных (их обычно 8), за
которыми может следовать дополнительный бит (его наличие зависит от
режима передачи, обычно этот бит выполняет функцию контроля четности).
Завершается посылка стоп-битом (логическая «1»), длина которого (длительность единичного состояния линии) может соответствовать длительности передачи 1, 1.5 («полтора стоп-бита») или 2 бита (см. рис. выше). Стоп-бит гарантирует некоторую выдержку между соседними посылками, при этом пауза между ними может быть сколь угодно долгой (без учета понятия «тайм-аута»).
Контроль четности
Контроль четности может быть использован для обнаружения ошибок при передаче данных. При использовании контроля четности посылаются
зависимости от результата устанавливается бит четности. Приемное устройство также подсчитывает число единиц и затем сверяет бит четности. Для обеспечения контроля четности компьютер и устройство должны одинаково производить подсчет бита четности, т.е. определиться устанавливать бит при четном (even) или нечетном (odd) числе единиц. При контроле на четность биты данных и бит четности всегда должны содержать четное число единиц. В противоположном случае выполняется контрол на нечетность. Часто в драйверах UART RS-232 реализуются еще две опции на четность: Mark и Space. Эти опции не влияют на возможность контроля ошибок: Mark означает, что устройство всегда устанавливает бит четности в 1, а Space – всегда в 0.
Обнаружение ошибок
Проверка на четность – это простейший способ обнаружения ошибок. Он может определить возникновение ошибок в одном бите, но при наличии
ошибок в двух битах уже не заметит ошибок. Также такой контроль не отвечает на вопрос, какой бит ошибочный. Другой механизм проверки включает в себя старт- и стоп-биты, циклические проверки на избыточность, которые часто применяются в соединениях Modbus.
Рассмотрим пример:
В этом примере показана структура передаваемых данных с синхронизирующим тактовым сигналом. В этом примере используется 8 бит данных, бит четности и стоп-бит. Такая структура также обозначается 8Е1.
Рис. 6 Формат передачи данных по интерфейсу RS-232.
Старт-бит
Сигнальная линия может находиться в двух состояниях: включена и
выключена. Линия в состоянии ожидания всегда включена. Когда устройство или компьютер хотят передать данные, они переводят линию в состояние выключено – это установка старт-бита. Биты сразу после старт-бита являются битами данных.
Стоп-бит
Стоп-бит позволяет устройству или компьютеру произвести
синхронизацию при возникновении сбоев. Например, помеха на линии скрыла старт-бит. Период между старт- и стоп-битами постоянен согласно значению скорости обмена, числу бит данных и бита четности. Стоп-бит всегда включен. Если приемник определяет выключенное состояние, когда должен присутствовать стоп-бит, фиксируется появление ошибки. Стоп-бит не просто один бит минимального интервала времени в конце каждой передачи данных.
На компьютерах обычно он эквивалентен 1 или 2 битам, и это должно
учитываться в программе драйвера. Хотя, 1 стоп-бит наиболее общий, выбор 2 бит в худшем случае немного замедлит передачу сообщения. Есть возможность установки значения стоп бита равным 1,5. Это используется при передаче менее 7 битов данных. В этом случае не могут быть переданы символы ASCII, и поэтому значение 1,5 используется редко.
Работа с последовательным каналом
Простым примером асинхронного обмена с программной проверкой
(UART) «по опросу»: перед тем, как прочитать данные из порта данных
контроллера, необходимо проверить, являются ли эти данные результатом
приема посылки и не забирались ли они программой ранее. Проще говоря,
необходимо проверить данные на достоверность. Перед тем же, как записывать данные для передачи в буфер контроллера, необходимо убедиться, что в буфере 161 есть место, т.е. что запись новых данных в буфер не приведет к уничтожению ранее помещенных и еще не переданных данных. При организации асинхронного обмена по прерыванию при приеме байта с линии происходит прерывание и передача управления соответствующей программе-обработчику, который читает принятый байт из порта данных контроллера UART и, к примеру, помещает его в специальный буфер-очередь принятых байт, доступный прерванной программе. По завершении процедуры обработки прерывания управление передается в прерванную программу, которая при желании (в любом удобном месте алгоритма) может забрать принятый байт. С другой стороны, при завершении отправки контроллером очередного байта также происходит прерывание, сигнализирующее о том, что байт послан и в буфер UART можно поместить новые данные. Обработчик прерывания при наличии данных в исходящей очереди записывает очередной байт в порт данных контроллера и запускает посылку. Основная же программа может, не заботясь о готовности или неготовности контроллера, принять очередной байт, может спокойно помещать данные в исходящий буфер, а всю работу с устройством выполнит обработчик прерываний, когда оно (устройство)