Транспортный протокол для плат расширения

Протокол предназначен для передачи запросов и команд между платами расширения и «головным» контроллером. Платы расширения реализуют дополнительный функционал и подключают переферийные устройства к головному контроллеру. Требуется полнодуплексная связь для обеспечения возможности отправки сообщений как со стороны головного контроллера так и со стороны платы.

Платы расширения подключаются по RS-232 интерфейсу последовательно и поддерживают каскадирование (подключение цепочкой):

Головной контроллер -- RS-232 -- Плата расширения -- RS-232 -- [Платы расширения] -- RS-232 -- Плата расширения

Задача данного протокола обеспечить адресную доставку сообщений между головным контроллером и требуемой платой расширения.

Поле Длинна байт Описание
Стартовый символ 1 0xFD
Идентификатор запроса 1 Произвольное значение, не повторяющееся в рамках 2 последовательно отправленных кадров
Тип кадра 1 0x00 - запрос
0x01 - ACK
0x02 - ошибка FSC
Порядковый номер повтора 1 0x00 при первичной отправке
Адрес получателя 1 0x00 - адрес головного устройства.
При отправке сверху вниз используется адрес декркмкнтируется. 0x00 после декремента означает что сообщение предназначено данной плате.
При отправке снизу вверх адрес инкрементируется, при получении сообщения головным устройством значение примет адрес отправителя.
Данные Данные в кадре
CRC32 4 Контрольная сумма
Стоповый символ 1 0xFE

Если между стартовым и стоповым условием встречаются специальные символы (0xFD, 0xFE, 0xFF), то они кодируются в соответствии с таблицей байтстаффинга:

  • 0xFD = 0xFF02
  • 0xFE = 0xFF01
  • 0xFF = 0xFF00

Второй байт вычисляется как (спец символ) XOR 0xFF

CRC есть средство контроля целостности кадра. CRC считается над всеми полями кадра кроме стартового и стопового байт и поля самого CRC.

Используется CRC 32 c полиномом 0х4C11DB7

Вычисление CRC при передаче производится ДО проведения байтстаффинга, а при приеме сначала производится байтстаффинг, а потом производится проверка CRC.

CRC считается на данные между стартовым и стоповым байтами.

  • Инициатором обмена может являться как плата так и головной контроллер. Плата может послать сообщение только головному контроллеру, указав 0x00 в качестве адреса. Контроллер при отправке сообщение указывает порядковый номер платы в цепочке (начиная с 1).
  • После приема пакета принимающая сторона должна отправить отправителю ACK либо ошибку контрольной суммы.
  • Если инициатор запроса не получает ответа от адресата в течение 100мс, или получив ошибку контрольной суммы, он отправляет повтор (сохраняя идентификатор запроса и увеличивая порядковый номер повтора). Максимальное число повторов: 3.
  • Идентификатором кадра определяется уникальность запроса (идентификатор не должен повторяться в двух запросах подряд от одного устройства), в случае, если принимающая сторона повторно получила сообщение с предыдущим идентификатором запроса и номером повтора больше нуля, она должна отправить ACK.

Обработка данных запроса выходит за рамки данного документа.

Смотри так же

  • public/doc/hw/expand-io/transport_protocol.txt
  • Последнее изменение: 10:38 19/03/2021
  • 195.26.164.181