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

 
 
 
Reply to this topicStart new topic
> USART Idle frame , USART Break frame, Что это и зачем используется ?
MiklPolikov
сообщение Jan 3 2015, 22:52
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 015
Регистрация: 23-01-07
Из: Москва
Пользователь №: 24 702



В STM32 USART может передать особые Idle frame и Break frame, а так же генерировать прерывание при их получении. Хочется объяснения в двух словах, зачем они обычно используются и чем отличаются ?

Задача вот какая:
Пользователь подключает устройство к линии UART, в которой передаются килобайтные пакеты. Связь двунаправленная. При этом устройтсво не знает, в какой момент оно подключилось, и должно как-то отличить начало пакета от его середины. Эти Idle frame и Break frame - и есть то что мне надо, что бы обозначить начало пакета ?

Заранее спасибо за ответ !
Эскизы прикрепленных изображений
Прикрепленное изображение
 


--------------------
Если у Вас нет практического опыта в данной теме- не вступайте в дискуссию и не пишите никаких теоретических рассуждений! Заранее спасибо !
Go to the top of the page
 
+Quote Post
Александр77
сообщение Jan 4 2015, 19:13
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 608
Регистрация: 10-07-09
Из: Дубна, Московская область
Пользователь №: 51 111



Цитата(MiklPolikov @ Jan 4 2015, 01:52) *
Задача вот какая:
Пользователь подключает устройство к линии UART, в которой передаются килобайтные пакеты. Связь двунаправленная. При этом устройтсво не знает, в какой момент оно подключилось, и должно как-то отличить начало пакета от его середины.

Так как непонятно как представлены данные: текстовыми или бинарными. То в общих чертах.
Рекомендуют обычно сделать заголовок (уникальная комбинация), далее разместить сами данные и конец "пакета" обрамить контрольной суммой (CRC-каким-нибудь).
Цитата(MiklPolikov @ Jan 4 2015, 01:52) *
Эти Idle frame и Break frame - и есть то что мне надо, что бы обозначить начало пакета ?

Скорее всего нет. Idle - пассивное состояние когда нет никаких данных.
Go to the top of the page
 
+Quote Post
ZASADA
сообщение Jan 4 2015, 20:05
Сообщение #3


Знающий
****

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



не знаю как в STM32 , но у нормальных людей Idle frame это тишина в линии (единица) длиннее длины символа , а Break frame это ноль длиннее длины символа. вроде были еще варианты разных сигнализаций, когда разные длительности нулей означали разные события.
Go to the top of the page
 
+Quote Post
toweroff
сообщение Jan 5 2015, 05:35
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



Цитата(MiklPolikov @ Jan 4 2015, 01:52) *
При этом устройтсво не знает, в какой момент оно подключилось, и должно как-то отличить начало пакета от его середины.

насколько я помню, если начало передачи следующего байта в пакете опаздывает по времени на длину самого байта или больше, то это считается ошибкой.
Также оговаривается время между пакетами
Если никаких заголовков и CRC нет - остается только ловить эти временные интервалы
Go to the top of the page
 
+Quote Post
MiklPolikov
сообщение Jan 5 2015, 13:07
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 015
Регистрация: 23-01-07
Из: Москва
Пользователь №: 24 702



Цитата(toweroff @ Jan 5 2015, 09:35) *
насколько я помню, если начало передачи следующего байта в пакете опаздывает по времени на длину самого байта или больше, то это считается ошибкой.


Считается ошибкой где ? В алгоритме, который я сам должен написать ?

То что можно сделать заголовок, а в пакете особым образом изменить место, где байты случайно сложились в лже-заголовок, я знаю. Делал это, когда работал со считывателем отпечатков пальца. Но сейчас во-первых просто не хочется делать этот мудрёный алгоритм с заголовком и проверку-изменение каждого пакета на предмет поиска в нём ложного случайного заголовка, во-вторых на эту проверку-изменение не особо хватит ресурсов процессора.
Вот и смотрю на Idle Frame, break frame : скажем, при отсутствии пакета пусть на линии будет idle , а в начале пакета break . И получится, что после получения break надо начать приём пакета, а после получения idle радоваться тому что пакет получен, и проверять в нём crc


--------------------
Если у Вас нет практического опыта в данной теме- не вступайте в дискуссию и не пишите никаких теоретических рассуждений! Заранее спасибо !
Go to the top of the page
 
+Quote Post
toweroff
сообщение Jan 5 2015, 19:07
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 2 957
Регистрация: 19-09-06
Из: Москва
Пользователь №: 20 514



Цитата(MiklPolikov @ Jan 5 2015, 16:07) *
Считается ошибкой где ? В алгоритме, который я сам должен написать ?

нет, в самой передаче байтов. Логически, разумеется
А в алгоритме - да, тайм-аут по неприему части пакета
Go to the top of the page
 
+Quote Post
A. Fig Lee
сообщение Jan 5 2015, 19:25
Сообщение #7


Знающий
****

Группа: Участник
Сообщений: 974
Регистрация: 4-04-08
Из: далека
Пользователь №: 36 467



Да закодировать все base64, добавить служебные символы:
0xFE - start, 0xFD - end packet.
И не болит голова у дятла.


--------------------
Верить нельзя никому, даже себе. Мне - можно.
Go to the top of the page
 
+Quote Post
Александр77
сообщение Jan 6 2015, 11:24
Сообщение #8


Знающий
****

Группа: Свой
Сообщений: 608
Регистрация: 10-07-09
Из: Дубна, Московская область
Пользователь №: 51 111



Цитата(A. Fig Lee @ Jan 5 2015, 22:25) *
Да закодировать все base64, добавить служебные символы:
0xFE - start, 0xFD - end packet.

Если предположить что у ТС, данные бинарные, то из "килобайтных данных" они станут в четыре раза бОльшими.
Цитата(A. Fig Lee @ Jan 5 2015, 22:25) *
И не болит голова у дятла.

А с учетом увеличения объема данных, ограниченности скорости USART, головушка еще больше заболит.
Тем более что ТС явно указал на возможный вариант нехватки ресурсов у несчастного арма.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jan 6 2015, 11:51
Сообщение #9


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Brake frame позволяет отлавливать физическое отключение линии при наличии подтяжки входа УАПП к земле. Idle frame позволяет отлавливать паузы между пакетами при условии, что такие паузы есть между пакетами и их нет внутри пакетов.
Для задачи "устройство не знает, в какой момент оно подключилось и должно как-то отличить начало пакета от его середины" на мой взгляд лучше всего подходит введение в протокол "прозрачности" (byte-stuffing), наподобие SLIP, IrDA, WAKE


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
A. Fig Lee
сообщение Jan 6 2015, 15:24
Сообщение #10


Знающий
****

Группа: Участник
Сообщений: 974
Регистрация: 4-04-08
Из: далека
Пользователь №: 36 467



Цитата(Александр77 @ Jan 6 2015, 06:24) *
Если предположить что у ТС, данные бинарные, то из "килобайтных данных" они станут в четыре раза бОльшими.

А с учетом увеличения объема данных, ограниченности скорости USART, головушка еще больше заболит.
Тем более что ТС явно указал на возможный вариант нехватки ресурсов у несчастного арма.


Ну не в 4, а в 4/3, на 30%. 3 байта передаются как 4.
Ну да, про ресурсы он говорил.


--------------------
Верить нельзя никому, даже себе. Мне - можно.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 17th June 2025 - 22:28
Рейтинг@Mail.ru


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