logo
Промышленная сеть CAN

3.2 Канальный уровень протокола CAN

Канальный уровень полностью определяется спецификацией CAN. Он делится на 2 подуровня -- MAC (Media Access Control) и LLC (Logical Link Control).

Подуровень управления логической связью (LLC) описывает верхние компоненты канального уровня ISO/OSI. Он касается тех аспектов протокола, которые не зависят от метода доступа к коммуникационной среде, в частности обеспечивает управление перегрузкой и уведомление о ней, а также фильтрацию сообщений и функции управления восстановлением.

Подуровень управления контролем доступа к среде (MAC), представляет нижние компоненты канального уровня ISO/OSI. MAC включает в себя правила и функции, относящиеся к инкапсуляции/декапсуляции, обнаружению ошибок и выдаче сигналов.

3.2.1 Кадры

Передача данных в CAN сети ведётся кадрами. Кадр (frame) - тип данных канального уровня, определяющий порядок и значение бит или битовых полей в передаваемой последовательности. Стандарт CAN различает основной формат кадра, использующий 11 битовые идентификаторы, и расширенный формат с 29 битовыми идентификаторами.

В CAN используются четыре типа кадров:

1. Кадр данных (data frame): 

Наиболее часто используемый тип сообщения. Он состоит из следующих основных частей (рис. 4):

Рис. 4 Кадр данных стандарта CAN 2.0A

Поле SOF (start of frame) - это самый первый бит каждого кадра данных и кадра удаленного запроса. Состояние SOF всегда доминантное. Если шина свободна, то любой узел сети может начинать передачу кадра. В сети CAN доступ к шине инициируется передачей именно доминантного SOF бита.

Поле арбитража (arbitration field) - используется в CAN для разрешения коллизий доступа к шине. Оно состоит из 11-битного идентификатора и поля RTR:

o идентификатор (Identifier field) - определяет важность содержимого кадра данных. Он неявно задает приоритет арбитража сообщения в случае, когда два или более узлов одновременно пытаются передать данные в сеть;

o поле RTR (remote transmit request) - указывает, является ли данный кадр кадром удаленного запроса (рецессивный уровень) или кадром данных (доминантный уровень).

Флаг расширенного идентификатора (Identifier Extension Flag) - указывает, каким образом нужно интерпретировать последующие биты: как контрольные, или как задающие вторую часть 29-ти битового идентификатора.

Контрольное поле (control field) - содержит информацию о кадре и состоит из:

o 2-х зарезервированных бит, находящихся всегда в доминантном состоянии;

o поля DLC (Data Length Code), которое содержит длину поля данных кадра. DLC указывается 4-х битовым кодом.

Поле данных (data field) - содержит от 0 до 8 байт полезных данных. Длина поля указывается кодом DLC.

Поле CRC (Cyclic Redundancy Check) - содержит 15-битную контрольную сумму сообщения и битовый разграничитель (всегда рецессив). Используется для обнаружения ошибок. Рассчитав CRC для блока принятых данных и сравнив его со значением, полученным от передающей стороны, принимающая сторона может определить некоторые типы ошибок. Проверка циклического избыточного кода выполняется на основе полинома, рассчитываемого как в передающем, так и в принимающем узлах.

Поле подтверждения ACK (acknowledge field) - состоит из двух бит: слота подтверждения и разделителя подтверждения.

o cлот подтверждения (Acknowledgement Slot) - первый бит поля подтверждения ACK. Устанавливается рецессивным со стороны передающего узла и доминантным со стороны всех получателей, которые осуществили успешную проверку CRC (циклического избыточного кода). Если передающий узел обнаруживает доминантное состояние этого бита, он может быть уверен, что хотя бы один узел принял сообщение без ошибок;

o разделитель подтверждения (acknowledge delimiter) - второй бит поля подтверждения CAN кадра. Является рецессивным. Доминантное значение разделителя считается нарушением формата и вызывает передачу кадра ошибки.

Конец кадра (End Of Frame) - состоит из семи рецессивных бит.

2. Кадр удаленного запроса (remote frame): 

С помощью кадра удаленного запроса узел сети запрашивает передачу другим узлом соответствующего кадра данных с тем же самым значением идентификатора. Код длины поля данных (DLC) удаленного запроса должен иметь то же значение, что и DLC соответствующего кадра данных. Длина поля данных кадра удаленного запроса - ноль байт.

3. Кадр перегрузки (overload frame): 

Кадр для обозначения состояния перегрузки. Используется перегруженным узлом, который в данный момент не может обработать поступающее сообщение, и поэтому просит при помощи Overload-кадра о повторной передаче данных. В настоящее время Overload-кадр практически не используется.

4. Кадр ошибки (error frame): 

Это сообщение, которое явно нарушает формат сообщения CAN. Передача такого сообщения приводит к тому, что все узлы сети регистрируют ошибку формата CAN-кадра, и в свою очередь автоматически передают в сеть Error Frame. Результатом этого процесса является автоматическая повторная передача данных в сеть передающим узлом. Кадр состоит из флага ошибки (шесть бит одного знака) и разделителя ошибки (восемь рецессивных бит).

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