Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: USART Idle frame , USART Break frame
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Интерфейсы
MiklPolikov
В STM32 USART может передать особые Idle frame и Break frame, а так же генерировать прерывание при их получении. Хочется объяснения в двух словах, зачем они обычно используются и чем отличаются ?

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

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

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

Скорее всего нет. Idle - пассивное состояние когда нет никаких данных.
ZASADA
не знаю как в STM32 , но у нормальных людей Idle frame это тишина в линии (единица) длиннее длины символа , а Break frame это ноль длиннее длины символа. вроде были еще варианты разных сигнализаций, когда разные длительности нулей означали разные события.
toweroff
Цитата(MiklPolikov @ Jan 4 2015, 01:52) *
При этом устройтсво не знает, в какой момент оно подключилось, и должно как-то отличить начало пакета от его середины.

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


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

То что можно сделать заголовок, а в пакете особым образом изменить место, где байты случайно сложились в лже-заголовок, я знаю. Делал это, когда работал со считывателем отпечатков пальца. Но сейчас во-первых просто не хочется делать этот мудрёный алгоритм с заголовком и проверку-изменение каждого пакета на предмет поиска в нём ложного случайного заголовка, во-вторых на эту проверку-изменение не особо хватит ресурсов процессора.
Вот и смотрю на Idle Frame, break frame : скажем, при отсутствии пакета пусть на линии будет idle , а в начале пакета break . И получится, что после получения break надо начать приём пакета, а после получения idle радоваться тому что пакет получен, и проверять в нём crc
toweroff
Цитата(MiklPolikov @ Jan 5 2015, 16:07) *
Считается ошибкой где ? В алгоритме, который я сам должен написать ?

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

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

А с учетом увеличения объема данных, ограниченности скорости USART, головушка еще больше заболит.
Тем более что ТС явно указал на возможный вариант нехватки ресурсов у несчастного арма.
Сергей Борщ
Brake frame позволяет отлавливать физическое отключение линии при наличии подтяжки входа УАПП к земле. Idle frame позволяет отлавливать паузы между пакетами при условии, что такие паузы есть между пакетами и их нет внутри пакетов.
Для задачи "устройство не знает, в какой момент оно подключилось и должно как-то отличить начало пакета от его середины" на мой взгляд лучше всего подходит введение в протокол "прозрачности" (byte-stuffing), наподобие SLIP, IrDA, WAKE
A. Fig Lee
Цитата(Александр77 @ Jan 6 2015, 06:24) *
Если предположить что у ТС, данные бинарные, то из "килобайтных данных" они станут в четыре раза бОльшими.

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


Ну не в 4, а в 4/3, на 30%. 3 байта передаются как 4.
Ну да, про ресурсы он говорил.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.