Пакетное общение по UART

Все прочитали, вроде даже поняли, взяли паяльник - а нифига не получается? Скорее сюда! Поможем. Чем можем...
Ответить
Аватара пользователя
FireProoF
Мучитель микросхем
Сообщения: 424
Зарегистрирован: Чт май 14, 2015 15:11:39
Откуда: Саратов

Пакетное общение по UART

Сообщение FireProoF »

Здравствуйте. Организую прием данных с устройства. Устройство отправляет данные, упакованные в виде:
0xff - заголовок
0x00 - идентификатор устройства
0x06 - длина сообщения
0x00 - дата0
0x00 - дата1
0x00 - дата2
0x00 - дата3
0x00 - дата4
0x?? - контрольная сумма

Принимаю на компьютер под windows. Данные приходят с частотой 100 Гц.
Сейчас сделано так:
1. Циклический буфер наполняется данными с UART
2. Раз в 5мс если в буфере есть новые данные, они отправляются на расшифровку.
3. Там находится по очереди ff, 00, и т.д.
4. Проверяется crc
5. Если неуспешно, то машина сбрасывается до пункта 3

результат: 80% времени сумма не совпадает, потому что сообщения накладываются друг на друга. Как это побороть?
Реклама
Аватара пользователя
Goodefine
Держит паяльник хвостом
Сообщения: 906
Зарегистрирован: Ср апр 16, 2008 13:22:54
Откуда: Приднестровье, Тирасполь

Re: Пакетное общение по UART

Сообщение Goodefine »

Данные выгребать почаще и побыстреее
Любой, заслуживающий внимания, опыт приобретается себе в убыток...
Реклама
Аватара пользователя
FireProoF
Мучитель микросхем
Сообщения: 424
Зарегистрирован: Чт май 14, 2015 15:11:39
Откуда: Саратов

Re: Пакетное общение по UART

Сообщение FireProoF »

[uquote="Goodefine",url="/forum/viewtopic.php?p=3341648#p3341648"]Данные выгребать почаще и побыстреее[/uquote]
Данные выгребаются быстро.
Более 11 байт в буфере не лежит
Аватара пользователя
Goodefine
Держит паяльник хвостом
Сообщения: 906
Зарегистрирован: Ср апр 16, 2008 13:22:54
Откуда: Приднестровье, Тирасполь

Re: Пакетное общение по UART

Сообщение Goodefine »

[uquote="FireProoF",url="/forum/viewtopic.php?p=3341656#p3341656"]Данные выгребаются быстро.[/uquote]
А как насчет второго условия? Тогда гребите почаще, или передавайте пореже
Данные приходят с частотой 100 Гц.
10мс
2. Раз в 5мс если в буфере есть новые данные, они отправляются на расшифровку.
Это у вас таймер тикает 5мс, винда ни разу не система реального времени, почитайте какие лаги могут быть. Да и хоть якобы в два раза быстрее при асинхронном опросе - это на грани фола, в итоге имеете что имеете - результат закономерен
Любой, заслуживающий внимания, опыт приобретается себе в убыток...
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
FireProoF
Мучитель микросхем
Сообщения: 424
Зарегистрирован: Чт май 14, 2015 15:11:39
Откуда: Саратов

Re: Пакетное общение по UART

Сообщение FireProoF »

Сейчас мне подсказали вот такую схему расшифровки данных.
Смысл в том, что есть заголовок 0xFF, который может встретится среди пакета как данные. Отсюда и отказы моей машины состояний.
Смысл её в том, что находится пакет не побайтно, а целиком. При этом данные, не прошедшие проверку, не стираются.
Может кто что сказать за эту схему?
СпойлерИзображение
Реклама
Аватара пользователя
Siarzhuk
Потрогал лапой паяльник
Сообщения: 353
Зарегистрирован: Вс янв 19, 2014 22:41:55

Re: Пакетное общение по UART

Сообщение Siarzhuk »

Буфер заведомо побольше для начала, чтобы убедиться что индексы головы и хвоста нормально с приёмом обработкой синхронизируются. Перед добавлением данных в буффер проверять не догнала-ли голова хвост. Иметь ввиду, что буффер после первого оборота заполнен уже обработанными данными - и не высовываться при разборе ненароком за пределы голова-хвост. Может эти 80% и являются франкенштейнами, собранными из кусков разных фреймов.
Одновременным нажатием LIGHT и POWER, РП Sangean ATS-909X (ver 1.29) превращается в ATS-909XR! ;-)
Реклама
Аватара пользователя
Goodefine
Держит паяльник хвостом
Сообщения: 906
Зарегистрирован: Ср апр 16, 2008 13:22:54
Откуда: Приднестровье, Тирасполь

Re: Пакетное общение по UART

Сообщение Goodefine »

[uquote="FireProoF",url="/forum/viewtopic.php?p=3342067#p3342067"]Смысл в том, что есть заголовок 0xFF, который может встретится среди пакета как данные. Отсюда и отказы моей машины состояний.[/uquote]
Чтобы не придумывать очередной велосипед, почитайте про байт-стаффинг, например, здесь хорошо описан. Да и сам протокол вполне себе юзабельный.
Любой, заслуживающий внимания, опыт приобретается себе в убыток...
Аватара пользователя
FireProoF
Мучитель микросхем
Сообщения: 424
Зарегистрирован: Чт май 14, 2015 15:11:39
Откуда: Саратов

Re: Пакетное общение по UART

Сообщение FireProoF »

Дело в том что протокол уже поменять нельзя (
Ответить

Вернуться в «Практика»