реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Контроль правильности передачи по USART, Подскажите как проверить надежность
Serega Doc
сообщение Jan 9 2006, 10:25
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 267
Регистрация: 11-11-04
Из: Одесса
Пользователь №: 1 103



Пересылка данных между мастером и слейвом (На 64 MEGE) - мультипроцессорный обмен
В основном long числа
Как проверить правильность передачи.
1 вариант (сложный)
Можно использовать встроенний контрольчетности
Но тогда если не правильная посылка то необходимо повторять только один байт и еще и делать анализ какой байт из 4 принят.
2 вариант (IMHO проще 1-го)
Может быть лучше пятым байтом досылать еще и по XOR сложенные 4 байта long числа
И в следующем сеансе связи просить повтор того что передалось не правильно
Думал 5 байтом применить CRC8 контроль но это много ресурсов и времени для расчетов
Go to the top of the page
 
+Quote Post
Виктория
сообщение Jan 9 2006, 10:47
Сообщение #2


инженер
****

Группа: Свой
Сообщений: 520
Регистрация: 19-09-05
Из: Самара
Пользователь №: 8 701



Основной критерий выбора - какой? И ограничения временные?

Можно ведь и исправляющие коды применить. Чтобы не переспрашивать в следующем сеансе.
Go to the top of the page
 
+Quote Post
andrvisht
сообщение Jan 9 2006, 11:11
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 298
Регистрация: 29-08-05
Пользователь №: 8 064



Цитата(Serega Doc @ Jan 9 2006, 14:25) *
Думал 5 байтом применить CRC8 контроль но это много ресурсов и времени для расчетов

Да почему много ? табличный СRС8 (выложен в прикрепленной теме) дает довольно быстрый результат.
что касается объёма то для 64к наверное найдеться место...
для 4-х long наверное лучьше подойдет CRC16...
В крайнем случае можно считать CRC для каждого байта перед отправкой, или при приеме.
Go to the top of the page
 
+Quote Post
Serega Doc
сообщение Jan 9 2006, 11:12
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 267
Регистрация: 11-11-04
Из: Одесса
Пользователь №: 1 103



Основной критерий это как можно меньше слать байт и делать повторов
А так же простой алгоритм
Go to the top of the page
 
+Quote Post
Petka
сообщение Jan 9 2006, 11:37
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 453
Регистрация: 23-08-05
Пользователь №: 7 886



Понимаю, что вам хочется по-надёжнее, но задайтесь вопросом: так ли на самом деле нужна надёжность? Задумайтесь, если вы используете механизм передачи, который допускает ошибки, а вам они не нужны, зачем вам такой механизм передачи? програмные средства коррекции и учёта ошибок это уже последняя возможность поправить дело в уже готовом проекте. Мой совет: если у вас чистый UART работает с ошибками, навесьте на него 485й. на мой взгляд хватит примитивной програмной проверки на целостность пакета, например XORа всего пакета. если XOR не сошёлся, просто игнорируйте пакет. да, и не забудьте так организовать протокол передачи, что один пропущенный пакет ни на чём серьёзно не скажется. (например стоит пересылать абсолютные значения величин, а не события их увеличения/уменьшения)

Сообщение отредактировал Petka - Jan 9 2006, 11:39
Go to the top of the page
 
+Quote Post
Serega Doc
сообщение Jan 9 2006, 12:29
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 267
Регистрация: 11-11-04
Из: Одесса
Пользователь №: 1 103



Насколько надежно будут пересылатся данные это вопрос - поет на стадии разработки. Теоретически помех быть не должно но когда это все встанет на линию не известно какие помехи могут появится при эксплуатации устройства. Пересылка абсолютных величин и проверка на правильность изменения допустим +1 за 10 сек и не как не больше - так и задумывалось.

Вот и возникает вопрос как оценить надежность
Go to the top of the page
 
+Quote Post
Volodymyr
сообщение Jan 9 2006, 13:00
Сообщение #7





Группа: Новичок
Сообщений: 8
Регистрация: 10-12-05
Из: Gostomel
Пользователь №: 12 055



Возможно использовать помехозащищённые коды. Единственное - нужно как-то спрогнозировать количество ошибок на одну посылку.
Go to the top of the page
 
+Quote Post
Petka
сообщение Jan 9 2006, 13:18
Сообщение #8


Профессионал
*****

Группа: Свой
Сообщений: 1 453
Регистрация: 23-08-05
Пользователь №: 7 886



Цитата(Serega Doc @ Jan 9 2006, 15:29) *
Вот и возникает вопрос как оценить надежность


если вы хотите действительно точно и верно оцнить надёжность, то должны:

1) сформулировать критерий надёжности.
2) построить мат. модель в которой будут необходимые параметры для расчёта надёжности.
3) смоделировать работу мат. модели.
4) получить надёжность.

выбор 1 пункта должны сделать вы и только вы. напимер, для одних задач похождение 50% пакетов это надёжно, для других и прохождение 99,999% пакетов ненадёжно. Если у вас будет протокол с пересылкой плохо переданных даных, то в надёжность будет ещё входить и время прохождения пакета, с учётом вероятной пересылки его... и в том же духе.
2 пункт вы будете строить из статистических данных линии передачи, т.е. вероятность помехи, её длительность, отсюда выводится вероятность помехи в 2х битах.... и.т.д. т.е. большая работа.
3 пункт можете реализовать чисто математически. или же моделированием на компьютере "в лоб " с составлением последующей статистики.
4 пункт совсем элементарен. полученные цифры сверяете с пунктом 1! И только после этого вы сможете понять НАДЁЖНО ЛИ ВАШЕ устройство в заданных условиях.


