Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсовая CAN,CAL.doc
Скачиваний:
8
Добавлен:
23.08.2019
Размер:
444.42 Кб
Скачать

1.6 Механизмы обнаружения ошибок can-протокола

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

1. Циклический контроль (CRC Check). При использовании этого метода в конце передачи добавляются биты циклического избыточного кода. При приеме сообщения происходит его повторное вычисление и сравнение с полученным кодом циклического контроля, сгенерированного передатчиком. Если эти два значения не совпадают, то выявляется ошибка CRC.

2. Контроль кадра (Frame Check). Проверяется соответствие структуры передаваемого кадра его фиксированному формату и его размеру, то есть некоторые части CAN-сообщения имеют одинаковое значение во всех типах сообщений (протокол CAN точно определяет, какие уровни напряжения и когда должны появляться на шине). Ошибки, которые могут возникнуть при проверке кадра, получили название «ошибки формата» (Frame Error).

3. Ошибки при подтверждении (ACK Check). Принятые кадры подтверждаются всеми приемниками: каждый узел, получив правильное сообщение, посылает в сеть доминантный бит (0). Если передатчик не получил никакого подтверждения, то это может означать, что приемники обнаружили ошибку (искажено поле АСК), либо приемники вообще отсутствуют в сети. Возникает ошибка подтверждения (ACK Error).

Следующие два механизма определения ошибок реализованы в протоколе CAN на битовом уровне:

4. Мониторинг шины (Bit monitoring). Одна из уникальных особенностей сети CAN состоит в том, что передающий узел может контролировать свой собственный сигнал на шине во время передачи. Он сравнивает значение передаваемого им бита со значением бита, которое появляется на шине. Если эти значения не совпадают, то узел генерирует разрядную ошибку (Bit Error). Это позволяет надежно выявлять глобальные ошибки и ошибки, связанные с передатчиком.

5. Заполнение битами (Bit Stuffing). В CAN используется представление битов способом NRZ (Non Return to Zero – без возврата к нулю), гарантирующее максимальную эффективность битового кодировании. Однако если подряд идет слишком много битов с одним и тем же значением, то возможен сбой синхронизации. Во избежание подобной ситуации генерируются синхронизирующие фронты методом вставки битов. Если в сообщении подряд идут пять битов с одинаковым значением, то передатчик автоматически вставляет бит в дополнительном коде (с противоположным значением). Этот бит автоматически удаляется из сообщения приемниками. Например, если подряд идёт пять битов с нулевым значением, то CAN-передатчик вставит один единичный бит. Проверка правильности принятого кода осуществляется в соответствии с правилом заполнения. Если будет получено шесть последовательных битов с одним и тем же значением, то по протоколу CAN это считается ошибкой (Stuff Error – ошибка заполнения).

Если в течение передачи хотя бы одна станция обнаружит ошибку с помощью описанных методов, то она передает в сеть фрейм ошибки, который аварийно завершает текущую передачу. После этого все другие станции, обнаружив флаг ошибки, не получают данное сообщение или сбрасывают его, чем достигается непротиворечивость данных во всей сети.

После аварийного завершения дефектной передачи сообщения, передатчик автоматически пытается повторить передачу. Как правило, повторная передача начинается в течение периода времени, соответствующего передаче 23 битов, отсчитываемого с момента обнаружения ошибки. В специальных случаях время восстановления системы составляет 31-битный период.

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

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

Механизм ограничения ошибок (Error confinement) следующий. Каждый узел ведет два счетчика ошибок: счетчик ошибок передачи (Transmit Error Counter) и счетчик ошибок приема (Receive Error Counter). Эти счетчики увеличивают или уменьшают свое значение в соответствие с несколькими правилами. Сами правила управления счетчиками ошибок достаточно сложны, но сводятся к простому принципу: ошибка передачи приводит к увеличению счетчика ошибок передачи на 8, ошибка приема увеличивает счетчик ошибок приема на 1, любая корректная передача или прием сообщения уменьшают соответствующий счетчик на 1. Эти правила приводят к тому, что счетчик ошибок передачи передающего узла увеличивается быстрее, чем счетчик ошибок приема принимающих узлов. Это правило соответствует предположению о большой вероятности того, что источником ошибок является передающий узел.

Каждый узел CAN сети может находиться в одном из трех состояний. Когда узел стартует, он находится в состоянии активной ошибки (Error Active). Узел, находящийся в этом состоянии, в случае обнаружения ошибки на шине выставляет флаг ошибки Active Error Flags, состоящий из 6 доминантных бит, поэтому все узлы его регистрируют. Когда узел в состоянии активной ошибки обнаруживает проблему с передачей, он предотвращает получение пакета данных другими узлами.

Когда, значение хотя бы одного из двух счетчиков ошибок превышает предел 127, узел переходит в состояние пассивной ошибки (Error Passive). Узел в состоянии Passive Error при обнаружении ошибки в сети передает в сеть флаг ошибки Passive Error Flags, состоящий из 6 рецессивных бит, поэтому остальные узлы сети его не замечают, то есть данные из передачи не теряются, если другие узлы не обнаружат ошибку. Passive Error Flags лишь приводит к увеличению счетчика ошибок узла.

Когда значение хотя бы одного из двух счетчиков превышает предел 255, узел переходит в состояние отключения от сети (Bus Off). Узел в этом состоянии ничего не передает в сеть (не только кадры ошибки, но вообще никакие другие) и не откликается на любые воздействия на шине. Это логическое отключение от сети.