Получение контрольной суммы из кадра

Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1 2 След.
Ответить
RSS
Получение контрольной суммы из кадра
 
Доброго времени суток!

Интересует вопрос, есть ли возможность получать контрольную сумму, вкладываемую в пакет по общему формат фрейма в
пакетном режиме? Подключение идёт по UART, помимо информационных байт хотелось бы также получить информацию о контрольной сумме.

Также нигде не смог найти информации, как происходит работа с ней (быть может, невнимательно прочитал документацию). Если пакет пришел и передается с модема на хост, то точно можно быть уверенным, что CRC правильная? И если CRC неправильная, то пакет байт просто не будет передан к хосту?

Спасибо за ответы!
 
Здравствуйте! Вы знаете, пока не очень понятна ситуация т.е. о каком ПО и о какой контрольной сумме идет речь. Будем предполагать, что речь идет о программном обеспечении SerialStar. Вот Вам следующая информация:
Если на передающем узле включен пакетный режим в направлении хост->модем, то контрольная сумма, включенная в пакет, используется модемом для исключения искажения данных при передаче их по UART интерфейсу. Пакет будет передан в эфир только при корректности этой самой суммы.
Для защиты данных в эфирном тракте применяются свои методы борьбы за целостность данных (контрольные последовательности и избыточное кодирование). Радиоядро принимающего модуля передает принятые данные на уровень приложения только если они прошли через эфир неискаженными.
Принимающий модем выдаст принятый пакет на UART только если получит данные от радиоядра. Таким образом имеется гарантия того, информация при передаче по радио не исказилась. Далее, если на принимающем модеме включен пакетный режим в направлении модем->хост, то формируется пакет, содержащий свою собственную контрольную сумму. Эта сумма предназначена для того, чтобы хост-система, подключенная к модему принимающей стороны, смогла детектировать искажение информации на UART интерфейсе. Эта контрольная сумма не имеет ничего общего с той суммой, которая использовалась при формировании пакета на передающем хосте, а также с контрольными последовательностями, применяемыми в эфирном протоколе.
Надеемся, что вышеприведенной информации Вам хватит для понимания процедуры передачи. Если же вопросы останутся, то напишите, пожалуйста, подробнее о Вашей задаче, применяемом ПО и настройках радиомодулей.
 
Спасибо большое за развернутый ответ!

Действительно, забыл указать, что речь идет про SerialStar. Интересовала как раз контрольная сумма между передатчиком и приемником и куда деваются пакеты, не прошедшие контроль. Теперь все стало на свои места, еще раз спасибо! :)
 
Здравствуйте еще раз!

Все-таки возникли вопросы, связанные с использованием пакетного режима. Опишу процедуру, что делаю для того, чтобы отправить пакет:
1) Мне необходимо отправить 3 тестовых байта: 0F 51 3D
2) Считаю для них CRC8: 60 (полином x^8 + x^5 + x^4 + 1)
3) Указываю тип пакета: передача данных удаленному узлу с кодом 0x01
4) Считаю количество полученных байт (без байта CRC 8) : 4 и получаю два байта размера: 00 04
5) Добавляю стартовый байт
6) В результате получаю пакет следующего вида: 7E 00 04 01 0F 51 3D 60
7) Отправляю последовательно байты. Прием-передача работает (в прозрачном режиме проверено)
8) Диод отправления на передатчике моргает, диод приема на приемнике молчит
9) Соответственно на приемнике нет отправленного пакет.

Буду рад, если сможете подсказать, где промах в моих действиях и в каком направлении копать. Спасибо!
 
Не увидел, что не авторизирован, предыдущее сообщение от меня же :)
 
Нашел нужную часть в исходниках для Ардуино. Тут контрольная сумма считается как сумма всех информационных байтов (включая тип пакета) и вычитается из 0xFF.
Передача пакета с такой контрольной суммой также не получается.

Также пробовал отправить пример пакета из документации:
7E 00 09 01 00 01 DF 00 00 7E 22 33 CB (тут уже заменено 0x81 из примера на 0x01)
и вновь на приемнике тишина :(
 
Здравствуйте! В пакете, который Вы пытаетесь отправить, отсутствуют некоторые обязательные поля (FrameID, DestinationID и Options). Подробно формат описан в п.5.3 документации на SerialStar (стр. 20). Приведите, пожалуйста, Ваш пакет в соответствие с форматом. Когда Вы пробовали воспользоваться готовым примером, то Вы, при изменении 0x81 на 0x01, не пересчитали контрольную сумму, поэтому пакет в эфир и не ушел. Воспользуйтесь для простоты примером на стр. 20. Кроме этого, передающий модуль должен находиться в одном из пакетных режимов в направлении хост->модуль. И еще важный момент, при передаче пакета не допускаются разрывы между байтами, составляющими пакет, более чем 2 символа. Таким образом, отправить пакет с помощью ручного ввода в терминале у Вас не получится. Воспользуетесь терминалом, который может отправлять предварительно подготовленные пакеты (паттерны). Мы пользуемся для этих целей терминалом PComm. Более продвинутый вариант - терминала v1.93b. И проверьте еще раз, на всякий случай, чтобы у модулей совпадали все сетевые параметры и адрес получателя был бы равен адресу принимающего модуля.
 
Спасибо за ответ!

Проглядел про остальные поля, показалось, что возможна отправка в соответствии с общим форматом на стр. 18. И действительно не подумал, что с примере поменяется контрольная сумма. Пример со страницы 20 отправился и принялся, с ним всё хорошо. Байты генерирую и отправляю из C++ скрипта через последовательный порт. Хотелось бы узнать, как тогда правильно должна считаться контрольная сумма для того, чтобы пройти проверки?
 
Да там ничего сложного. Берутся все байты пакета, за исключением первых 3-х (байта 0x7E и двух байт с длиной пакета) и просто складываются. Затем, над полученной суммой выполняется операция &00FF, ну то есть оставляется только младший ее байт. И затем этот байт вычитается из 0xFF. Вот и все.
 
Вновь спасибо за ответ!

Практически осилил передачу, остались непонятки с достоверностью информации. Всё также работаю с сообщением вида:
7E:00:09:10:01:00:02:00:00:11:22:33:86
получаю:
7E:00:09:81:00:01:98:00:00:7d:31:22:33:7f

С чем может быть связано появление лишнего байта и мешанина в данных? Пока смотрю настройки, никаких различий в модулях нет..
Страницы: 1 2 След.
Ответить
Читают тему (гостей: 1)
Форма ответов
 
Текст сообщения*
Отправить Отменить