Data frame стандарта CAN 2.0A.

Remote Frame - это Data Frame без поля данных и с выставленным битом RTR (1 – рецессивные бит). Основное предназначение Remote кадра - это инициация одним из узлов сети передачи в сеть данных другим узлом. Такая схема позволяет уменьшить суммарный трафик сети. На практике Remote Frame сейчас используется редко (например, в DeviceNet Remote Frame вовсе не используется).

Error Frame – сообщение которое явно нарушает формат сообщения CAN. Передача такого сообщения приводит к тому, что все узлы сети регистрируют ошибку формата CAN-кадра, и в свою очередь автоматически передают в сеть Error Frame. Результатом этого является автоматическая повторная передача данных в сеть передающим узлом. Error Frame состоит из поля Error Flag, которое состоит из 6 бит одинакового значения (таким образом Error frame нарушает проверку Bit Stuffing), и поля Error Delimiter, состоящее из 8 рецессивных битов. Error Delimiter дает возможность другим узлам сети обнаружив Error Frame послать в сеть свой Error Flag.

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

 

Контроль доступа к среде передачи (побитовый арбитраж).

Так как всем узлам позволено начинать передачу кадров после того, как шина окажется свободной, это может привести к тому, что в одно и то же время сразу несколько узлов начнут передачу (рис.) Арбитраж CAN-шины основан на схеме c неразрушающим (не деструктивным) соперничеством.. Суть метода заключается в следующем. В случае, когда несколько контроллеров начинают одновременную передачу CAN кадра в сеть, каждый из них сравнивает, бит, который собирается передать на шину с битом, который пытается передать на шину конкурирующий контроллер. Если значения этих битов равны, оба контроллера передают следующий бит. И так происходит до тех пор, пока значения передаваемых битов не окажутся различными. Теперь контроллер, который передавал логический ноль (более приоритетный сигнал) будет продолжать передачу, а другие контроллеры прервут передачу до того времени, пока шина вновь не освободится. Если шина в данный момент занята, то контроллер не начнет передачу до момента её освобождения.