Адресация и доступ к шине
В CAN сети ни один из узлов не имеет адреса. Вместо этого сообщения посылаются "всем", но содержат идентификатор, который описывает смысл посылаемых данных. В соответствии с этим смыслом любой узел сети может принять это сообщение, если оно необходимо устройству для функционирования. Сообщение принимается узлом, если его идентификатор проходит через фильтр сообщений, имеющийся в каждом узле.
В CAN сети гарантируется, что сообщение будет принято любым из узлов в одно и то же время или не будет принято ни одним из них. Это достигается благодаря широковещательной передаче и использованным методом подтверждения приема сообщений.
Когда сеть свободна, любой узел может начать передачу сообщения. Но каждое сообщение имеет свой приоритет при получении доступа к шине. Поэтому передачу может осуществить только одно устройство - то, которое содержит сообщение с наивысшим приоритетом.
Борьба за доступ к шине происходит следующим образом. Если два или более устройств обнаружили, что линия свободна и начали передачу сообщений одновременно, то возникший конфликт разрешается путем побитного сравнения идентификатора передаваемого сообщения с состоянием линии. В процессе арбитража (урегулирования конфликта) каждое устройство сравнивает логический уровень передаваемого бита с логическим уровнем на шине. Если эти уровни одинаковы, устройства продолжают передавать следующий бит идентификатора. Если приемник устройства показывает, что на шине доминантный уровень, а передатчик в это же время передает рецессивный уровень, то устройство сразу прекращает передачу данного сообщения. Такой механизм арбитража гарантирует, что ни информация, ни время не будут потеряны.
Достоверность передачи
Для достижения максимальной надежности (достоверности) передачи данных протокол предусматривает специальные методы обнаружения ошибок, сигнализации об ошибках и самоконтроля, которые воплощены в каждом узле сети.
Для обнаружения ошибок приняты следующие меры:
o передатчик сравнивает каждый бит на шине с переданным битом для подтверждения правильности передачи на уровне битов;
o выполняется контроль циклическим избыточным кодом (CRC - Cyclic Redundancy Check);
o используется бит-стаффинг (см. выше);
o используется проверка каждого переданного фрейма.
Механизм обнаружения ошибок характеризуется такими свойствами:
o обнаруживаются все глобальные ошибки;
o обнаруживаются все ошибки, вносимые передатчиком;
o в сообщении обнаруживаются до 5 случайно распределенных ошибок;
o в сообщениях обнаруживается пакет следующих друг за другом ошибок длиной до 15 бит;
o обнаруживаются ошибки четности.
Вероятность наличия в сообщении необнаруженных ошибок составляет менее .
Сообщения с обнаруженными ошибками помечаются флагом в том узле, где они были обнаружены. Такие сообщения отклоняются и автоматически передаются повторно. Время от момента обнаружения ошибки до начала повторной передачи равно длительности 31-го бита, если не возникают новые ошибки.
CAN способен различать сбои и отказы. Если произошел отказ, то отказавшее устройство отключается от сети.
Все приемники сети проверяют целостность (непротиворечивость) полученных сообщений, подтверждают (квитируют) целостные сообщения и помечают флагом противоречивые сообщения.
Передача сообщений
Сообщения в CAN передаются с помощью фреймов (блоков данных). Используется два разных формата фреймов, которые различаются длиной поля идентификатора: стандартный фрейм с идентификатором длиной 11 бит и расширенный фрейм с длиной идентификатора 29 бит.
Существует 4 различных типа фреймов:
o DATA FRAME - "фрейм данных" - переносит данные от передатчика к приемнику;
o REMOTE FRAME - "дистанционный фрейм" (фрейм вызова) - передается одним из устройств для того, чтобы получить от другого устройства данные в формате DATA FRAME с тем же идентификатором, что и в REMOTE FRAME;
o ERROR FRAME - "фрейм ошибок" - передается любым устройством, обнаружившим ошибку на шине;
o OVERLOAD FRAME - "фрейм перегрузки" - используется для запроса дополнительной задержки между предыдущими и последующими данными.
Фрейм данных состоит из следующих полей (рис. 2.22): начало фрейма (Start Of Frame), поле арбитража (Arbitration Field), поле контроля (Control Field), поле данных (Data Field), поле циклического избыточного кода (CRC Field), поле уведомления о приеме (ACKnowledgement Field) и поле конца фрейма (End Of Frame). Поле данных может иметь нулевую длину.
Пространство между фреймами представлено рецессивным состоянием шины. Только при рецессивном состоянии шины устройство может начать передачу фрейма.
Начало фрейма кодируется одним доминантным битом. Все устройства сети одновременно синхронизируют свои приемники по переднему фронту импульса этого бита.
Формат поля арбитража различается для стандартного и расширенного формата фрейма. В стандартном фрейме поле арбитража состоит из идентификатора длинной 11 бит и RTR-бита (Remote Transmission Request - "запрос дистанционной передачи").
В расширенном формате поле арбитража имеет идентификатор длиной 29 бит, SRR-бит (Substitute Remote Request - "заменяющий RTR-бит"),IDE-бит (Identifier Extension Bit - "бит идентификации расширенного формата") и RTR-бит. Поле идентификатора в расширенном формате состоит из базового идентификатора и расширенного идентификатора. Базовый идентификатор определяет приоритет расширенного фрейма. RTR-бит служит для того, чтобы отличить фрейм данных от фрейма вызова. IDE-бит служит для различения стандартного и расширенного формата фреймов.
Рис. 2.22. Структура фрейма данных |
Поле контроля включает в себя код, который указывает длину данных в поле данных, IDE-бит и один (в стандартном формате) или два (в расширенном) зарезервированных бита.
Поле данных состоит из данных, которые должны быть переданы фреймом данных. Он может иметь длину от 0 до 8 байт по 8 бит каждый. Данные передаются младшим разрядом вперед.
Поле CRC содержит циклический избыточный код, служащий для обнаружения ошибок во всех предшествующих ему полях фрейма, включая бит начала фрейма. Поле CRC оканчивается CRC-разделителем (рецессивное состояние) длиной в 1 бит. Стандарт CAN устанавливает алгоритм вычисления CRC. Биты стаффинга перед вычислением удаляются.
Поле уведомления имеет длину 2 бита. Передающее устройство в этом поле посылает два рецессивных бита. Принимающее устройство отвечает доминантным битом, если сообщение принято без ошибок. Второй бит этого поля всегда является рецессивным.
Конец фрейма представляет собой последовательность из семи рецессивных бит.
Фрейм вызова выполняет функцию запроса данных. Он аналогичен фрейму данных, но отличается от него только отсутствием поля данных и другими значениями битов.
Фрейм ошибок используется любым принимающим узлом, чтобы сообщить всем участникам сети о том, что передаваемое в данный момент по сети сообщение содержит ошибку. Первым полем в фрейме ошибок является флаг ошибки. Сообщение об ошибке имеет наивысший в системе приоритет, поэтому передается сразу после обнаружения ошибки и принимается всеми устройствами одновременно. Все устройства также одновременно удаляют из своей памяти сообщение, содержащее ошибку.
Фрейм перегрузки состоит из двух полей: флага перегрузки и поля разделителя. Существуют следующие условия, при наступлении которых начинается передача фрейма перегрузки:
o перегрузка приемника, которая требует увеличить паузу между принимаемыми им фреймами;
o обнаружение доминантного бита на месте первого и второго бита в поле перерыва паузы между фреймами.
Пауза между фреймами
Между фреймами данных, фреймом вызова и любыми другими фреймами устанавливается пауза. В отличие от этого, перед фреймами перегрузки и ошибок паузы нет, это ускоряет их доставку.
Пауза содержит поле перерыва (3 бита) и поле простоя (произвольной длины) и, для пассивных к ошибке устройств, которые выполняли передачу предыдущего сообщения, поле приостановленной передачи.
Фильтрация сообщений
Фильтрация сообщений используется для выбора из всех сообщений на шине только тех, которые соответствуют маске, записанной в регистр приемника. Маска может быть настроена на отбор группы сообщений и использует идентификатор, входящий в состав поля арбитража на рис. 2.22. Отобранные сообщения помещаются в буфер приемника.
Валидация сообщений
Под валидацией понимается установление факта, что сообщение не содержит ошибок. Момент времени, в который устанавливается факт правильности сообщения, отличается для передатчика и приемника.
Сообщение считается достоверно переданным, если не было ошибок при передаче от начала до конца фрейма. Если сообщение содержало ошибку, оно автоматически повторяется в соответствии с текущими приоритетами.
Сообщение считается достоверно принятым, если не было обнаружен ошибок при его приеме. Если ошибка обнаружена, устройство посылает в шину флаг ошибки.
В CAN рассматривается 5 типов ошибок:
o ошибки передачи бита (контролируется уровень на шине и сравнивает с передаваемым. Ошибка обнаруживается во время передачи одного бита);
o ошибка стаффинга (обнаруживается при отсутствии бита стаффинга в 6-й позиции последовательности одинаковых битов);
o CRC-ошибка;
o ошибка формата (обнаруживается, если при заранее фиксированном формате фрейма поле с известным значением битов содержит неправильные биты);
o ошибка уведомления (обнаруживается трансивером, если он не находит доминантное состояние в поле уведомления о получении).
Устройство, обнаружившее любую из перечисленных ошибок, сигнализирует об этом с помощью флага ошибки.