Микропроцессор последовательно пересылает 8-битные значения данных.
Микропроцессор последовательно пересылает повторяющуюся стартовую последовательность I2C.
Микропроцессор последовательно пересылает 8-битный внутренний номер регистра для чтения.
Микропроцессор посылает старт-последовательность.
Микропроцессор посылает стоп-последовательность.
Микропроцессор последовательно пересылает 8-битные значения данных.
Микропроцессор последовательно пересылает 8-битный внутренний номер регистра для записи. Большинство устройств I2C имеют адрес устройства, за которым следует адрес регистра (адрес регистра в этом случае будет в поле данных, показанном на рисунке 3.5).
2. Микропроцессор последовательно пересылает 7-битный адрес I2C подчиненного с битом R/W заданным как Low (т.е., операция записи)
Рис. 3.5.Последовательная передача интерфейса I2C 8-битного значения данных
Как показано на рисунке 3.5, когда микропроцессор хочет прочитать данные из устройства I2C, он должен выполнить следующие операции шины I2C:
2. Микропроцессор последовательно пересылает 7-битный адрес I2C подчиненного с битом R/W заданным как Low.
5. Микропроцессор последовательно пересылает 7-битный адрес I2C подчиненного с битом R/W заданным как High (т.е., операция чтения).
В одном из стандартов I2C можно иметь несколько контроллеров шины с обнаружением коллизий. Требуется арбитраж шины. Коллизия происходит, когда два контроллера управляют шиной одновременно. Схема арбитража шины определяет, какое устройство может управлять шиной.
Некоторые устройства I2C поддерживают более высокую частоту передачи 3.4 MHz, расширенные 10-битные адреса, программируемые адреса, и более низкие напряжения питания. Многие материнские платы ПК используют System Management Bus (SMB) для измерения температуры, скорости вентилятора, и напряжения. Стандарт SMB был разработан компанией Intel в 1995 г. и основывается на I2C. Устройства I2C можно также найти в новых телевизорах, автомобилях и многих других изделиях потребительской электроники.
Оба стандарта SPI и I2C предоставляют прекрасную поддержку для коммуникации с низкоскоростными устройствами на одной PCB. SPI является, возможно, лучшим выбором для приложений, которым требуется передача потоков данных с большей полосой пропускания, которым не требуется адресная информация. Аналого-цифровые (A/D) и цифро-аналоговые (D/A) преобразователи, используемые для непрерывного сэмплирования или вывода аналоговых сигналов, являются, возможно, самыми широко используемыми устройствами SPI. I2C требует адресации, поэтому оборудование является более сложным, но для текущих технологий микросхем VLSI эти дополнительные аппаратные расходы минимальны.
Программная поддержка устройств SPI и I2C
Некоторые микроконтроллеры общего назначения и многие микроконтроллеры USB включают интерфейсы I2C и SPI. Два или три бита на порте GPIO можно также использовать с соответствующим программным драйвером для реализации интерфейса SPI или I2C. Используя биты GPIO процессору необходимо сгенерировать все сигналы, включая синхроимпульсы, переключая биты GPIO на порте В/В, поэтому подход с программной реализацией требует дополнительных усилий процессора.
Аналоговые входы и выходы
Системы, которым требуется аналоговый вход используют аналогово-цифровые (A/D) преобразователи, а системы с аналоговым выходом используют цифро-аналоговые (D/A) преобразователи. Все эти устройства требуют временной задержки во время выполнения операции преобразования и обладают точностью определенного числа битов. Обычно время преобразования находится в диапазоне микросекунд, а точность в диапазоне от 8 до 20 битов. Обычно более быстрые устройства являются более дорогими, а устройства с большим количеством битов точности стоят дороже. Помните, что многие датчики и сигналы в действительности имеют высокие уровни шума и/или ограниченный набор частот, поэтому не каждый сигнал нуждается в большом числе битов точности и самом быстром возможном времени преобразования. Разумный выбор точности и частота дискретизации является важным вопросом проектирования. Частоты сэмплирования также ограничены реакцией системы в реальном времени. Нет ничего необычного в том, чтобы встроенное устройство имело аналоговые сигналы с различными частотами сэмплирования. Кроме микросхем A/D и D/A обычно требуются некоторые схемы согласования аналогового сигнала для буферизации аналоговых сигналов и настройки их уровней напряжения.
Многие микросхемы A/D и D/A для требуемых цифровых линий В/В устройства имеют интерфейсы типа SPI, а некоторые имеют интерфейсы параллельного типа.
Кроме линий данных устройства A/D и D/A имеют обычно сигнал входа для запуска преобразования и сигнал выхода, который указывает, когда преобразование завершается. Эти сигналы обычно используются для битов готовности В/В устройства.
Доступны готовые коммерческие системы сбора данных (COTS) с аналоговыми средствами В/В на подключаемых платах, использующие USB или сетевые интерфейсы. Эти устройства содержат встроенные микросхемы A/D и D/A, соответствующие схемы согласования аналоговых сигналов, и часто доступны с драйверами устройств для основных операционных систем. Устройства Phidget являются одним из таких примеров, для них свободно доступен драйвер CE, и они будут использоваться в лабораторном проекте с eBox 2300.
LCD и 8/8/8 цифро-аналоговый USB модуль В/В, которые будут использоваться в последующих примерах с eBox содержат микросхему A/D MCP3008. Устройство MCP3008, показанное на рисунке 3.6, содержит последовательную аппроксимацию 10-битного A/D конвертора со схемами сэмплирования и удержания, и восьми-канальный мультиплексор входа, который активирует его для чтения восьми внешних аналоговых входов.
Рис. 3.6.10-битная 200Ks/sec A/D микросхема MCP3008, используемая в модулях Phidget, имеет интерфейс SPI
Точность MCP3008 определяется на уровне ±1 LSB (0.1%). Коммуникация с устройством осуществляется с помощью простого последовательного интерфейса, который использует протокол SPI. Устройство имеет скорости преобразования до 200К сэмплов в секунду. Оно будет сэмплировать значительно медленнее, когда используется с микроконтроллером USB 1.0 и стандартным драйвером USB в модуле Phidgets (50-125 сэмплов в секунду). Этот модуль содержит также микросхему 16-битного расширителя GPIO MCP23S17 с портом SPI, который в свою очередь соединен с микроконтроллером USB CY7C63823. Отметим, что преобразователь A/D создан в действительности с помощью специального быстрого цифрового счетчика, называемого последовательным регистром аппроксимации, и преобразователя D/A. Значение аналогового выхода конвертора D/A сравнивается с аналоговым входом. Когда два аналоговых значения будут такие же как измерено аналоговым компаратором, десятичное значение в счетчике будет новым значением конвертора A/D.
Универсальная последовательная шина (USB)
Спецификация 1.0 универсальной последовательной шины (USB) 1.0 была выпущена в 1996 г. USB 2.0 является более новым стандартом с более высокой скоростью, которая поддерживает также устройства USB 1.0. Как предполагает название, USB является последовательной шиной, которая была создана для поддержки широкого спектра периферийных устройств. Она передает данные пакетами, аналогично сети, но так как максимальная длина ограничена несколькими футами, то технически она считается внешней шиной, а не сетью.
Кабели USB содержат питание +5V и соединение заземления и два сигнальных провода витой пары (D+,D-). Два сигнальных провода действуют в несимметричном и в дифференциальном режиме (один сигнал вычитается из другого). При этом используется схема кодирования NRZI (без возврата к нулю с инверсией), которая предоставляет данные вместе с полем синхронизации импульсов. Сток источника питания на шину ограничен 500mA.
USB поддерживает три скорости передачи, высокую скорость (только USB 2.0) равную 480Mb/s, полную скорость равную 12Mb/s, и низкую скорость равную 1.5Mb/s. USB управляется хостом и на шине обычно допускается только один хост. Хост отвечает за инициирование всех транзакций и распределение полосы пропускания. С одной шиной USB можно соединить до 127 различных устройств.
Шина USB допускает горячее подключение. Если посмотреть на конец коннектора USB, то можно заметить, что внешние контакты питания и заземления длиннее, чем два внутренних сигнальных контакта. Когда коннектор включается, питание и земля соединяются до соединения сигнальных линий. Если бы сигнальные провода были соединены до установления общего заземления, то это могло бы привести к повреждению устройства.
Рис. 3.7.В устройствах USB обычно используется недорогой микроконтроллер USB
Устройства USB реализуются обычно с помощью недорогих микроконтроллеров USB, как показано на рисунке 3.7 выше. Кроме микропроцессора общего назначения с памятью ROM и RAM, они содержат дополнительный интерфейс USB, необходимый оборудованию. Специальная встроенная программа в ROM микроконтроллера используется для управления каждым устройством USB. Эти микроконтроллеры стоят только несколько долларов и могут даже быть дешевле, чем кабель и коннекторы, необходимые для некоторых более старых стандартов, таких как кабель параллельного порта принтера.
USB пересылает информацию в пакетах. Существует четыре типа пакетов, пакеты маркеры, пакеты данных, пакеты квитирования, и периодические пакеты начала кадра. Типичная транзакция USB, показанная на рисунке 3.8, состоит из пакета маркера (заголовка, определяющего, что должно последовать), необязательного пакета данных (содержащего полезную нагрузку данных), и пакет квитирования (подтверждение транзакции для обнаружения ошибок и исправления). Используется циклический избыточный код (CRC) для проверки каких-либо ошибок передачи.
Рис. 3.8.Процессор последовательного интерфейса USB (SIE) выполняет высокоскоростные преобразования из последовательного в параллельное представление на пакетах USB, так как скорости последовательных данных слишком высокие для большинства микроконтроллеров
Скорости последовательных данных, необходимые для USB, слишком высокие, чтобы дешевый микропроцессор обрабатывал их программным образом. Специальное оборудование для преобразования из последовательного в параллельное представление, называемое процессором последовательного интерфейса (SIE), включается в большинство схем микроконтроллеров USB. SIE содержит логику для управления протоколом на уровне битов и кодирование шины. Микропроцессор затем пересылает байты (а не биты) в SIE с более медленной скоростью данных.
Пакет маркера содержит идентификатор пакета, адрес, и конечную точку. Идентификатор пакета в примере ниже является маркером OUT. Адрес каждого устройства (ADDR) может иметь несколько конечных точек (ENDP). Конечная точка является буфером (обычно 8 байтным), который соединяет оборудование SIE устройства и встроенную программу, выполняющуюся на микропроцессоре в устройстве USB.
Программная поддержка устройств USB
Когда подключается новое устройство USB, используя специальный процесс, называемый перечислением, хост обнаруживает добавление нового устройства и опрашивает подключенное устройство, чтобы определить его ID продукта USB и ID поставщика (PID/VID). Информация PID/VID позволяет хосту найти и загрузить соответствующий драйвер для нового устройства. Хост затем посылает команду задания адреса, чтобы присвоить новому устройству адрес.
Операционные системы обычно включают драйвер для инициализации устройства USB, а затем ищут нужный драйвер специфического устройства USB. Стандартные драйверы обычно поставляются с ОС для устройств памяти, устройств интерфейса с человеком (UID), таких как клавиатура и мышь, и иногда базового последовательного устройства USB. Другие устройства обычно требуют специфического драйвера устройства от производителя. В CE идентификаторы PID/VID устройства USB и информация соответствующего драйвера хранятся в регистре. Доступны программные и аппаратные анализаторы протокола USB, как показано на рисунке 3.9, которые отслеживают и выводят пакеты USB, и будут полезны при разработке новых драйверов USB.
Рис. 3.9.Анализатор протокола USB захватывает и выводит пакеты USB, обмен которыми происходит с флеш-устройством USB (www.usbdeveloper.com)
Устройства В/В для аудио сигналов
Многие встроенные устройства имеют теперь средства для аудио. Audio Codec 97 (AC97) является стандартом ПК для кодирования/декодирования аудио, разработанным компанией Intel в 1997 г. Кодек относится к сигналам, которые кодируются/декодируются в аналоговое аудио из цифрового аудио и наоборот. Кодек является на самом деле объединенным конвертором A/D и D/A с микшерами.
AC97 поддерживает скорости данных до 96 kHz в стерео разрешении от 16 до 20 битов. ПК имеют также более новый стандарт HD Audio, но встроенные устройства, такие как eBox 2300 скорее всего будут использовать для аудио более старые и дешевые устройства AC97. Как видно на рисунке 3.10, Ebox 2300 использует для аудио кодек Realtek ALC202 18-bit AC97.
Рис. 3.10.Блочная диаграмма аудио устройства Realtek ALC202 AC97
В устройствах Windows Embedded CE с поддержкой аудио доступно большое число функций API для программистов приложений. PlaySound (для файлов *.wav по одному за раз), WaveIn, и WaveOut являются некоторыми из наиболее широко используемых функций API. Вместе с Windows Embedded CE поставляется некоторая версия Windows Media Player и несколько примеров прикладных программ аудио включено вместе с Windows Embedded CE в подкаталоге \SDK\SAMPLES\AUDIO. Для этой ОС определен стандарт API речи, но дополнительное программное обеспечение сторонних поставщиков процессоров речи по прежнему требуется для синтеза речи и распознавания голоса.
Интерфейс с моторами и реле
Для использования цифрового выхода для управления сильноточными устройствами, такими как моторы, реле, сирены, электромагниты, громкоговорители, или светильники, требуется специальная управляющая схема, которая предоставляет дополнительный управляющий ток.
Даже хотя уровни напряжения могут быть совместимыми, типичный контакт цифрового выхода, находящийся в порте В/В обеспечивает только несколько миллиампер тока, но мотору или реле могут требоваться амперы тока. Управление большой индуктивной нагрузкой, такой как мотор или реле, непосредственно из контакта цифровой логической ИС, может легко взорвать внутренний управляющий транзистор в типичной схеме цифрового вывода.
Для моторов и реле доступны специальные управляющие схемы, которые имеют более мощные транзисторы, которые предоставляют больший управляющий ток. Управляющая схема размещается между контактом обычного вывода цифровой логики и сильноточным устройством для обеспечения требуемых более высоких уровней тока. H-мост является полезным устройством, созданным для управления и реверсирования моторов постоянного тока (DC). Схемы H-моста доступны в ИС или небольших предварительно собранных модулях. H-мост содержит четыре больших мощных транзистора. Для одиночного контакта вывода можно добавить небольшую схему, используя отдельный мощный транзистор для управления устройством. Диоды иногда соединяются через нагрузку на индуктивных устройствах, таких как моторы, реле и соленоиды. Когда ток в индуктивной нагрузке отключается, то генерируется пик обратного напряжения (обратный EMF). Диод помогает рассеивать энергию и защищает управляющий транзистор.
Управление скоростью моторов DC с помощью управляющей схемы можно реализовать, изменяя время включения/выключения (рабочий цикл) его цифрового управляющего сигнала. Чтобы избежать прерывистых движений и излишнего шума, управляющий сигнал должен пульсировать с частотой несколько килогерц (значительно выше естественной частоты ответа мотора и редукторов). Многие роботы используют два управляющих мотора по одному для каждого колеса. Скорость мотора даже той же модели существенно варьируется, и синхронизация двух моторов для движения с одинаковой скоростью является трудной задачей без некоторой обратной реакции, такой как кодировщик межосевого угла.
При мгновенном реверсировании моторов DC, генерируются большие обратные напряжения EMF, которые могут создавать избыточный шум в линиях питания. Моторы также потребляют больший ток при первом запуске. В некоторых случаях генерируемый в линиях питания шум может быть достаточно сильным чтобы повредить процессор. Развязывающий конденсатор емкостью 10 -1000 микрофарад между линиями питания рядом с управляющей схемой может помочь отфильтровать шум источника питания, генерируемый при включении и выключении моторов. Обычно параллельно соединяется конденсатор емкостью 0.1 мф, чтобы фильтровать высокочастотный шум, так как диэлектрические материалы в электролитических конденсаторах не работает на высоких частотах (т.е., значение С не будет постоянным для частоты в реальных устройствах). Некоторые системы, чтобы уменьшить шум, добавляют также небольшую программную задержку по времени, когда реверсируют мотор. Мотор сначала выключается на небольшое время (100-500 мсек), прежде чем посылается команда реверсирования.
При управлении механическими системами с вентилями, соленоидами, и реле, может понадобиться добавление гестерезиса, чтобы сократить число циклов включения/выключения. В качестве примера, термостат с гистерезисом, используемый для управления температурой нагревателя, будет отключаться при температуре на пару градусов выше температуры, при которой он включается. Если бы одна и та же температура использовалась для включения/выключения, то он бы постоянно циклически включался и выключался. Время жизни многих механических приводных механизмов оценивается числом циклов, поэтому меньшее количество циклов удлиняет их жизнь. Постоянное циклическое переключение может также в некоторых системах увеличивать шум и уменьшать производительность.
Сетевые интерфейсы CAN и LIN
Controller Area Network (CAN) является последовательной сетью, которая была разработана компаниями Bosch и Mercedes в середине 1980-х гг. для взаимодействия с несколькими контроллерами в автомобиле (www.can.bosch.com). Она может поддерживать скорости данных до 1Мбод и до 110 устройств. Существует два стандарта CAN, ISO 11519 имеет предел в 125 Kбод, а ISO 11898 имеет предел в 1Мбод. CAN широко используется в автомобильной промышленности, и с учетом широкой доступности микросхем поддержки CAN, ее можно также найти сегодня во многих встроенных устройствах.
Это тип шины с несколькими контроллерами с обнаружением конфликтов и арбитражем шины, похожая несколько на Ethernet. Вместо хранения адресной информации сообщения CAN содержат уникальный номер сообщения, и меньшие номера сообщений имеют более высокий приоритет, когда двум контроллерам шина требуется одновременно. Контроллеры Part-A CAN поддерживают 11-битные сообщения, а Part-B поддерживает 11 или 29-битные идентификаторы сообщений. Каждое устройство на шине проверяет номер сообщения и определяет, нужно ли ему читать сообщение с шины.
Рис. 3.11.Кадр сообщения CAN 2.0A
Кадр сообщения CAN версии 2.0A, показанный на рисунке 3.11, состоит из семи различных битовых полей:
Поле Start of Frame (SOF). Значение бита "0" указывает начало кадра сообщения.
Поле сообщения и арбитража, содержащее 11-битный идентификатор сообщения и бит Remote Transmission Request (RTR). Бит RTR равный "0" указывает, что это сообщение является Data Frame. Значение "1" указывает, что сообщение является Remote Transmission Request. Remote Frame является запросом (чтения) одним узлом данных из некоторого другого узла на шине. Remote Frames не содержит Data Field, другое посланное в ответ сообщение будет содержать данные.
Управляющее поле (Control Field), содержащее шесть битов. Два самых старших бита (r0 и r1) в настоящее время не используются. Четырех-битный код длины данных (Data Length Code, DLC) указывает число байтов данных в сообщении.
Поле данных (Data Field) содержит от нуля до восьми байтов данных.
Поле циклического избыточного кода (CRC) содержит 15-битный код ошибки CRC и бит ограничитель "1".
Поле подтверждения (ACK), состоящее из двух битов. Бит Slot, который передается как бит "1", но в последующем перезаписывается доминантными битами, переданными из всех других узлов, которые успешно получили сообщение. Второй бит является битом ограничителем "1".
Поле конца кадра (EOF) состоит из семи битов "1".
После конца кадра следует поле приостановки (INT), состоящее из трех битов "1". После 3-битного периода INT, шина будет свободна. Новый цикл шины может начаться в любое время после периода INT.
CAN идеально подходит для приложений, которым требуется высокоскоростные передачи с короткой длиной сообщений . Она имеет более высокие скорости данных, лучше защищена от шума, и имеет дополнительное обнаружение ошибок, чем более старые последовательные стандарты, такие как RS-232. Поврежденный узел пытается также изолировать себя от шины. Используется две сигнальные линии, CAN-high и CAN-low. Они действуют в дифференциальном режиме. Провода могут иметь в длину десятки метров при самым высоких скоростях передачи, а концы шины завершаются резистором (обычно 120 ом), чтобы уменьшить отражения.
Интерфейс сети LIN
Существует также более новый более дешевый, использующий меньшее напряжение, и меньшие скорости передачи данных (20Кбод) стандарт последовательной шины, предназначенной для использования в автомобилях на уровнях ниже CAN. Она называется Локальной сетью коммутации (LIN). LIN предназначена для взаимодействия процессора подсистемы с его интеллектуальными датчиками, в то время как CAN используется для соединения подсистем вместе на более высоком уровне. LIN может поддерживаться с помощью стандартного последовательного UART и встроенного программного обеспечения микроконтроллера, или с помощью специальных ИС. LIN (ISO-9141) имеет только 1 контроллер шины, имеющий максимум до 15 подчиненных, использует только 1 сигнальный провод, и не требует кварцевых генераторов в каждом устройстве (www.lin-subbus.org).
Рис. 3.12.Типичный кадр LIN, состоящий из Synch Break, Synch Field, Identifier, Data Field и Checksum
Каждый байт данных в кадре, как видно на рисунке 3.12 следует стандартному 10-битному последовательному формату (т. е., старт-бит, восемь битов данных, стоп-бит). Кадр состоит из следующих полей:
Приложение E содержит информацию о назначении контактов нескольких наиболее широко используемых коннекторов В/В.
Книги Parallel Port Complete и Serial Port Complete, написанные Jan Axelson и опубликованные издательством Lakeview Research (www.lvr.com) содержат исчерпывающее описание использования параллельного и последовательного портов.
При отладке последовательного устройства, соединенного с настольным ПК, эмулятор терминала RealTerm выводит больше информации и поддерживает больше форматов данных, чем программа HyperTerminal, имеющаяся в Windows. Она доступна для свободной загрузки по адресу: http://realterm.sourceforge.net/
Для тестирования и отладки устройств I2C или SPI доступен дешевый адаптер USB/последовательный с I2C/SPI, который работает с RealTerm (http://i2cchip.com). Многие новые осциллографы также декодируют I2C и SPI (см. упражнение 1).
Технический справочник по интерфейсу оборудования IBM PS/2 корпорации IBM 1988 г. содержит исходную информацию по PS/2 для клавиатуры и мыши в главе "Клавиатура и контроллер вспомогательных устройств".
Книга Rapid Prototyping of Digital Systems, автора James Hamblen также содержит информацию о параллельном, последовательном и дополнительном PS/2 интерфейсах, включая скан-коды, команды, и форматы пакетов данных. Скан коды, обычно используемые в ПК, можно найти также в Web и во многих справочниках по ПК.
Книга Indispensable PC Hardware Book 4th Edition, автора Hans-Peter Messmer, содержит много дополнительных подробностей об унаследованном оборудовании ПК.
Полная спецификация I2C доступна на сайте Philips Semiconductors (www.phillipssemiconductor.com), а SMB на сайте (www.smbus.org). Руководство по Motorola MC68HC11 (www.freescale.com) и различные руководства National Semiconductor (www.national.com) содержат дополнительную информацию о SPI. Аналоговые устройства (http://www.analog.com) составляют большое разнообразие дешевых конверторов A/D и D/A с интерфейсами SPI и параллельным портом.
Форум USB Implementers был основан компаниями, которые разработали спецификацию USB www.usb.org.
Свободно доступное руководство по основам USB можно найти по адресу http://www.beyondlogic.org/usbnutshell/usb1.htm.
Книги USB Complete, автора Jan Axelson, и USB Design by Example, автора John Hyde, содержат дополнительную информацию по созданию устройств USB.
Проекты общедоступного исходного кода для CE, включающие драйверы USB Web Cam и Phidgets доступны по адресу http://msdn.microsoft.com/embedded/community/ community/CommunityProjects/.