УДК 004.324

Использование последовательного периферийного интерфейса (SPI) для связи процессора и внешних устройств

Степаненко С. В., Meister E., Шевченко О. Г.
ДонНТУ — Universität Stuttgart IPVS
Источник: Информатика и компьютерные технологии — 2009 / Материалы V международной научно-технической конференции студентов, аспирантов и молодых учёных. — Донецк, ДонНТУ — 2009. — 521 с. С. 97–103


Основной задачей проектов Symbrion, Replicator, в которых я принимаю участие в ходе научного сотрудничества со Штутгартским университетом, является исследование и разработка принципов адаптации и эволюции роботехнических организмов, состоящих из большого количества отдельных роботов, которые могут соединяться друг с другом, делиться энергией и вычислительными ресурсами. Такие организмы могут динамически перестраивать свою структуру, определяя наиболее подходящую в данный момент форму и взаимодействовать с окружающим миром при помощи датчиков и исполнительных механизмов. Модель эволюционирования таких коллективов роботов обеспечивает их конфигурирование, масштабируемость и приспособление к условиям окружающей среды без участия человека. При этом возможно самостоятельное перепрограммирование роботов с получением новой, непредусмотренной заранее функциональности [1].

При разработке различных устройств обязательно возникает проблема передачи информации между центральным процессором и периферией. Под периферией можно понимать как дополнительные процессоры, так и различные внешние устройства, например карты памяти.

В разрабатываемых роботах центральным процессором был выбран процессор семейства ADI Blackfin, два ядра которого предоставляют достаточную производительность для обработки всей поступающей информации и в то же время динамическое управление энергопотреблением позволяет экономить заряд аккумуляторов, когда большой вычислительной мощности не требуется. Периферией в данном случае оказались:

  • процессор архитектуры ARM9, управляющий исполнительными механизмами;
  • микроконтроллер MSP430, получающий информацию с датчиков;
  • карта памяти SD.

Одним из интерфейсов, который может использоваться для этой цели, является последовательный периферийный интерфейс (англ. Serial Peripheral Interface — SPI).

В ходе научного сотрудничества со Штутгартским университетом была поставлена задача исследовать целесообразность использования SPI как основного интерфейса обмена информацией между внутренними устройствами робота.

SPI — популярный интерфейс для последовательного обмена данными между микросхемами. Интерфейс SPI, наряду с I²C (Inter-Integrated Circuit — последовательная шина данных), относится к самым широко-используемым интерфейсам для соединения микросхем. Изначально он был придуман компанией Motorola, а в настоящее время используется в продукции многих производителей. Его наименование является аббревиатурой от «Serial Peripheral Interface Bus», что отражает его предназначение — шина для подключения внешних устройств. Шина SPI организована по принципу «ведущий-подчиненный». SPI также иногда называют четырёхпроводным (англ. four-wire) интерфейсом [2].

В отличие от стандартного последовательного порта (англ. standard serial port), SPI является синхронным интерфейсом, в котором любая передача синхронизирована с общим тактовым сигналом, генерируемым ведущим устройством (процессором). Принимающая периферия (ведомая) синхронизирует получение битовой последовательности с тактовым сигналом. К одному последовательному периферийному интерфейсу ведущего устройства-микросхемы может присоединяться несколько микросхем. Ведущее устройство выбирает ведомое для передачи, активируя сигнал «выбор кристалла» (англ. chip select) на ведомой микросхеме. Периферия, не выбранная процессором, не принимает участия в передаче по SPI.

В SPI используются четыре цифровых сигнала [3]:

  • MOSI или SI — выход ведущего, вход ведомого (англ. Master Out Slave In). Служит для передачи данных от ведущего устройства ведомому.
  • MISO или SO — вход ведущего, выход ведомого (англ. Master In Slave Out). Служит для передачи данных от ведомого устройства ведущему.
  • SCLK или SCK — последовательный тактовый сигнал (англ. Serial CLocK). Служит для передачи тактового сигнала для ведомых устройств.
  • ~CS или ~SS — выбор микросхемы, выбор ведомого (англ. Chip or Slave Select).

Самое простое подключение, в котором участвуют только две микросхемы, показано на рисунке 1. Здесь, ведущий передает данные по линии MOSI синхронно со сгенерированным им же сигналом SCLK, а подчиненный захватывает переданные биты данных по определенным фронтам принятого сигнала синхронизации. Одновременно с этим подчиненный отправляет свою посылку данных. Чтобы подчиненная ИС принимала и передавала данные, помимо наличия сигнала синхронизации, необходимо также, чтобы линия SS была переведена в низкое состояние. В противном случае, подчиненная ИС будет неактивна [4].

Простейшее подключение к шине SPI
Рисунок 1 — Простейшее подключение к шине SPI

В ходе исследований были разработаны подпрограммы работы с файловыми системами класса FAT на картах памяти типов MMC и SD (включая также карты нового типа высокой ёмкости — SDHC). Данные подпрограммы предназначены для работы на процессоре архитектуры ARM под управлением операционной системы реального времени SymbricatorOS. Эффективность использования SPI доказана возможностью работы с картами памяти на любой частоте, вплоть до верхнего предела рабочей частоты карты в 25 МГц [5].

