Транспортный протокол для плат расширения
Назначение
Протокол предназначен для передачи запросов и команд между платами расширения и «головным» контроллером. Платы расширения реализуют дополнительный функционал и подключают переферийные устройства к головному контроллеру. Требуется полнодуплексная связь для обеспечения возможности отправки сообщений как со стороны головного контроллера так и со стороны платы.
Платы расширения подключаются по RS-232 интерфейсу последовательно и поддерживают каскадирование (подключение цепочкой):
Головной контроллер -- RS-232 -- Плата расширения -- RS-232 -- [Платы расширения] -- RS-232 -- Плата расширения
Задача данного протокола обеспечить адресную доставку сообщений между головным контроллером и требуемой платой расширения.
Описание кадра
Поле | Длинна байт | Описание |
---|---|---|
Стартовый символ | 1 | 0xFD |
Идентификатор запроса | 1 | Произвольное значение, не повторяющееся в рамках 2 последовательно отправленных кадров |
Тип кадра | 1 | 0x00 - запрос0x01 - ACK0x02 - ошибка 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.
Используется CRC 32 c полиномом 0х4C11DB7
Вычисление CRC при передаче производится ДО проведения байтстаффинга, а при приеме сначала производится байтстаффинг, а потом производится проверка CRC.
CRC считается на данные между стартовым и стоповым байтами.
Порядок обмена
- Инициатором обмена может являться как плата так и головной контроллер. Плата может послать сообщение только головному контроллеру, указав
0x00
в качестве адреса. Контроллер при отправке сообщение указывает порядковый номер платы в цепочке (начиная с 1). - После приема пакета принимающая сторона должна отправить отправителю ACK либо ошибку контрольной суммы.
- Если инициатор запроса не получает ответа от адресата в течение 100мс, или получив ошибку контрольной суммы, он отправляет повтор (сохраняя идентификатор запроса и увеличивая порядковый номер повтора). Максимальное число повторов:
3
. - Идентификатором кадра определяется уникальность запроса (идентификатор не должен повторяться в двух запросах подряд от одного устройства), в случае, если принимающая сторона повторно получила сообщение с предыдущим идентификатором запроса и номером повтора больше нуля, она должна отправить ACK.
Обработка данных запроса выходит за рамки данного документа.