Обратный инжиниринг серийный протокол - PullRequest
0 голосов
/ 08 октября 2019

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

Вот один пример связи чтения одного регистра:

< 2019/10/08 18:46:21.936528  length=13 from=0 to=12
 02 00 01 10 a3 00 17 01 10 a2 16 24 03
> 2019/10/08 18:46:21.947386  length=1 from=0 to=0
 06
> 2019/10/08 18:46:21.990617  length=9 from=1 to=9
 02 20 01 01 00 00 20 26 03
< 2019/10/08 18:46:21.991501  length=1 from=13 to=13
 06
> 2019/10/08 18:46:21.999473  length=16 from=10 to=25
 02 21 01 14 00 0c 01 01 0c 00 0c 01 05 0c 01 01
> 2019/10/08 18:46:21.999719  length=12 from=26 to=37
 0c 01 01 0c 01 01 0c 01 01 3c b1 03
< 2019/10/08 18:46:22.000367  length=1 from=14 to=14
 06
> 2019/10/08 18:46:22.008810  length=16 from=38 to=53
 02 22 01 10 b5 00 0c 01 10 a2 0c 01 10 a2 0c 01
> 2019/10/08 18:46:22.009059  length=16 from=54 to=69
 10 a3 0c 01 01 0c 01 01 0c 01 01 0c 01 01 38 b6
> 2019/10/08 18:46:22.009221  length=1 from=70 to=70
 03
< 2019/10/08 18:46:22.009699  length=1 from=15 to=15
 06
> 2019/10/08 18:46:22.018275  length=16 from=71 to=86
 02 23 01 10 b5 00 0c 01 10 a3 0c 01 1a 0c 01 05
> 2019/10/08 18:46:22.018434  length=16 from=87 to=102
 0c 01 01 0c 01 10 a2 0c 01 01 0c 01 01 25 d3 03
< 2019/10/08 18:46:22.019009  length=1 from=16 to=16
 06
> 2019/10/08 18:46:22.027574  length=16 from=103 to=118
 02 24 01 10 b5 00 0c 01 04 0c 01 01 0c 01 05 0c
> 2019/10/08 18:46:22.027786  length=14 from=119 to=132
 01 01 0c 01 01 0c 01 01 0c 01 01 3d bb 03
< 2019/10/08 18:46:22.028465  length=1 from=17 to=17
 06
> 2019/10/08 18:46:22.032601  length=8 from=133 to=140
 02 25 01 00 00 24 29 03
< 2019/10/08 18:46:22.033328  length=1 from=18 to=18
 06

В ответе закодирована эта таблица:

1,0,5,1,1,1,1
2,2,3,1,1,1,1
3,26,5,1,2,1,1
4,1,5,1,1,1,1

Я уже обнаружил, что связь основана на сообщениях, которые начинаются с байта 02 и заканчиваются 03. После каждого сообщения второе устройство возвращает 06, чтобы подтвердить, что оно успешно получило сообщение, и после этого может быть отправлено другое сообщение. Если сообщение содержит один из этих управляющих байтов, оно преобразуется в последовательность 10 a2 для 02 и т. Д.

Первая строка сообщения выше содержит команду. Байты до тех пор, пока байт 17 в примере не является общим для каждой команды, которую я пробовал. Байт 17 устанавливает номер регистра для работы и байт 01 после того, как он устанавливает команду «Чтение». Последовательность 16 24 кажется некоторой контрольной суммой, которую я не знаю.

Сообщения таблицы, кажется, являются одним начальным и одним конечным сообщением. После запуска есть некоторый тип индексации сообщения, начинающегося с байта 20 и увеличивающегося с каждым сообщением.

Я знаю, как анализировать данные в сообщениях, но я не знаю, как вычислять контрольные суммыи что означает байты в заголовках (в сообщении 21 это может быть длина, но в других сообщениях это не так).

...