LAB599.RU — интернет-магазин средств связи
EN FR DE CN JP

Последовательный синхронный интерфейс SSFI

Последовательный синхронный интерфейс SSFI

Константин Кузвесов

E-mail: kuzvesov (at) list.ru
(замените (at) на @)

 
Введение

SSFI, Serial Synchronous Framed Interface - последовательный синхронный кадровый (или кадрированный) интерфейс, или последовательный синхронный интерфейс, использующий (дополнительный) сигнал кадра. По-русски это звучит, на мой взгляд, слишком длинно и коряво, но подходящего аналога лаконичному Framed я не нашел. К тому же английская аббревиатура позволяет отвлечься от длинного русского названия и сосредоточиться на сути.

Интерфейс предназначен в основном для управления различного рода устройствами, удаленными на относительно большое расстояние от ведущего устройства (контроллера). Областью возможного применения интерфейса являются также любые другие взаимодействия, требующие передачи длинных параллельных кодов на большие расстояния с невысокой скоростью, и требующие максимальной простоты реализации.

SSFI задумывался как последовательный интерфейс максимально простой для реализации. Существующие последовательные интерфейсы (RS-232, USB, I2C и т.д.) достаточно сложны для их реализации. Во-первых, они в подавляющем своем большинстве асинхронные (большинство здесь берется по тому, насколько часто интерфейс можно встретить в жизни, а не по количеству собственно интерфейсов). Во-вторых, даже синхронные интерфейсы требуют для своей реализации специализированных микросхем - тактовый сигнал в составе интерфейса позволяет накапливать передаваемые данные в сдвиговых регистрах, однако, непосредственно использовать данные на выходе регистра затруднительно, т.к. неизвестно в какой момент эти данные верны. Чтобы выделить момент окончания передачи данных, к синхронному интерфейсу был добавлен сигнал кадра.

Достоинства интерфейса:

  • простота реализации - контроллер четырех независимых шин на базе PPI К580ВВ55А, подчиненное устройство на основе ТТЛ регистров ИР13 и ИР23
  • статичность - отсутствие временных требований; позволяет, в частности, использовать элементную базу произвольного быстродействия (и, соответственно, экономичности)
  • произвольная длина транзакции, а также возможность совмещения на одной шине устройств, требующих транзакций различной длины
Недостатки интерфейса:
  • преимущественная однонаправленность - подчиненное устройство не может сделать запрос главному

Общее описание

Интерфейс определяет взаимодействие устройств двух типов: главного, или ведущего - MASTER и подчиненного, или ведомого - SLAVE. Главное устройство одно, подчиненных может быть несколько. Для передачи данных используются четыре сигнала, на линии данных используется мультиплексирование, определяемое тактовым сигналом.

    Сигнал Обозначение Контроль
    данные DATA MASTER, CLK = 0 / SLAVE, CLK = 1
    такт CLK MASTER
    кадр FRAME MASTER
    общий GND  

Протокол

    Состояние интерфейса CLK FRAME
    сброс 0 1
    последовательная запись фронт 0
    последовательное чтение спад 0
    кадр фронт фронт
    параллельная запись спад спад

Передача данных происходит при низком уровне FRAME. При низком уровне CLK очередной бит данных выдается главным устройством на линию данных и затем по фронту CLK записывается во входные последовательные (сдвигающие) регистры подчиненных устройств. Линия данных переходит в управление подчиненнго устройства, из которого производится чтение информации. Выданный на линию данных бит информации читается главным устройством по спаду CLK или непосредственно перед ним.

По одновременному фронту CLK и FRAME, индицирующему окончание транзакции, происходит запись последнего бита передаваемой информации. По одновременному спаду CLK и FRAME происходит передача накопленных в последовательных регистрах данных в параллельные (регистры хранения информации) или какая-либо другая их обработка. В этот момент данные на выходах последовательных регистров верны.

Высокий уровень FRAME при низком CLK определяет состояние сброса, во время которого очищается содержимое последовательных регистров ("последовательный сброс"). Если после этого необходима очистка параллельных регистров, то полученные в последовательных регистрах нули могут быть записаны в параллельные обычным образом ("параллельный сброс").

Реализация

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

 

Контроллер

Контроллер собирается на микросхеме программируемого параллельного интерфейса (PPI) К580ВВ55А и повторителе (а на самом деле ключе) К555ЛП8. Ключ ЛП8 осуществляет мультиплексирование линии данных, остальные сигналы контролируются непосредственно PPI. Кто будет управлять PPI - не суть важно. В данной реализации микросхема выставлена на ISA шину, но ее можно повесить на параллельный порт (LPT), если ISA в комьютере нет, а можно припаять непосредственно к процессору :-), если у вас ZX-Spectrum или другая система на Z80.

 

