Опубликован: 24.04.2009 | Доступ: свободный | Студентов: 1180 / 358 | Оценка: 4.39 / 4.28 | Длительность: 18:45:00
Специальности: Программист
Лекция 3:

Стандарты интерфейса ввода/вывода для внешних устройств

< Лекция 2 || Лекция 3: 123456 || Лекция 4 >

Интерфейс шины SPI

Шина последовательного периферийного интерфейса (SPI) была создана в 1980-е годы. SPI использовалась для последовательной коммуникации между микропроцессором и его периферийными ИС. SPI имеет следующие четыре сигнальные линии: Serial Clock (SCLK), Chip Enable or Select (CS), Serial Data Input (SDI), Serial Data Output (SDO). Микропроцессор управляет сигнальными линиями CS и SCLK. Подчиненные устройства SPI получают сигналы синхронизации и выбора элемента памяти из микропроцессора. Когда устройство SPI не является выбранным (элементом памяти), его линия выхода SDO будет иметь три состояния (состояние высокого импеданса). Число битов последовательных данных может варьироваться в зависимости от устройства. Оборудование интерфейса SPI содержит сдвиговые регистры. Один сдвиговый регистр используется для отправки данных, а другой сдвиговый регистр используется для получения данных. Все генераторы являются синхронными и используют SCLK.

Несколько устройств SPI могут соединяться в одно двумя способами. При каскадном соединении используется только один сигнал выбора элемента памяти. Микропроцессор выводит SDO. SDO соединяется со входом SDI одного подчиненного устройства. Линия SDO каждого устройства соединяется с линий SDI другого устройства. Последнее устройство снова соединяется с микропроцессором, так что последовательные данные смещаются через один большой сдвиговый регистр. Это упрощает оборудование и хорошо работает в системах, где все устройства всегда сэмплируются или обновляются одновременно. Но если требуются данные только одного устройства, то потребуется смещаться через другие устройства SPI в цепочке, чтобы добраться до его данных.

Варианты конфигурации двух подчиненных устройств SPI

Рис. 3.4. Варианты конфигурации двух подчиненных устройств SPI

Во второй конфигурации SPI каждое устройство имеет свой собственный сигнал выбора элемента памяти, и все они функционируют как независимые сдвиговые регистры. Вспомните, что если устройство не выбрано, оно определяет для своего выхода третье состояние. Выходы можно соединить вместе, но только одно устройство в данный момент может быть активировано. Это обеспечивает независимое чтение и запись устройств SPI. Недостатком является то, что требуется больше линий выхода для сигналов выбора элементов памяти. SPI поддерживает также несколько ведущих устройств шины. Скорости генераторов устройств SPI могут изменяться от 30 kHz до 3 MHz. Обычно устройства SPI будут помещать новые данные на своих выходах во время падающего фронта такта, и данные будут поступать внутрь на растущем фронте такта. Внимательно проверяйте техническое описание устройства SPI, так как эта схема иногда различается.

SPI называют также Microwire в ИС компании National Semiconductor. Технические описания устройств SPI компании Motorola часто используют другие названия для сигналов SPI. CS может появиться как SS, SDI как MOSI, и SDO как MISO. Устройства SPI доступны также с несколькими другими уровнями напряжения питания в диапазоне от 2.3 до 5 вольт. SPI использует обычный генератор и стандартные уровни напряжения логики. Это делает аппаратный интерфейс проще, чем последовательное устройство RS-232C, но он также спроектирован для более коротких расстояний, таких как одна монтажная печатная плата (PCB).

Интерфейс шины I2C

Чтобы соединять интегральные схемы на одной монтажной печатной плате также в 1980-е годы появилась шина Inter IC (I2C). Доступен широкий ассортимент ИС и микропроцессоров с интерфейсом I2C, используемым для последовательной передачи данных на другие ИС. Подобно SPI последовательный интерфейс имеет аппаратное преимущество в том, что требует меньше контактов и проводников на монтажной печатной плате, при условии достаточности полосы пропускания.

Шина I2C имеет только два сигнальных провода, SCL и SDA. SCL действует как линия синхронизации, а SDA может действовать как 1-битная последовательная линия данных или как 1-битная последовательная адресная линия. Также требуется, конечно, общая линия заземления. Линии сигналов I2C являются открытыми стоками. В данном случае это означает также, что они управляются только низким сигналом и единственный внешний нагрузочный резистор делает сигнал линии высоким (когда ни одно устройство не делает его низким).

