Контроллер Fourbit SPI
Предложен вариант устройства для управления четырьмя независимыми цифровыми линиями с получением команд по шине SPI. Поскольку одной из логических линий предполагается управлять двумя реле, коммутирующими включение одного из двух компонент в радиочастотный тракт, для обеспечения неразрывности последнего данная линия представлена двумя физическими — так, что отключение одного из компонент происходит лишь при гарантированном паспортными данными реле (другими словами, с задержкой не менее 10 мс) включении в тракт другого компонента.
Аппаратная реализация
Контроллер реализован на основе МК ATmega48PA 8-разрядной архитектуры AVR. Выбор данной архитектуры обусловлен ее сравнительной простотой, широкой номенклатурой доступных МК, хорошим знакомством с ней разработчиков устройства. Конкретный МК выбран как один из наиболее дешевых с достаточной (22 бита) разрядностью порта ввода-вывода общего назначения.
Устройство управляется как ведомое по шине SPI, состоящей из сигналов выбора устройства (/CS), тактирования (SCK), ввода и вывода ведущего (MISO, MOSI; соответственно вывод и ввод ведомого.)
Для проверки корректности работы контроллера (в т. ч. при диагностике неполадок) в устройстве предусмотрены пять светодиодных индикаторов состояния физических линий, а равно индикатор готовности (свечение) и получения команд (мерцание с частотой порядка 3 Гц.)
Управляемые линии
Устройство формирует сигналы на пяти линиях — DO0, …, DO3 и EO0 (а также служебной линии индикации готовности RDY), причем:
- состояние линий DO1, …, DO3 может быть произвольно изменено в любой момент времени;
- изменение состояния линий DO0, EO0 возможно только при равенстве их логических уровней; (при инициализации устройства обе линии выставляются в 0.)
При изменении состояния логической линии DO0 изменение состояния физических линий DO0, EO0 выполняется следующим образом:
- непосредственно по получению команды состояние линий изменяется на 0, 1, соответственно; (в радиочастотный тракт включены параллельно оба коммутируемых компонента);
- через гарантированное время срабатывания реле, (10 ÷ 20) мс, выполняется переключение обеих линий в целевое состояние; (в радиочастотном тракте остается лишь выбранный компонент.)
Управление по шине SPI
Взаимодействие устройств по шине SPI носит, в общем случае, обменный характер: ведущее устройство одновременно передает ведомому и получает от него же по одному октету данных. В данном контроллере:
- передаваемый ведущим октет содержит код желаемого состояния четырех логических линий DO0, …, DO3;
- передаваемый ведомым октет содержит код фактического состояния этих же линий на момент начала обмена.
Ввиду последнего, а также поскольку состояние DO0 не может быть изменено мгновенно, рекомендован следующий алгоритм взаимодействия с контроллером:
- вычислить и передать на устройство октет кода желаемого состояния;
- вычислить текущее состояние из полученного в ответ кода;
- диагностировать ошибку связи и повторить с п. 1 — если обнаружена ошибка декодирования;
- сравнить текущее состояние с желаемым; ждать 20 мс — если состояние логической линии DO0 отличается от желаемого;
- повторить передачу кода желаемого состояния, получив код текущего в ответ;
- диагностировать ошибку связи и повторить с п. 5 — если обнаружена ошибка декодирования, или с п. 4 — если текущее состояние отличается от желаемого.
Для корректной синхронизации рекомендуется между обменами по шине выдерживать паузу не менее 10 мкс, в течение которой линия /CS устройства должна быть неактивна (т. е., в состоянии логической 1.)
Код обмена данными
Единицей обмена данными между ведущим SPI-устройством и данным контроллером является октет, содержащий состояние четырех управляемых логических линий DO0, …, DO3 в коде Хэмминга[8, 4], позволяющем устранять одиночные ошибки и выявлять двойные. При этом:
- старшие четыре бита октета содержат непосредственно состояние логических линий;
- младшие четыре бита являются битами четности;
- в отсутствие ошибок передачи, или при четном их числе, октет является четным.
При декодировании вычисляется четность 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
- программа преобразователя UART ↔ SPI;
src/uart-pd.c
- программа считывания состояния порта
D
МК и передачи его через UART.
Испытания
Предполагается проведение следующих испытаний.
- Кодирование и шина SPI
Контроллер подключен к ПК через адаптер USB ↔ SPI. Выполняется передача случайных байт. Фиксируется:
- количество ошибок декодирования ответных октетов;
- соответствие ответов запросам;
- время задержки переключения линии DO0.
- Управление физическими линиями
То же, но добавлен адаптер чтения физических линий. Выполняется передача случайных байт. Фиксируется корректность изменения состояния линий.