Протокол CAN использует двоичное кодирование (NRZ-код), то есть во время передачи бита не может быть никаких переключений уровня, которые могли бы использоваться для синхронизации (рис. 6.26). Это предъявляет высокие требования к стабильности частоты генераторов (используются кварцевые). Приходится вводить разделительные сигналы в последовательности одноименных битов для облегчения синхронизации.
Время передачи одного бита схематично представлено на рис. 7.5. В течение этого времени выполняются функции но управлению тиной, такие как синхронизация ЭБУ, компенсация запаздывания в линии, позиционирование момента опроса (стробирование).
Рис. 7.5. Время передачи бита
Длительность отдельных сегментов в квантах программируется времязадающей логикой адаптеров CAN. Длительность кванта связана с разрешающей способностью подуровня PLS.
Сегмент SYNC_SEG используется для синхронизации различных ЭБУ, подключенных к шине. Изменение уровня сигнала (например, с «0» на «1») предполагается в этом сегменте. Его длительность всегда равна одному кванту.
Сегмент PR.OPSEG служит для компенсации временных задержек при распространении сигнала в линии и прохождении его через адаптеры.
Сегменты PHASE_SEG1 и PHASE SEG2 компенсируют ошибки фазы, они могут быть удлинены или укорочены при ресинхронизации.
Момент опроса — точка времени, когда состояние шины интерпретируется как значение соответствующего бита.
Синхронизация производится в момент перехода шины из состояния недоминирующего уровня в состояние доминирующего уровня. Этот переход всегда должен совершаться в течение сегмента SYNC_SEG. Для компенсации различных сбоев или задержки в линии используется сокращение длительности сегмента PHASESEG2 по отношению к номинальному значению или увеличение длительности сегмента PHASESEG1. Изменение длительности сегментов программируется в пределах 1...4 квантов, но не более значения PHASE_SEG1.
На рис. 7.6 номинальные значения длительностей сегментов составляют: PROPSEG — 6 квантов, PHASE_SEG1 и PHASE SEG2 по 7 квантов. При нулевой фазовой ошибке (е = 0) фронт сигнала поступает в течение сегмента SYNC SEG без всякой компенсации длительности.
Рис. 7.6. Синхронизация передачи бита
При отрицательной фазовой ошибке (е < 0), при ее накоплении, фронт сигнала может прийти после стробирования. Для предотвращения этого сокращена длительность сегмента PHASE_SEG2 предыдущего бита с 7 до 6 квантов.
При положительной фазовой ошибке (е > 0) фронт сигнала может пройти до момента стробирования при ее накоплении. Для предотвращения этого увеличена длительность сегмента PHASE_SEG1 с 7 до 8 квантов.