С помощью дополнительных логических вентилей выход с тремя состояниями может моделировать выход со свободным стоком, делая его выходом с тремя состояниями, когда сигнал бита должен становиться высоким.

Устройства I2C являются либо ведущими, либо подчиненными. Подчиненные отвечают на запросы ведущего. Подчиненному устройству I2C присваивается уникальный 7-битный адрес шины I2C. Так как I2C имеет адресную информацию, то протокол этой шины более сложный, чем шины SPI. Вспомните, что SPI использует линии выбора элемента памяти и не имеет адресов.

Когда микропроцессору (контроллеру) необходимо соединиться с устройством I2C (подчиненным), он посылает стартовую последовательность. Чтобы остановить последовательность I2C, микропроцессор посылает стоп-последовательность.

На рисунке 3.5 отметим, что только во время старт-последовательности SDA изменятся из высокого низким при высоком SCL. Отметим также, что только во время стоп-последовательности SDA изменяется из низкого в высокий при высоком SCL. Это позволяет специальной логической схеме обнаружить старт и стоп.

Микропроцессор управляет линиями синхронизации SCL для передачи каждого последовательного бита SDA. Устройства I2C могут управлять низким сигналом SCL для создания ожидания состояния. Типичные скорости передачи лежат в интервале от 100 kHz до 400 kHz.

Проверяйте детали в техническом описании каждого устройства.

Каждая передача адреса и данных содержит всего девять битов. Восемь битов данных с битом подтверждения (ACK), который используется для квитирования. Биты посылаются в порядке от старших к младшим битам, по одному за такт. Используются семь битов адреса, и последний восьмой бит является битом чтения/записи (R/W).

Некоторые технические описания описывают это как восемь адресных битов, где четные адреса используются для чтения, а нечетные адреса для записи, исключая бит R/W.

Подчиненный посылает последний бит подтверждения (ACK) в каждый адрес, и данные пересылаются. Низкое состояние ACK указывает, что подчиненный готов. Когда состояние ACK не будет низким, микропроцессор может послать стоп-последовательность.

Когда микропроцессор хочет послать данные на устройство I2C, он должен выполнить следующие операции I2C, как показано на рисунке 3.5:

  1. Микропроцессор посылает старт-последовательность I2C.
  2. Микропроцессор последовательно пересылает 7-битный адрес I2C подчиненного с битом R/W заданным как Low (т.е., операция записи)
  3. Микропроцессор последовательно пересылает 8-битный внутренний номер регистра для записи. Большинство устройств I2C имеют адрес устройства, за которым следует адрес регистра (адрес регистра в этом случае будет в поле данных, показанном на рисунке 3.5).
  4. Микропроцессор последовательно пересылает 8-битные значения данных.
  5. Микропроцессор посылает стоп-последовательность.
Последовательная передача интерфейса I2C 8-битного значения данных

Рис. 3.5. Последовательная передача интерфейса I2C 8-битного значения данных

Как показано на рисунке 3.5, когда микропроцессор хочет прочитать данные из устройства I2C, он должен выполнить следующие операции шины I2C:

  1. Микропроцессор посылает старт-последовательность.
  2. Микропроцессор последовательно пересылает 7-битный адрес I2C подчиненного с битом R/W заданным как Low.
  3. Микропроцессор последовательно пересылает 8-битный внутренний номер регистра для чтения.
  4. Микропроцессор последовательно пересылает повторяющуюся стартовую последовательность I2C.
  5. Микропроцессор последовательно пересылает 7-битный адрес I2C подчиненного с битом R/W заданным как High (т.е., операция чтения).
  6. Микропроцессор последовательно пересылает 8-битные значения данных.
  7. Микропроцессор посылает стоп-последовательность.

В одном из стандартов 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 конвертора со схемами сэмплирования и удержания, и восьми-канальный мультиплексор входа, который активирует его для чтения восьми внешних аналоговых входов.

10-битная 200Ks/sec  A/D микросхема MCP3008, используемая в модулях Phidget, имеет интерфейс SPI

Рис. 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.

< Лекция 2 || Лекция 3: 123456 || Лекция 4 >