Режим Clock/Data
В режиме clock/data последовательный порт может принимать данные напрямую от любого устройства с интерфейсом clock/data, или «магнитной полосы» (magstripe), например считывателя карт. Порт также может выдавать данные в формате clock/data, как будто он сам является считывателем карт. Интерфейсы magstripe и clock/data популярны в системах безопасности, контроля доступа, автоматизации и банковской сфере.
Стандартная передача clock/data показана ниже. Используются две линии данных: clock и data. Каждый отрицательный переход на линии clock отмечает начало бита данных. Сами данные передаются по линии data. Когда на линии data LOW, это бит данных 1, и наоборот. Стандартных временных параметров clock/data не существует, а некоторые устройства, например немоторизованные считыватели магнитных карт, выдают данные с переменной скоростью (в зависимости от того, как быстро пользователь проводит картой).
Интерфейс magstripe отличается от clock/data только наличием третьей линии - card present («карта на месте»). На этой линии устанавливается LOW перед передачей данных и возвращается HIGH после её окончания. Для приёма данных последовательному порту линия card present не нужна. Как и в случае данных Wiegand, конец входящих данных определяется по времени, прошедшему с последнего отрицательного перехода на линии clock. Для передачи данных ваше приложение Tibbo BASIC/C может легко использовать в качестве линии card present любую обычную линию ввода-вывода.
В отличие от интерфейса Wiegand, формат данных интерфейса clock/data весьма стандартизирован, и его разновидности включают стандартные форматы данных для разных «дорожек» магнитной карты. Большинство устройств clock/data, с которыми вы действительно столкнётесь, не имеют отношения к магнитным картам, но терминология сохранилась.

Последовательный порт выдаёт сигналы clock/data по линиям cout и dout, а принимает данные по линиям cin и din. Когда последовательный порт находится в режиме clock/data, приложению не следует пытаться работать с выходами cout и dout напрямую через объект io..
Помните, что в зависимости от платформы некоторые или все линии последовательного порта может понадобиться настроить как входы или выходы через свойство io.enabled объекта io.. Кроме того, при необходимости некоторые линии последовательного порта можно переназначить на другие выводы ввода-вывода устройства. Подробнее см. документацию по платформе вашего устройства (например, для EM1000 она находится здесь).
Как последовательный порт отправляет и принимает «сырые» данные clock/data
Данные clock/data с разных «дорожек» кодируются по-разному. Кодирование определяет, как «сырые» биты данных обрабатываются и преобразуются в реальные данные. Чтобы обеспечить максимальную гибкость, а также сохранить стиль обработки данных, принятый в интерфейсе Wiegand, последовательный порт оставляет преобразование между «сырыми» и реальными данными вашему приложению. Порт только отправляет и принимает «сырые» данные, не проверяя и не преобразуя их содержимое.
Как поток clock/data хранится в буферах RX и TX последовательного порта
В режиме clock/data каждый байт данных в буфере передачи (TX) или приёма (RX) последовательного порта представляет один бит потока clock/data. Этот бит записывается в позицию младшего бита каждого байта в буфере. Для удобства приложения, когда последовательный порт принимает поток бит clock/data, он добавляет к каждому биту данных смещение 30Hex. Поэтому данные, записанные в буфер приёма (RX), могут состоять только из байтов 30H и 31H (они соответствуют ASCII-символам «0» и «1»). Благодаря этому, когда приложение считывает содержимое буфера приёма (RX) в строковую переменную, данные получаются «читаемыми» без дополнительных преобразований (ASCII-символы с кодами «0» и «1» были бы «нечитаемыми»).
Когда последовательный порт выдаёт поток clock/data, он берёт только бит 0 каждого байта в буфере передачи (TX). Остальные биты могут содержать любые данные. Например, в буфер передачи (TX) можно поместить строку из ASCII-символов «0» и «1», и они будут правильно интерпретированы как биты данных 0 и 1. Это, опять же, удобно для вашего приложения Tibbo BASIC/C.
Как последовательный порт передаёт поток clock/data
Временные параметры выдачи clock/data фиксированы, и приложение не может их изменить. Данные выдаются со скоростью 400µs/бит (и фаза LOW, и фаза HIGH тактового сигнала длятся по 200µs).
Как последовательный порт принимает поток clock/data
Последовательный порт не требует от входящего потока clock/data строгого соблюдения временных параметров. Порт просто регистрирует переходы из HIGH в LOW на линии clock. Обнаружив такой переход, порт проверяет состояние линии data. Если на ней HIGH, регистрируется бит данных 0; если LOW - бит данных 1.
Конец передачи clock/data определяется по тайм-ауту: для этого у последовательного порта есть специальное свойство - «межсимвольная задержка» (см. Настройки последовательного порта). Другое свойство, «автозакрытие», позволяет отключить последовательный порт после того, как задержка истекла. Тогда по окончании выдачи clock/data порт будет отключён, и новые данные не попадут в него, пока вы снова не включите порт.
