Режим Wiegand

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

Стандартная передача данных Wiegand показана ниже. Используются две линии данных: W0 и W1. Отрицательный импульс на линии W0 соответствует биту данных 0, отрицательный импульс на линии W1 - биту данных 1. Стандартных временных параметров Wiegand не существует, поэтому длительность импульсов и промежутков между ними сильно различается у разных устройств. В среднем длительность импульса составляет около 100µs (микросекунд), а промежуток между импульсами - обычно 20ms~100ms (миллисекунд).

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

Схема, поясняющая стандартную передачу данных Wiegand.

Последовательный порт выдаёт данные Wiegand по линиям W0out и W1out, а принимает по линиям W0&1in и W1in. «W0&1in» означает, что сигнал на этом входе должен быть логическим И выходных линий W0 и W1 подключённого устройства Wiegand (подробности ниже). Когда последовательный порт находится в режиме Wiegand, приложению не следует пытаться работать с выходами W0out и W1out напрямую через объект io..

Внимание

Помните, что в зависимости от платформы некоторые или все линии последовательного порта может понадобиться настроить как входы или выходы через свойство io.enabled объекта io.. Кроме того, при необходимости некоторые линии последовательного порта можно переназначить на другие выводы ввода-вывода устройства. Подробнее см. документацию по платформе вашего устройства (например, для EM1000 она находится здесь).

Как последовательный порт отправляет и принимает «сырые» данные Wiegand

Сейчас используется много форматов данных Wiegand. Они определяют, как «сырые» биты данных обрабатываются и преобразуются в реальные данные. Обычно есть два бита чётности - один в начале данных Wiegand, другой в конце. Однако расчёт чётности зависит от формата. Кроме того, длина выходных данных Wiegand не стандартизирована.

Из-за этого объект ser. не может проверять входящие данные Wiegand (то есть контролировать длину данных и вычислять контрольную сумму). Эта задача возлагается на ваше приложение, а объект ser. получает только «сырые» данные. Аналогично, перед отправкой данных Wiegand приложение должно подготовить их в нужном формате - объект ser. выдаст любой поток данных.

Как данные Wiegand хранятся в буферах RX и TX последовательного порта

В режиме Wiegand каждый байт данных в буфере передачи (TX) или приёма (RX) последовательного порта представляет один бит данных Wiegand. Этот бит записывается в позицию младшего бита каждого байта в буфере. Для удобства приложения, когда последовательный порт принимает поток бит Wiegand, он добавляет к каждому биту данных смещение 30Hex. Поэтому данные, записанные в буфер приёма (RX), могут состоять только из байтов 30H и 31H (они соответствуют ASCII-символам «0» и «1»). Благодаря этому, когда приложение считывает содержимое буфера приёма (RX) в строковую переменную, данные получаются «читаемыми» без дополнительных преобразований (ASCII-символы с кодами «0» и «1» были бы «нечитаемыми»).

Когда последовательный порт выдаёт данные Wiegand, он берёт только бит 0 каждого байта в буфере передачи (TX). Остальные биты могут содержать любые данные. Например, в буфер передачи (TX) можно поместить строку из ASCII-символов «0» и «1», и они будут правильно интерпретированы как биты данных 0 и 1. Это, опять же, удобно для вашего приложения Tibbo BASIC/C.

Как последовательный порт передаёт данные Wiegand

Временные параметры выдачи данных Wiegand фиксированы, и приложение не может их изменить. Импульсы данных имеют ширину 100µs, а промежутки между ними - 2ms.

Как последовательный порт принимает данные Wiegand

Вы уже знаете, что на вход W0&1in последовательного порта должно поступать логическое И выходов W0 и W1 подключённого устройства Wiegand. С этим справится простой элемент И (рисунок A ниже). Чаще встречаются элементы ИЛИ-НЕ/И, их тоже можно использовать (рисунок B). Если вы создаёте изделие, которое должно принимать и входные данные clock/data, вам может понадобиться управлять тем, что получает вход W0&1in: логическое И двух линий или только одну из них. На схеме C для этого используется дополнительная линия ввода-вывода устройства. Когда на линии управления HIGH, вход W0&1in получает логическое И линий W0 и W1. Когда на линии управления LOW, вход W0&1in получает только сигнал линии W0. Для этого нужно четыре элемента, так что хватит одной микросхемы 74HC00.

Три схемы, иллюстрирующие пример цепей Wiegand и clock/data.

Последовательный порт не требует от входящего потока данных Wiegand строгого соблюдения временных параметров. Порт просто регистрирует переходы из HIGH в LOW на линии W0&1in. Обнаружив такой переход, порт проверяет состояние линии W1. Если на ней HIGH, регистрируется бит данных 0; если LOW - бит данных 1.

Конец передачи Wiegand определяется по тайм-ауту: для этого у последовательного порта есть специальное свойство - «межсимвольная задержка» (см. Настройки последовательного порта). Другое свойство, «автозакрытие», позволяет отключить последовательный порт после того, как задержка истекла. Тогда по окончании выдачи Wiegand порт будет отключён, и новые данные не попадут в него, пока вы снова не включите порт.

Схема, поясняющая окончание передачи Wiegand.
Исходный материал Tibbo обновлён 8 августа 2022Оригинал на docs.tibbo.com · Сообщить об ошибке