все советы типа "надёжно будет так-то" или "так будет ненадёжно" безсмыслены в общем случае. т.к. даются обычно без учёта всех условий. а учитывать все условия кроме вас никто не будет =) откуда я знаю будут ли рядом с вашей линией радиостанции? или откуда я могу знать что линия связи 1км, и экспуатироваться будет непросыхающими электриками, окончившими 9 классов. ясно, что даже самый "надёжный" способ связи в моём понимании будет ненадёжным для вас.

Сообщение отредактировал Petka - Jan 9 2006, 13:22
Go to the top of the page
 
+Quote Post
*SERG
сообщение Jan 9 2006, 13:56
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 274
Регистрация: 10-08-05
Из: Екатеринбург
Пользователь №: 7 517



может эхо использовать

Сообщение отредактировал *SERG - Jan 9 2006, 13:59
Go to the top of the page
 
+Quote Post
defunct
сообщение Jan 9 2006, 16:01
Сообщение #10


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(*SERG @ Jan 9 2006, 15:56) *
может эхо использовать


У эхоплекса тоже есть недостатки.. Высокая избыточность, сложность фильтрации пакета на приемной стороне (т.е. передающая сторона по эху легко определит, что пакет битый, а с принимающей стороной сложнее).

CRC imho надежнее..
Go to the top of the page
 
+Quote Post
Laptop
сообщение Jan 9 2006, 19:12
Сообщение #11


Частый гость
**

Группа: Свой
Сообщений: 142
Регистрация: 19-11-05
Пользователь №: 11 103



Для контроля правильности посылки вполне хватит CRC8. Не так уж и долго при табличном методе.
А вот протокол передачи будет сильно зависить от системы в которой все это будет крутится, необходимо как-то идентифицировать начало пакета. Это может быть как вариант с взведенным 9-м битом, так и более сложный вариант с анализом пауз передачи между пакетами или вариант с XON-XOFF.
В твоем случае нужно указать какие именно данные будешь передавать и уже тогда придумывать протокол. Ты ведь указал что у тебя В ОСНОВНОМ лонги. А что еще передается? Может необходимо указывать тип передаваемых данных?
Имхо, в твоем случае видимо проще передавать первый байт с девятым битом для указания длины пакета, затем сам пакет и crc.
Дополнительно конечно необходимо смотреть все ошибки в регистре статуса уарта.
Go to the top of the page
 
+Quote Post
haker_fox
сообщение Jan 10 2006, 01:41
Сообщение #12


Познающий...
******

Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125



2Serega Doc: может Вам это подойдет
http://www.spetspribor.com/support/software/wake/wake.html
применил этот протокол для связи IBM PC с девайсом на mega16, остался доволен.
Хотя в вашем случае наверно можно обойтись меньшими затратами...
Но за основу вполне этот протокол можно взять.


--------------------
Выбор.
Go to the top of the page
 
+Quote Post
Gennadiy_
сообщение Jan 17 2006, 14:00
Сообщение #13


Частый гость
**

Группа: Свой
Сообщений: 79
Регистрация: 13-01-06
Из: Москва
Пользователь №: 13 133



Позаимствуй протокол из стандарта Irda там используется PPP и CRC16, только вместо таблицы
Перед вызовом таблицы
eor CRC_L,Ir_byte_buf ;считаем FCS

таблица может быть вызвана перед выходом из обработчика,
если используется полный дуплекс я делал две подпрограммы для экономии времени.



CRC_V_table:
mov temp_a,CRC_L ; 1
swap temp_a ; 1
andi temp_a,$F0 ; 1
eor CRC_L,temp_a ; 1 FCS_L = FCS_L XOR (FCS_L << 4)

mov temp_a,CRC_L ; 1
swap temp_a ; 1
andi temp_a,$0F ; 1
lsr temp_a ; 1
eor temp_a,CRC_L ; 1 temp_a = FCS_L XOR (FCS_L >> 5)

lsl CRC_L ; 1
lsl CRC_L ; 1
lsl CRC_L ; 1
eor CRC_L,CRC_H ; 1 FCS_L = (FCS_L << 3) XOR FCS_H

mov CRC_H,temp_a ; 1 FCS_H = temp_a

swap temp_a ; 1
andi temp_a,$0F ; 1
eor CRC_L,temp_a ; 1 FCS_L = FCS_L XOR (temp_a >> 4)
; /17 CLOCK
ret ;/21 CLOCK

www.scenix.com
Application Note 16
February 15, 1999
SX IrDA Virtual Peripheral
Implementation

рекомендую,ссылки нет, есть документ:
Ross N. Williams
Элементарное руководство
по CRCалгоритмам
обнаружения ошибок
Все, что Вы хотели бы знать о CRCалгоритмах, но боялись спросить,
опасаясь, что ошибки Ваших знаний могут быть обнаружены
A painless guide to CRC error detection algorithms
Ross N. Williams
Go to the top of the page
 
+Quote Post
vm1
сообщение Jan 17 2006, 17:31
Сообщение #14


Знающий
****

Группа: Свой
Сообщений: 521
Регистрация: 13-05-05
Из: Москва
Пользователь №: 4 978



Цитата(Serega Doc @ Jan 9 2006, 14:12) *
Основной критерий это как можно меньше слать байт и делать повторов
А так же простой алгоритм


Наиболее простой и достаточно надежный способ защиты
это контрольная сумма с паритетом в каждом байте.
Таким образом писали раньше на магнитную ленту.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 13:01
Рейтинг@Mail.ru


Страница сгенерированна за 0.01467 секунд с 7
ELECTRONIX ©2004-2016