Стандарты интерфейса ввода/вывода для внешних устройств
Сборочная линия промышленных роботов Kuka, собирающих автомобили Мерседес. Роботы Kuka поставляются с контроллерами на основе Windows Embedded CE. Фотография с разрешения Kuka Roboter GmbH.
Стандарты интерфейсов В/В для внешних устройств
За прошедшие годы были разработаны несколько широко используемых стандартов цифровых интерфейсов для соединения компьютеров с периферийными устройствами. Данный раздел описывает несколько самых распространенных стандартов и кратко обсуждает, как они работают. Каждый стандарт имеет свой собственный набор оборудования, программного обеспечения, и компромиссов производительности. Обычно во встроенном устройстве можно найти несколько таких интерфейсов. Большое число периферийных устройств и интегральных схем используют эти стандарты.
Параллельный интерфейс принтера
Стандарт параллельного интерфейса принтера был разработан в 1970-х гг. и является широко используемым стандартом для передачи 8-битных параллельных данных. Большинство ПК и многие встроенные компьютеры имеют параллельный порт принтера. Данные пересылаются параллельным образом, используя восемь битов данных и стандартные уровни напряжения цифровой логики. Требуются линии квитирования для синхронизации каждой передачи данных. Линии квитирования соединяются с портами управления и статуса В/В. В ПК параллельный порт принтера соединяется с тремя 8-битными портами В/В на процессоре. Один порт В/В используется для 8-битной передачи данных, следующий адрес В/В содержит порт В/В для статуса, и третий адрес содержит порт В/В для битов управления, которые используются для сигналов квитирования.
Передача значения одного байта данных показана на рисунке 3.1. На шаге 1 компьютер ожидает пока сигнал busy (занят) принтера не станет низким (Low). На шаге 2 компьютер выводит восемь битов данных, и затем компьютер задает стробирующий сигнал низким (Low) как минимум на 500 ns на шаге 3. Затем компьютер ожидает от принтера сигнал Ack Low. Компьютер должен получить сигнал Ack Low, прежде чем изменить данные или стробировать линии. Компьютер может перейти в состояние Busy после задания сигнала Ack.
Линии квитирования от принтера могут заставить компьютер ждать в связи с такими событиями как отсутствие бумаги, прогон бумаги, или переполнение буфера. Иногда в программном обеспечении используются циклы ожидания, так что пользователю посылаются уведомления, когда принтер занят слишком долго.
Другие устройства специального назначения часто используют интерфейс параллельного порта для GPIO для управления внешним оборудованием, так как это простой способ получить доступ к нескольким битам вывода цифровой логики.
Первоначально параллельный порт принтера был однонаправленным. Более новые стандарты параллельного порта поддерживают двунаправленную и более быстрые передачи данных между внешним устройством и компьютером (например, стандарты IEEE 1284 ECP и EPP). Был добавлен новый управляющий бит, который определяет направление передачи данных. Выходы вентиля с тремя состояниями используются на компьютере и принтере для двунаправленного управления линиями данных на основе задания управляющего бита.
Параллельные кабели должны быть достаточно короткими. Последовательный интерфейс, описанный в следующем разделе, может использовать более длинные кабели, которые требуют меньшего количества проводов, но он имеет также меньшие скорости передачи данных и меньшую полосу пропускания.
Программная поддержка параллельного порта принтера
Большинство операционных систем предоставляют драйверы устройств для параллельного порта принтера. В системах X86 параллельные порты принтера имеют обычно имя LPTx:, где x является номером порта принтера. Протоколы двунаправленности подробно описаны в Стандарте параллельного порта IEEE 1284. Методы, используемые для печати графики и различных шрифтов, широко варьируются (например, PS и PCL), и требуют обычно драйвера принтера для конкретной модели принтера.
Если драйвер принтера реализован на платформе Windows Embedded CE, то для отправки данных на принтер можно использовать вызовы функций PrinterOpen, PrinterSend, и PrinterClose, или можно использовать вызовы В/В API файловой системы с именем устройства LPT. Используемый по умолчанию драйвер принтера PCL включен в Windows Embedded CE. Если порт принтера используется для других специальных устройств, их драйверы могут посылать данные прямо в порты В/В, используя функцию WRITE_PORT_UCHAR, и считывая биты статуса с помощью функции READ_PORT_UCHAR, имеющиеся в CEDDK.
Последовательный интерфейс В/В RS-232C
Большинство последовательных интерфейсов поддерживают стандарт EIA RS-232C. V.24 является стандартом, используемым в Европе. 8-битное значение данных передается последовательно по одному биту. Большинство ПК и встроенных компьютеров имеют как минимум один последовательный COM порт RS-232C. В простейшей реализации стандарта RS-232 в кабеле используется только три провода. Один провод используется для передачи данных (TD), один для получения данных (RD) и один для соединения сигнала "земля" (GND). Генератор фиксированной частоты используется для смещения последовательных данных. Частота этого битового генератора называется скоростью в бодах последовательного интерфейса. Скорость в бодах названа так в честь французского инженера Бодо (Baudot), который изобрел последовательный интерфейс для телеграфа. Последовательные устройства могут передавать данные в обоих направлениях одновременно (полнодуплексный режим), так как используются два различных провода сигналов для получения и передачи. Кабели последовательного интерфейса могут быть длинными, и они требуют только несколько проводов. На большинстве последовательных устройств обычно используют кодировку символов ASCII, но они могут также использоваться для передачи любых 8-битных двоичных значений.
Генератор скорости передачи не синхронизируется с сигналом генератора провода, соединяющего посылающее и принимающее устройства, это скорее асинхронная передача, и происходит с помощью машины состояний, которая наблюдает за последовательными перемещениями битов данных, происходящими у получателя.
В последовательном интерфейсе RS-232 не существует синхронизирующего соединения генераторов между отправителем и получателем. Передатчик и получатель должны первоначально быть настроены для работы с одной тактовой частотой. Машина состояний используется для настройки фазы синхронизации. Даже хотя они имеют одну частоту синхронизации, фаза генератора должна, тем не менее, синхронизироваться для последовательного передатчика и приемника, анализируя входящие последовательные данные. Для реализации последовательного интерфейса требуется оборудование, которое называется универсальный асинхронный приемопередатчик (UART). Средства на основе исходной микросхемы 16550 UART используются в оборудовании большинства современных ПК, включая рассматриваемое устройство Ebox 2300, которое будет использоваться для лабораторных проектов.
Передача отдельного символа ASCII показана на рисунке 3.2. Последовательный бит имеет два состояния. Mark является состоянием высокого уровня сигнала (>3V), а Space является состоянием низкого уровня сигнала (<-3V). Последовательные устройства более старого поколения могут иметь для Mark и Space уровни около +12V и -12V. Отметим, что для правильных уровней напряжения RS-232 стандартный бит вывода цифровой логики должен будет иметь свои уровни напряжения преобразованными для использования в последовательном интерфейсе. Для преобразования к уровням напряжения RS-232 существуют специальные ИС. ИС преобразования уровня RS-232 может также генерировать напряжения питания постоянного тока из стандартных источников питания постоянного тока цифровой логики.
Рис. 3.2. Передача последовательным интерфейсом RS-232C 8-битного значения данных. Уровни напряжения >3 для mark и <-3 для space. Это несовместимо с уровнями стандартной логики, и требуется преобразование
Нерабочим является состояние высокого уровня сигнала (Mark). Как только интерфейс начинает посылать новое 8-битное значение данных, линия переходит в низкое состояние сигнала (Space) на один тактовый цикл (генератора скорости передачи). Это называется стартовый бит. Восемь битов данных затем пересылаются в течение следующих восьми тактовых циклов в порядке от младшего к старшему биту. Самый старший бит данных иногда используется в качестве контрольного бита четности для обнаружения ошибок, когда вместо восьми используется только семь битов данных. После пересылки битов данных состояние бита становится высоким на один такт. Это называется стоп-битом (Stop). Иногда при очень низких частотах передачи используются два бита Stop. Отметим, что требуется как минимум 10 тактов генератора для передачи каждого 8-битного значения данных.
UART обычно взаимодействует с процессором с помощью нескольких портов В/В. Один порт передает восьми-битное значение данных. Другой порт содержит линии квитирования для указания, когда доступны новые данные, или UART будет готов для отправки новых данных. Часта большая часть оборудования порта В/В содержится фактически внутри UART.
Процессор значительно быстрее, чем скорости последовательной передачи, поэтому биты статуса должны сравниваться в программном обеспечении или оборудовании с правильными значениями, прежде чем происходит передача каких-либо данных. Дополнительные биты статуса могут также фиксировать условия ошибки.
Внутри передатчика UART используется 8-битовый сдвиговый регистр, и он активируется тактовым генератором для смещения данных по одному биту за раз. Сдвиговый регистр используется для преобразования из параллельного в последовательное представление. Оборудование UART автоматически добавляет стартовый и стоповый биты.
Приемник на другом конце кабеля является другим UART. Он имеет внутреннюю машину состояний, которая использует стартовый и стоповый биты, чтобы облегчить настройку фазы генератора на входящих последовательных данных.
Когда он видит границу данных на входящих последовательных данных, он перенастраивает фазу такта. Несколько битов могут иметь одно и то же значение, и границы данных может не быть. Машина состояний имеет счетчик для обнаружения и исправления этого состояния.
Машина состояний внутри UART обычно использует более быстрый генератор, который в восемь, шестнадцать, или даже в шестьдесят четыре раза быстрее, чем скорость передачи данных. Она также использует эту быструю частоту и счетчик для сэмплирования данных в середине периода каждого бита. Возле границ в последовательных кабелях часто возникает шум и низкочастотные помехи, поэтому сэмплирование в середине каждого бита улучшает надежность. После сэмплирования данных с более медленной частотой синхронизации выполненного машиной состояния используется второй сдвиговый регистр в получателе для преобразования из последовательного в параллельное представление.
Можно использовать дополнительные линии квитирования в последовательных кабелях для запуска и останова потока данных. Они обычно включают RTS (запрос на передачу), CTS (готовность к приему), DCD (детектирование носителя данных), DSR (источник данных готов), и DTR (готовность терминала). Без квитирования или программного управления потоком на более высоких скоростях передачи многие последовательные устройства будут терять символы, так как буферы UART относительно небольшие, и микропроцессор может не прочитать передаваемые достаточно быстро данные.
Устройство RS-232 может быть одного из двух типов, оборудование терминала данных (DTE) и оборудование носителя данных (DCE). Нормальный последовательный кабель RS-232C настроен для соединения устройства DTE c устройством DCE. Если соединяются два устройства одного типа, требуется специальный null-модемный кабель или адаптер. null-модемный кабель меняет местами сигнальные линии Передача данных (Tx) и Получение данных (Rx) на одном конце кабеля вместе с несколькими соединениями на линиях квитирования.
Когда Ebox 2300 соединяется непосредственно с последовательным портом ПК, должен использоваться null-модемный кабель, так как оба последовательных коннектора устройства настроены как DCE. Существуют также дешевые устройства анализаторы RS-232, созданные для помощи в определении различных вариантов для null-модема и точной настройки квитирования. Они будут полезны, если существуют проблемы при соединении двух последовательных устройств. Также доступно специальное программное обеспечение ПК, которое выводит дополнительную информацию о последовательном порте, которая помогает осуществлять мониторинг и отладку последовательной передачи данных.