Некоторые комментарии:

  1. На микросхемах DD1-DD3 собран дешифратор адреса. Я не стал подробно разрисовывать, как он устроен, потому как вещь стандартная (выдает лог. 0 на выходе, когда коды на входах совпадают, и лог. 1, когда различны). Думаю, с ним никаких проблем не возникнет.
  2. PPI программируется следующим образом: младшая часть регистра C (C0..C3) - на чтение, старшая (C4..C7) - на запись, регистр B - полностью на запись, регистр A не используется. Сигналы распределяются следующим образом:
      C0..C3 = DATA0..DATA3 (чтение)
      C4..C7 = DATA0..DATA3 (запись)
      B0..B3 = CLK0..CLK3
      B4..B7 = FRAME0..FRAME3
  3. Приведенная схема неполная, но ее вполне достаточно, как мне кажется, для того, чтобы собрать такой контроллер самому.
  4. Если кого интересует, большой такой транзистор на плате контроллера - это IRF3205 и предназначен он для питания всей схемы. Применять контроллер я хотел в маленькой системе, которая может питаться от аккумулятора, поэтому разбрасываться лишними ваттами не мог.
  5. Контактов на каждый интерфейс 8 штук - в качестве кабеля планировалось использовать витую пару. Контакты следующие: три собственно интерфейс, 2 земли, 2 питания +5В и еще один - на линию IRQ (уже не помню какую), для того, чтобы ведомые устройства могли запрашивать активность со стороны контроллера.

Ведомое устройство

Теперь о ведомых устройствах. Здесь станет понятно, в чем фишка интерфейса - фишка в подобранности сигналов :-). Именно такое их сочетание довольно просто преобразуется к сигналам, понятным сдвиговым и параллельным регистрам - к #RESET, SCLK и PCLK (serial clock, parallel clock). Схемы преобразования следующие:

 

В схеме выделения сигнала #RESET небольшой подвох. Нарисованного элемента в природе (а точнее, в справочнике интегральных схем :-) не существует. Если этот элемент реализовать на одном инверторе и элементе 2И-НЕ, как это показано ниже на левом рисунке, то из-за задержки сигнала в инверторе на выходе элемента 2И-НЕ будут пояляться короткие ложные импульсы (во момент кадра - одновременного фронта CLK и FRAME), которые могут привести к сбросу последовательных ресгистров. Ложные импульсы убираются либо с помощью интергрирующей цепочки, либо с помощью задержки сигнала FRAME (правый рисунок).

 

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

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

На схеме выход Q8 регистра SREG - это выход переноса. Его можно использовать для подключения еще пары регистров, для получения 16-разрядного устройства.

Совмещение нескольких устройств на одной шине

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

Бит 0 1 2 3 4 5 6 7
Значение A0 A1 A2 A3       RD

Биты управляющего слова: A1..A3 - адрес устройства на шине, для которого предназначается данная транзакция, RD - флаг чтения из устройства. Остальные биты могут использоваться как угодно. Первым передается старший бит (7). Это позволяет строить устройства, не анализирующие управляющее слово полностью. Например, если устройство не допускает чтения, оно может анализировать лишь биты адреса, а остальные биты использовать по своему усмотрению. Однако, в таком случае контроллер должен знать на каком адресе какое устройство расположено.

Активный уровень RD = высокий, т.е. если RD = 1, то из устройства осуществляется чтение. Активный уровень RD не может быть низким, так как в этом случае сложно осуществить корректный последовательный сброс на шине - нужно предварительно позаботиться о том, чтобы все подчиненные устройства не начали одновременную передачу данных.

Вариант применения

Я тут в бассейн выбрался и придумал хорошее прменение своему SSFI :).

Там (в бассейне) часов много. Практически в каждой комнате часы. Естественно, часы там на самом деле всего одни, а остальные -
всего лишь дистанционно управляемый циферблат со стрелками.

Ну так вот, если часики сделать электронные, а время, которое они показывают, просто хранить в регистрах, то вполне можно сделать для всех этих часов одну такую шину SSFI (естественно, понадобятся усилители) и нужные показания часов просто записывать в эти регистры.

Схема получается элементарная: сдвиговые регистры + логика SSFI, регистры хранения информации, усилитель для больших семисегметных индикаторов, большие семисегментные индикаторы, все :). SSFI на двух парах витухи (UTP) плюс питание (переменное невысокое напряжение) на остальных двух ее парах. Ну а компы есть нынче везде.

Константин Кузвесов

E-mail: kuzvesov (at) list.ru



Партнеры