protocols stack over pyserial (slip + crc16)
Project description
СКБ-шный стек протоколов обмена через "последовательный порт"
- Передача:
-> CRC16 -> SLIP -> UART
. - Прием:
<- CRC16 <- SLIP <- UART
.
CRC16
-> канальный уровень, контроль целостности пакетов (на библиотеке crcmod).
SLIP
-> канальный уровень, для деление потока на пакеты (https://tools.ietf.org/html/rfc1055).
UART
-> физический уровень (на библиотеке pyserial).
Для контроля целостности пакета используется контрольная сумма CRC-16
, рассчитываемая
по алгоритму CRC-16 CCITT REVERSED
(полином – 0x1021
, начальное значение – 0хFFFF
).
CRC
рассчитывается по данным до их преобразования в пакет, передается после данных младшим байтом вперед.
Байты CRC
входят в состав пакета, т.е. подлежат перекодировке по SLIP
.
Информационные сообщения между устройствами пересылаются в виде пакетов кодированных SLIP
-ом:
признаком конца пакета является байт со значением 0хC0
.
байт данных со значением 0хC0
заменяется последовательностью байт 0хDB 0хDC
;
байт данных со значением 0хDB
заменяется последовательностью байт 0хDB 0хDD
.
Для повышения помехоустоичивости обмена применяется 0хС0
перед пакетом.
Структура пакета - 0хС0, data bytes..., crc16L, crc16H, 0хС0
.
Пример использования:
from sdg_io import SdgIO, rand_bytes
p = SdgIO('COM1', '115200_O_2')
p.write(rand_bytes(mtu=256)) # — send msg —
print(p.read(timeout=.3)) # — recive msg —
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.