Передача информации в сети CAN осуществляется кадрами четырех форматов:
- кадры данных, служат для передачи информации от узла к узлу;
- кадры запроса, для запроса данных одним узлом у другого;
- кадры ошибки, передаются узлом, обнаружившим какую-либо ошибку;
- кадры перегрузки (переполнения), используются передатчиком для приостановки выдачи кадров в сеть.
Между кадрами вводится междукадровое пространство и при передаче кадров используются пять процедур управления:
- вставка дополнительных битов для синхронизации;
- побитовый арбитраж;
- обнаружение ошибок;
- контроль цикличности избыточным кодом;
- сигнализация ошибок.
Кадр данных служит для передачи сообщений по шине и состоит из семи основных полей (рис. 7.7).
Рис. 7.7. Кадр стандартного формата
Стандартный формат начинается со стартового бита SOF (start of frame — начало кадра). Далее следует арбитражное поле с 11-битовым идентификатором, затем индикатор запроса. Индикатор показывает, какой это кадр — информационный или кадр запроса. В последнем случае в кадре отсутствует поле данных.
Управляющее поле содержит один бит идентификатора расширения, указывающий, расширенный это формат или стандартный; один бит зарезервирован за будущими возможными расширениями, оставшиеся четыре бита несут информацию о количестве байтов данных в кадре в поле данных.
В поле данных может быть от 0 до 8 байтов (64 бит).
За полем данных следует 15-битовое поле контроля циклически избыточным кодом (CR.C), используемое для обнаружения ошибок, и разделитель CRC.
За разделителем CRC следует поле подтверждения АСК и разделитель АСК. Передатчик устанавливает бит АСК в состояние недоминирующего уровня («1»). Этот бит переписывается в состояние доминирующего уровня («0») тем приемником, который принял сообщение правильно. Передающий узел этим извещается, что хотя бы одним узлом его данные приняты. Сообщение подтверждается приемником независимо от того, ему оно адресовано или нет.
Поле конца кадра является концом сообщения. Между двумя соседними кадрами обязательно вставляется поле разделителя. Если это последний кадр в сообщении, шина переходит в режим ожидания.
На рис. 7.8 показана начальная часть кадра данных расширенного формата с 29-битовым идентификатором. Биты индикатора запроса и индикатора расширенного формата находятся в состоянии недоминирующего уровня. Это значит, что кадр стандартного формата имеет более высокий приоритет по отношению к кадру расширенного формата при одинаковом содержании первых 11-битов поля идентификатора.
Рис. 7.8. Начальная часть кадра данных расширенного формата
Кадр запроса отличается от кадра данных отсутствием поля данных (рис. 7.9). Бит поля запроса находится в состоянии недоминирующего уровня. Кадр запроса используется для запроса данных одним узлом от другого. В ответ узел-адресат посылает кадр данных с таким же идентификатором.
Рис. 7.9. Кадр запроса
Кадр ошибки передается узлом, обнаружившим какую-либо неисправность. Кадр ошибки поступает на все узлы и состоит из двух полей — поля флага ошибки и поля разделителя. Флаг ошибки может быть активным или пассивным. Активный флаг состоит из шести последовательных битов в состоянии доминирующего уровня (рис. 7.10), пассивный — из шести битов недоминирующего уровня. Разделитель ошибок состоит из восьми битов в состоянии недоминирующего уровня.
После обнаружения флага ошибки узлы начинают выдавать на шину биты недоминирующего уровня, формируя разделитель. При обнаружении ошибки кадр ошибки может быть послан поверх других данных.
Рис. 7.10. Кадр ошибки
Кадр перегрузки (переполнения) посылается на шину подуровнями МАС или LLC (см. рис. 7.1) при обнаружении перегрузки или некоторых ошибок. При получении кадра перегрузки узел задерживает передачу очередного кадра данных на шину, давая приемнику время выполнить его задание.
Кадр перегрузки (рис. 7.11) содержит два поля — флаг перегрузки и разделитель. По структуре кадр перегрузки совпадает с кадром ошибки, но отличается временем передачи. Кадр ошибки передается немедленно после ее обнаружения одним из узлов, а кадр перегрузки передается после окончания текущего кадра, игнорируя междукадровое пространство.
Рис. 7.11. Кадр перегрузки
Появление кадра ошибки в современных сетях CAN — событие маловероятное. Эта опция сохранена для совместимости с более медленными CAN — контроллерами прежних разработок, например, с пионером — Intel80526.
Более современные контроллеры это Intel: 82527; Philips: SJA1000; Siemens: 81C90; Siemens: 81C91.
На подуровне MAC между окончанием предыдущего и началом последующего кадра обязательно проходит некоторое время, которое называется междукадровым пространством. Перед кадрами ошибок и перегрузки междукадрового пространства нет. Пространство между кадрами может содержать поля: «между-кадровое пространство», «холостой ход шины», «задержка передачи». Для узлов в активном режиме (рис. 7.12) междукадровое пространство содержит паузу и холостой ход. Если узел находится в пассивном режиме и являлся передатчиком последнего кадра по мультиплексной шине данных, он добавляет 8 бит недоминирующего уровня («задержка передачи») в междукадровое пространство. Если другой узел начнет передачу данных в это время, то узел в режиме пассивной ошибки станет приемником следующего кадра, вместо того чтобы продолжить передачу. В этом случае узел в режиме пассивной ошибки присвоит всем передаваемым им кадрам более низкий приоритет, чем у кадров, передаваемых узлами в режиме активной ошибки.
Рис. 7.12. Междукадровое пространство
В протоколе CAN используется NRZ-код (non-return-to-zero). При этом эффективно используется частотная полоса линии связи, но если в последовательности много битов одного значения, возможно нарушение синхронизации. Для предотвращения этого в последовательность, состоящую из 5 и более одинаковых битов, вставляются дополнительные синхронизирующие биты (рис. 7.13). В приемнике эти вспомогательные биты автоматически убираются.
Рис. 7.13. Введение дополнительных битов для синхронизации
Кадр всегда передается начиная со стартового бита (SOF). В пределах ноля первыми идут биты, несущие наиболее важную информацию.
Побитовый арбитраж является особенностью протокола CAN.
Мультиплексная система, подчиняющаяся CAN-протоколу, является равноранговой. Любой узел имеет право на доступ к шине, когда она свободна. Признаком этого является обнаружение узлом междукадрового пространства.
Приоритет сообщения определяется 11-битовым идентификатором и следующим за ним битом индикатора запроса. Идентификатор, содержащий меньшее двоичное число, имеет более высокий приоритет. Приоритеты устанавливаются за различными событиями на этапе проектирования и не могут быть изменены динамически. Конфликт при попытке доступа нескольких узлов к шине разрешается побитовым арбитражем идентификаторов кадров, передаваемых конфликтующими узлами.
На рис. 7.14 показаны три узла, пытающиеся одновременно получить доступ к сети CAN. Для первого узла идентификатор 0111111..., для второго — 0100110..., для третьего — 0100111... Первые две цифры в идентификаторах совпадают, все три узла продолжают передавать информацию (в данном случае свои идентификаторы) на шину до прихода третьей цифры, при этом шина будет установлена в доминирующее состояние «0». Далее узел 1 прекратит передачу, так как передаваемая им цифра недоминирующего уровня «1» отличается от нулевого состояния шины. Узлы 2 и 3 продолжат передачу до седьмого бита. В этот момент времени передаваемый узлом 3 бит «1» не совпадает с состоянием шины «0» и узел 3 отключится, передачу продолжит только узел 2.
Рис. 7.14. Побитовый арбитраж
При таком побитовом арбитраже сохраняется первая часть сообщения и наиболее важная информация с более высоким приоритетом передается без перерыва, «проигравшие» узлы автоматически становятся приемниками для сообщений с более высокими приоритетами. При побитовом арбитраже даже при сильной загрузке коммуникационной шины и невозможности отправить все сообщения в данное время отправляются наиболее важные.
Неразрешимые конфликты могут возникнуть на шине, если в кадрах запроса совпадают идентификаторы, но указано разнос число битов в требуемых данных. Для избежания конфликтов в пределах системы эти числа должны быть одинаковыми.
Протокол CAN в отличие от других не использует квитирование сообщений. Вместо этого CAN сигнализирует об обнаруженных ошибках. В протоколе имеется пять способов обнаружения ошибок:
- контроль циклически избыточным кодом (CRC). Передатчик добавляет в кадр дополнительные биты в поле CRC, используя образующий полином и содержимое кадра. На принимающей стороне определяется код CRC и сравнивается с переданным. Отсутствие совпадения определяется как ошибка CRC;
- проверка кадра. Проверяются форматы полей кадра. Обнаруженные ошибки называются ошибками кадра;
- определение ошибки АСК. Приемник, получивший информацию, устанавливает бит АСК в доминантное состояние. Передатчик, не получивший подтверждения в такой форме, уведомляется об ошибке в кадре или отсутствии приемников.
В протоколе CAN имеется две процедуры обнаружения ошибок на битовом уровне:
- мониторинг шины. Узел может контролировать собственное сообщение при передаче и может обнаружить несоответствие между тем, что он передает, и тем, что приходит к приемнику. Исключением является посылка недоминантных битов при арбитраже или бита АСК. Это позволяет отличать глобальные ошибки от локальных ошибок передатчика;
- определение ошибки при вводе дополнительных битов синхронизации. Ошибка определяется при получении приемником шести одинаковых последовательных битов.
Первые три из перечисленных способов реализуются на уровне сообщения (кадра), два последних — на битовом уровне.
В протоколе CAN применяется контроль циклически избыточным кодом (CRC), для чего используется полином х15 + х14 + х10 + х8 + х7 + х4 + х3 + 1, генерирующий двоичную псевдослучайную последовательность максимальной длины. Аппаратно или программно организуется сдвигающий 16-разрядный регистр с обратными связями через схемы «исключающее ИЛИ» (сумма по модулю два) в соответствии с коэффициентами образующего полинома (рис. 7.15). Регистры на стороне приемника и передатчика исходно устанавливаются в одинаковые состояния. Через регистр проходят биты сообщения начиная со старших. После этого содержимое регистра становится циклически избыточным кодом (CRC). При отсутствии ошибок коды приемника и передатчика совпадают. При ошибке бит АСК остается недоминантным.
Рис. 7.15. Схема включения регистра
Протокол CAN предусматривает сигнализацию ошибок. Если узел обнаруживает ошибку, используя один из приведенных выше способов, текущая передача сообщений приостанавливается, на шину выдается флаг ошибки. Другие узлы не принимают прерванное сообщение.
При обнаружении ошибки CRC, кадр ошибки начинает передаваться после разделителя CRC. Для других видов ошибок кадр ошибки начинает передаваться со следующего бита после обнаружения ошибки.
После прерывания ошибочного сообщения передатчик пытается его повторить, как только шина освободится.
Неисправные узлы могли бы заблокировать всю шипу своими кадрами ошибок, но протокол CAN имеет средства для различения случайных и повторяющихся (постоянных) ошибок, локальных и глобальных. Для этого делается статистическая оценка поведения узла по числу кадров в ошибочных ситуациях и постоянно неисправный узел может быть выключен, чтобы сохранить работоспособность шины в целом. В некоторых системах сигнализация ошибок используется для записи кодов ошибок в память бортовой диагностики.