Как уже говорилось, центральным процессором в роботе будет процессор семейства ADI Blackfin. Данные процессоры также имеют интерфейс SPI, но могут работать только в качестве ведущих устройств. При этом к процессору можно подключить до 8 ведомых устройств, выбор устройства осуществляется низким уровнем на соответствующем выводе ~SS (~CS) [6]. Пример параллельного подключения устройств показан на рисунке 2.

Параллельное подключение устройств к шине SPI
Рисунок 2 — Параллельное подключение устройств к шине SPI

Процессоры семейства Blackfin работают с операционной системой μClinux (от англ. MicroController Linux) — Linux-подобной встраиваемой операционной системой для микроконтроллеров, не имеющих блока управления памятью [7].

Была протестирована работа с картами памяти по шине SPI и на этом процессоре. К преимуществам можно отнести простоту управления картами памяти в режиме SPI.

Также исследовалась возможность передачи информации между несколькими устройствами: процессорами Blackfin (ведущий), ARM (ведомый), MSP (ведомый), карта памяти (ведомая).

После всех исследований стало возможным более полно определить достоинства и недостатки интерфейса SPI по сравнению с другими интерфейсами, которые можно использовать для тех же целей (например I²C — Inter-Integrated Circuit, CAN — Controller-area network, RS-232 и другие).

Преимущества:

  • Полная дуплексная связь
  • Значительно более высокая пропускная способность (до 50 Мбит/с [3]), чем у I²C (максимум 4,3 Мбит/с [8]) или SMBus (10 — 100 кбит/с [9])
  • Гибкость протокола для передачи битов
    • Не ограничивается 8-разрядными словами
    • Произвольный выбор размера сообщений, содержания и цели
  • Чрезвычайно простой аппаратный интерфейс
  • Потребление меньшего количества электроэнергии, чем необходимо для I²C или SMBus благодаря отсутствию нагрузочных резисторов, обязательных для I²C или SMBus [8, 9]
  • Нет конфликтных ситуаций общего доступа к шине и связанных с ними режимов обнаружения ошибок
  • Ведомые устройства используют сигнал синхронизации ведущего, и поэтому не нужна высокая точность синхронизации
  • Ведомым устройствам не нужен уникальный адрес — в отличие от I²C, GPIB или SCSI
  • Не нужны приёмопередатчики
  • Используется намного меньше выводов микросхем, контактов в разъёмах и кабелей, чем параллельные интерфейсы, где необходим минимум 1 провод на бит
  • Используется всего один «уникальный» сигнал на устройство (выбор кристалла); остальные являются общими
  • Сигналы однонаправлены, позволяющие легко реализовать гальваническую развязку

Недостатки:

  • Требуется больше выводов микросхем (3+n, где n — количество ведомых устройств [4]), чем I²C (всегда достаточно двух выводов [8])
  • Нет адресации по общим сигналам: необходим уникальный сигнал «выбор кристалла»
  • Нет аппаратного управления потоком
  • Нет аппаратного подтверждения приёма от ведомого устройства
  • Поддерживается только одно ведущее устройство
  • Нет официального стандарта
  • Передача только на короткие расстояния по сравнению с RS-232, RS-485 или CAN-BUS

После анализа недостатков стало ясно, что для поставленной задачи — связи процессора и периферийных устройств робота, интерфейс SPI подходит больше остальных, т.к. он

  • обладает наивысшей скоростью передачи данных,
  • потребляет меньшее количество энергии,
  • является единственным интерфейсом из рассмотренных, который поддерживают SD/MMC карты памяти.

Было принято решение в дальнейшей разработке проекта для внутренней коммуникации использовать именно интерфейс SPI.


Ссылки на литературу:

  1. SYMBRION REPLICATOR [Электронный ресурс]. — Режим доступа:
    http://www.symbrion.eu/tiki-index.php?page=homepage

  2. SPI — PICmicro Serial Peripheral Interface [Электронный ресурс]. — Режим доступа:
    http://ww1.microchip.com/downloads/en/DeviceDoc/spi.pdf

  3. Serial Peripheral Interface [Электронный ресурс]. — Режим доступа: http://ru.wikipedia.org/wiki/Serial_Peripheral_Interface

  4. Последовательный интерфейс SPI [Электронный ресурс]. — Режим доступа: http://www.gaw.ru/html.cgi/txt/interface/spi/index.htm

  5. JEDEC MMC 4.4 Standard Pg.7 [Электронный ресурс]: 2008. — Режим доступа: http://www.jedec.org/download/search/JESD84-A44.pdf

  6. ADSP-BF561: Blackfin Symmetric Multi-Processor for Consumer Multimedia [Электронный ресурс]: 2009. — Режим доступа:
    http://www.analog.com/static/imported-files/data_sheets/ADSP-BF561.pdf

  7. Open Source Software on the Blackfin Processor [Электронный ресурс]. — Режим доступа: http://docs.blackfin.uclinux.org/doku.php

  8. I²C Bus Interfacing and Tools [Электронный ресурс]. – Режим доступа: http://www.i2cbus.com/

  9. System Management Bus (SMBus) Specification, version 2 [Электронный ресурс]. – Режим доступа: http://www.smbus.org/specs/smbus20.pdf