ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Вторник
25 марта
1505676 Топик полностью
Nikolay_Po (13.03.2025 02:46, просмотров: 74) ответил Eddy_Em на Ну так щупнуть осциллографом в линию, да посмотреть! Мы так CAN и проверяем: если все ОК, почти меандр идет, а если полное говнище - еще и с выбросами (хоть и как бы дифлиния).
UART и CAN. В первом, синхронизация перезапускается на каждом стартовом бите. А во втором - корректируется не реже, чем каждые 5 бит. 

Про CAN из Википедии:


Synchronization starts with a hard synchronization on the first recessive to dominant transition after a period of bus idle (the start bit). Resynchronization occurs on every recessive to dominant transition during the frame. The CAN controller expects the transition to occur at a multiple of the nominal bit time. If the transition does not occur at the exact time the controller expects it, the controller adjusts the nominal bit time accordingly.


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

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

Если канал спроектирован нормально, битовые ошибки или ошибки положения временных интервалов в нём будут достаточно малы, чтобы нормально проходил пакеты любой разумной длины.


Но рассмотрим пример. В телекоме, ещё рабочим считался канал с вероятностью битовых ошибок 10-4. Одна ошибка на 10000 бит. Да, при размере пакета в таком канале 1250 байт, половина пакетов будет потеряна, если считать потерей пакет, в котором повреждён хотя бы один бит. И будет потеряно тем меньше, чем короче пакет.

Поэтому да, где много ошибок, длина пакета будет влиять. Но я бы не стал утверждать, что это происходит именно из-за потери синхронизации.
Вот зафиксировал приёмник UART начало стартового бита. Если зафиксировал успешно, то даже если дальше, в самом символе, будут ошибки - это будут просто битовые ошибки. Но не потеря синхронизации. О потере синхронизации можно будет говорить, когда приёмник начал отсчёт тактов для выборки значений бит в неверный момент из-за повреждения помехой стартового бита. Но это, условно, 1/10 от всех повреждений бит в канале UART. Поэтому считаю, что не совсем верно говорить, что на плохом канале, UART (RS-485) будет плохо работать с большими пакетами из-за потери синхронизации. Нет, не из-за потери синхронизации, а из-за ошибок, после проверки целостности, приводящих к отбрасыванию пакета целиком.

Про CAN я такого анализа сделать не могу, так как не вникал, как работает ресинхронизация в деталях. Вроде, при ресинхронизации, коррекция выполняется лишь на один такт за раз, так что вероятнее, битовая ошибка в CAN, скорее нарушит стаффинг и приведёт к искажению сразу нескольких бит, чем к, прямо, срыву синхронизации.


Да, я согласен, что короткие пакеты проходят надёжнее. Тут не поспоришь.