ПРОТОКОЛ LINKBELL, ВЕРСИЯ 1.0
Официальное описание
Протокол
LinkBell предназначен для организации передачи небольших объёмов информации в сетях устройств, содержащих в своём составе микроконтроллеры и компьютеры.Протокол
LinkBell относится к протоколам пакетного типа, то есть подлежащая передаче информация разбивается на дискретные блоки (кадры), сопровождаемые служебной информацией.Протокол
LinkBell является байт-ориентированным, информация передаётся байтами последовательно с обрамлением старт-бита и одного стоп-бита.Особенность сигнала, формируемого протоколом
LinkBell: в любом месте сигнала подряд следует не более двух одинаковых битов, а число нулей равно числу единиц на любом промежутке времени длиной не менее байта. Протокол LinkBell обеспечивает прозрачность передачи данных.Ограничения
Сетевой идентификатор (адрес) любого устройства представлен числом длиной 2 байта, старший бит адреса устройства должен быть всегда равен нулю. Адрес 0000h запрещён, адрес 7FFFh - широковещательный. Остальные значения могут быть использованы. Таким образом, в одной сети может быть адресовано до 32766 устройств.
Протокол LinkBell обеспечивает возможность ретрансляции передаваемых данных. Список сетевых идентификаторов (адресов) ретрансляторов может включать не более чем 5 ретрансляторов.
Уровни протокола
В рамках протокола LinkBell задействовано 4 уровня из семи, предусмотренных семиуровневой моделью протокола.
Прикладной уровень
Информация прикладного уровня - информация, подлежащая доставке от источника к приёмнику. Протокол LinkBell обеспечивает прозрачность передачи информации, то есть она может представлять собой любое количество байтов (реально оно ограничено возможностями аппаратуры), а каждый байт может принимать любое значение.
Сетевой уровень
На сетевом уровне указывается сетевой идентификатор (адрес) получателя информации прикладного уровня, а также (при необходимости) маршрут ретрансляции, то есть список сетевых идентификаторов (адресов) устройств, которые должны доставить информацию получателю. Протокол LinkBell предусматривает только последовательную ретрансляцию.
Формат сетевого уровня следующий: первые несколько (от 6 до 16) байтов представляют собой заголовок сетевого уровня, за ним следует информация прикладного уровня. Заголовок состоит из следующего (в порядке следования):
один байт - длина заголовка в байтах;
один байт - флаги (в данной версии протокола LinkBell флаги не определены, значение байта флагов должно быть равно 00h);
два байта
- сетевой идентификатор устройства-получателя;два байта - сетевой идентификатор устройства-отправителя;
далее следует список ретрансляторов (количеством не более 5), сетевой идентификатор каждого занимает два байта. Список начинается с последнего (самого ближнего к получателю) ретранслятора, а заканчивается первым (самым ближним к отправителю информации).
Значения всех сетевых идентификаторов могут быть в диапазоне от 1 до 32766 (в шестнадцатиричном виде от 0001h до 7FFEh), то есть старший бит адреса всегда должен быть нулевым. Единица в старшем бите адреса означает, что уазанный адрес является групповым. В данной версии протокола LinkBell групповая адресация не поддерживается.
Сетевой идентификатор 32767 (7FFFh) - широковещательный адрес, то есть пакет с этим адресом получателя должен быть принят всеми устройствами данной сети. Сетевой идентификатор 0 (0000h) - адрес пустого устройства, этим значением допускается подменять адреса в списке ретрансляторов по мере прохождения пакета через ретрансляторы.
Все адреса размещаются в заголовке, начиная со старшего байта.
Канальный уровень
Информация канального уровня, называемая кадром, готовится следующим образом. Информация сетевого уровня делится на блоки по 16 байтов. Каждый (в том числе последний, который может быть длиной менее 16 байтов) блок защищается кодом CRC16, определяемым по полиному X16+X15+X2+X0, или (в виде двоичного значения) 11000000000000101b.
Перед вычислением переменная CRC должна быть инициализирована значением,
равным (FFFFh-SYSID), где SYSID (двухбайтовое число) - идентификатор сети. Для проводных сетей значение идентификатора сети устанавливается равным нулю, для радиосетей - уникальному (отличному от других сетей, использующих протокол LinkBell) числу, начиная от 1. В смешанных сетях (часть сети - радиоканальная, часть - проводная) идентификатор сети устанавливается как в радиосетях, то есть ненулевой. Если в сети исключается взаимное (с другими сетями) проникновение сигналов, то для неё идентификатор сети устанавливается равным нулю.Процедура расчёта CRC (за основу взято описание процедуры расчёта
CRC из описания протокола ModBus):1. Подготовить значение полинома: удалить старший бит полинома и
переставить остальные биты в обратной последовательности, получив таким образом число 1010000000000001b = A001h.2. Загрузить 16-разрядный регистр числом (
FFFFh-SYSID).3. Выполнить операцию XOR над первым байтом данных и старшим байтом
регистра. Поместить результат в регистр.4. Сдвинуть регистр на один разряд вправо.
5. Если выдвинутый вправо (из регистра) бит - единица, то выполнить
операцию XOR между регистром и значением полинома (A001h).6. Повторять шаги 3 и 4 до тех пор, пока не будут выполнены 8 сдвигов
регистра.7. Выполнить операцию XOR над следующим байтом данных и регистром.
8. Повторять шаги 4...7 до тех пор, пока не будет выполнена операция
XOR над всеми байтами и регистром.9. Содержимое регистра представляет собой двухбайтовое значение CRC.
Здесь XOR означает операцию побитового исключающего ИЛИ.
Двухбайтовое значение CRC передаётся начиная со старшего байта. Порядок
следования битов в байтах CRC аналогичен порядку передачи любых других байтов, то есть начиная с младшего бита. В отличие от общепринятого положения, код CRC передаётся перед защищаемым блоком.Подготовленная таким образом информация далее обрабатывается следующим
образом. Каждый байт разбивается на два ниббла (тетрады, последовательности из четырёх битов) - старший и младший, после чего каждый ниббл кодируется байтом в соответствии со следующим:
Значение ниббла |
Значение байта |
0h |
55h |
1h |
56h |
2h |
59h |
3h |
5Ah |
4h |
65h |
5h |
66h |
6h |
69h |
7h |
6Ah |
8h |
95h |
9h |
96h |
Ah |
99h |
Bh |
9Ah |
Ch |
A5h |
Dh |
A6h |
Eh |
A9h |
Fh |
AAh |
Байт кодируется двумя байтами, причём вначале следует байт, соответствующий
старшему нибблу, затем - младшему.Перед полученной таким образом последовательностью байтов помещается
маркер начала кадра - байт, значение которого 2Bh, после неё – маркер конца кадра - байт, значение которого 4Bh.Общая длина кадра не должна превышать значения, установенного для
конретного устройства.Физический уровень
Перед передачей кадра может передаваться преамбула – повторяющаяся последовательность из байтов со значениями B2h и 4Dh. Длина преамбулы определяется временем выхода передающих и приёмных устройств на рабочий режим, но не должна быть короче четырёх указанных последовательностей, то есть восьми байтов. В сетях, в которых отсутствуют шумы и помехи в отсутствие сигнала, а также между кадрами, идущими без промежутка, преамбулу разрешается не передавать. Допускается в качестве преамбулы применять и другие значения байтов, если они не совпадают со значениями байтов, кодирующих нибблы, а также со значениями маркеров начала и конца кадра.
Каждый байт передаётся в обрамлении старт-бита и одного стоп-бита. Значение старт-бита - нуль, стоп-бита - единица. Байт передаётся начиная с младшего бита. Количество битов в байте - 8, бит контроля чётности не передаётся. Скорость передачи информации определяется для каждой сети, исходя из возможностей канала связи, и в процессе работы не меняется.
Физическая реализация каналов связи может быть любой, позволяющей
организовать передачу последовательных данных.Контроль валидности информации
Устройство, осуществляющее приём информации, производит проверку на канальном уровне:
каждого байта, находящегося между маркерами начала и конца кадра, на соответствие их значениям, указанным в таблице;
совпадения значения CRC16, подсчитанного для каждого полного и неполного 16-байтного блока, со значением, переданным перед этим блоком;
максимального количества байтов, находящихся между маркерами начала и конца кадра.
Кадр, не удовлетворяющий хотя бы одному условию, считается повреждённым и не должен обрабатываться.
(с) Michael G. Belousoff