Контроллер Fourbit SPI

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

Аппаратная реализация

Контроллер реализован на основе МК ATmega48PA 8-разрядной архитектуры AVR. Выбор данной архитектуры обусловлен ее сравнительной простотой, широкой номенклатурой доступных МК, хорошим знакомством с ней разработчиков устройства. Конкретный МК выбран как один из наиболее дешевых с достаточной (22 бита) разрядностью порта ввода-вывода общего назначения.

Устройство управляется как ведомое по шине SPI, состоящей из сигналов выбора устройства (/CS), тактирования (SCK), ввода и вывода ведущего (MISO, MOSI; соответственно вывод и ввод ведомого.)

Для проверки корректности работы контроллера (в т. ч. при диагностике неполадок) в устройстве предусмотрены пять светодиодных индикаторов состояния физических линий, а равно индикатор готовности (свечение) и получения команд (мерцание с частотой порядка 3 Гц.)

Управляемые линии

Устройство формирует сигналы на пяти линиях — DO0, …, DO3 и EO0 (а также служебной линии индикации готовности RDY), причем:

  1. состояние линий DO1, …, DO3 может быть произвольно изменено в любой момент времени;
  2. изменение состояния линий DO0, EO0 возможно только при равенстве их логических уровней; (при инициализации устройства обе линии выставляются в 0.)

При изменении состояния логической линии DO0 изменение состояния физических линий DO0, EO0 выполняется следующим образом:

  1. непосредственно по получению команды состояние линий изменяется на 0, 1, соответственно; (в радиочастотный тракт включены параллельно оба коммутируемых компонента);
  2. через гарантированное время срабатывания реле, (10 ÷ 20) мс, выполняется переключение обеих линий в целевое состояние; (в радиочастотном тракте остается лишь выбранный компонент.)

Управление по шине SPI

Взаимодействие устройств по шине SPI носит, в общем случае, обменный характер: ведущее устройство одновременно передает ведомому и получает от него же по одному октету данных. В данном контроллере:

  1. передаваемый ведущим октет содержит код желаемого состояния четырех логических линий DO0, …, DO3;
  2. передаваемый ведомым октет содержит код фактического состояния этих же линий на момент начала обмена.

Ввиду последнего, а также поскольку состояние DO0 не может быть изменено мгновенно, рекомендован следующий алгоритм взаимодействия с контроллером:

  1. вычислить и передать на устройство октет кода желаемого состояния;
  2. вычислить текущее состояние из полученного в ответ кода;
  3. диагностировать ошибку связи и повторить с п. 1 — если обнаружена ошибка декодирования;
  4. сравнить текущее состояние с желаемым; ждать 20 мс — если состояние логической линии DO0 отличается от желаемого;
  5. повторить передачу кода желаемого состояния, получив код текущего в ответ;
  6. диагностировать ошибку связи и повторить с п. 5 — если обнаружена ошибка декодирования, или с п. 4 — если текущее состояние отличается от желаемого.

Для корректной синхронизации рекомендуется между обменами по шине выдерживать паузу не менее 10 мкс, в течение которой линия /CS устройства должна быть неактивна (т. е., в состоянии логической 1.)

Код обмена данными

Единицей обмена данными между ведущим SPI-устройством и данным контроллером является октет, содержащий состояние четырех управляемых логических линий DO0, …, DO3 в коде Хэмминга[8, 4], позволяющем устранять одиночные ошибки и выявлять двойные. При этом:

  1. старшие четыре бита октета содержат непосредственно состояние логических линий;
  2. младшие четыре бита являются битами четности;
  3. в отсутствие ошибок передачи, или при четном их числе, октет является четным.

При декодировании вычисляется четность p октета (как сумма всех битов по модулю 2) и синдром s, после чего рассматриваются следующие случаи:

p = 0, s = 0
ошибок не обнаружено; октет считается верным;
p = 1
одиночная ошибка; выполняется инверсия соответствующего значению s бита;
p = 0, s ≠ 0
обнаружена двойная ошибка; октет отбрасывается.

Рекомендованный алгоритм (протокол) управления устройством приведен выше.

Программное обеспечение

Программа микроконтроллера представлена следующими модулями:

src/fourbit.c
абстрактная логика устройства;
lib/hamming84.c
lib/hamming84.h
реализация кода Хэмминга[8, 4];
machine/avr/machine.c
machine/avr/machine.h
привязка абстрактной логики к конкретной аппаратной платформе.

Кроме того, с целью тестирования реализованы следующие компоненты:

machine/gnu/machine.c
machine/gnu/machine.h
привязка абстрактной логики к платформе GNU, на которой выполняется разработка контроллера;
src/h84i.perl
программа интерактивного управления контроллером;
src/uart-spi.c
программа преобразователя UARTSPI;
src/uart-pd.c
программа считывания состояния порта D МК и передачи его через UART.

Испытания

Предполагается проведение следующих испытаний.

Кодирование и шина SPI

Контроллер подключен к ПК через адаптер USBSPI. Выполняется передача случайных байт. Фиксируется:

  1. количество ошибок декодирования ответных октетов;
  2. соответствие ответов запросам;
  3. время задержки переключения линии DO0.
Управление физическими линиями

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