Про 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, скорее нарушит стаффинг и приведёт к искажению сразу нескольких бит, чем к, прямо, срыву синхронизации.
Да, я согласен, что короткие пакеты проходят надёжнее. Тут не поспоришь.