Bus off что за ошибка

Протокол CAN. Описание, формат кадра, контроль ошибок.

Bus off что за ошибка. Смотреть фото Bus off что за ошибка. Смотреть картинку Bus off что за ошибка. Картинка про Bus off что за ошибка. Фото Bus off что за ошибка

Bus off что за ошибка. Смотреть фото Bus off что за ошибка. Смотреть картинку Bus off что за ошибка. Картинка про Bus off что за ошибка. Фото Bus off что за ошибка

Приветствую всех на нашем сайте! Сегодняшняя статья будет целиком и полностью посвящена обзору протокола CAN. А в одной из следующих статей мы реализуем обмен данными по CAN на практике. Но не буду забегать вперед…

CAN (Controller Area Network) — это промышленный стандарт, позволяющий осуществить объединение в единую сеть различных узлов, механизмов, датчиков и т. п. Протокол является широковещательным, это значит, что все устройства в CAN-сети принимают все передаваемые по шине сигналы. Режим передачи данных — последовательный, при этом байты сообщений формируют кадры определенного вида. Структуру этих кадров данных мы также обязательно разберем в этой статье.

Основные характеристики протокола CAN:

Первоначально стандарт был разработан для автомобильной промышленности. И занималась этим компания Bosch в 1980-х годах. Основная идея заключалась в том, чтобы уйти от использования огромного количества проводов, соединяющих многочисленные узлы автомобиля. И протокол CAN позволил этого достичь! С тех пор CAN является основным механизмом соединения устройств, узлов и датчиков автомобиля между собой. Помимо этого, интерфейс CAN активно используется в промышленной автоматизации, а также в системах «умного дома».

Давайте перейдем к физическому уровню протокола. В интернете можно найти много противоречивой информации на этот счет, но истина тут одна 🙂 Стандарт CAN компании Bosch не регламентирует физический уровень передачи данных, поэтому могут использоваться абсолютно разные варианты, например, оптоволокно. На практике же чаще всего используется соединение посредством двухпроводной дифференциальной линии (витой пары). Ориентировочная максимальная длина линии для разных скоростей передачи данных составляет:

СкоростьДлина линии
1 Мбит/с50 м
500 кбит/с100 м
125 кбит/с500 м
10 кбит/с5 км

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

Bus off что за ошибка. Смотреть фото Bus off что за ошибка. Смотреть картинку Bus off что за ошибка. Картинка про Bus off что за ошибка. Фото Bus off что за ошибка

В отличие от многих других протоколов в CAN не рекомендуется описание битов данных как «логического нуля» и «логической единицы». Здесь используются понятия доминантный и рецессивный бит.

Важнейшим свойством является то, что если один из узлов сети хочет выставить на линии рецессивный бит, а другой доминантный, то в итоге на линии окажется доминантный бит. В общем-то отсюда и следует его название, от слова «доминировать» 🙂 Очень хорошо этот процесс иллюстрирует пример с оптоволоконной линией. Как вы помните, в оптоволокне для передачи данных используется «свет», либо он есть (единица), либо его нет (ноль). При использовании в CAN-сети «свет» — доминантный бит, соответственно, отсутствие света или «темнота» — рецессивный. Вспоминаем про важнейшее свойство передачи данных в сети…

Пусть один узел выставляет на линии рецессивный бит, то есть «темноту». Второй узел, напротив, выставляет доминантный бит — «свет». В итоге на линии будет «свет», то есть доминантный бит, что в точности соответствует требованиям сети!

Bus off что за ошибка. Смотреть фото Bus off что за ошибка. Смотреть картинку Bus off что за ошибка. Картинка про Bus off что за ошибка. Фото Bus off что за ошибка

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

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

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

Сигналы, которые передаются по витой паре, получили название CAN_H и CAN_L (High и Low). Доминантное состояние соответствует случаю, когда потенциал сигнала CAN_H выше потенциала CAN_L. Рецессивное — когда потенциалы равны (разница потенциалов не превышает допустимого отклонения, 0.5 В).

С этим вроде бы разобрались, давайте двигаться дальше!

Пришло время определить, как биты объединяются в кадры. Протокол CAN определяет 4 вида кадров:

Для кадра данных возможны два варианта — базовый формат и расширенный. Вот так выглядит структура базового формата:

ПолеДлинаОписание
Начало кадра (SOF)1 битНачало передачи кадра
Идентификатор (ID)11 битИдентификатор сообщения
Запрос на передачу (RTR)1 битДоминантный бит
Бит расширения идентификатора (IDE)1 битБит определяет длину идентификатора, для базового формата — доминантный бит
Зарезервированный бит1 битЗарезервировано
Длина данных (DLC)4 битаКоличество байт данных
Данные0 — 8 байтДанные
Контрольная сумма (CRC)15 битКонтрольная сумма
Разграничитель контрольной суммы1 битРецессивный бит
Промежуток подтверждения (ACK)1 битДля приемника — доминантный бит, для передатчика — рецессивный
Разграничитель подтверждения1 битРецессивный бит
Конец кадра (EOF)7 битВсе биты рецессивные

А это структура расширенного:

ПолеДлинаОписание
Начало кадра (SOF)1 битНачало передачи кадра
Идентификатор A (ID A)11 битПервая часть идентификатора
Подмена запроса на передачу (SRR)1 битРецессивный бит
Бит расширения идентификатора (IDE)1 битБит определяет длину идентификатора, для расширенного формата — рецессивный бит
Идентификатор B (ID B)18 битВторая часть идентификатора
Запрос на передачу (RTR)1 битДоминантный бит
Зарезервированные биты2 битаЗарезервировано
Длина данных (DLC)4 битаКоличество байт данных
Данные0 — 8 байтДанные
Контрольная сумма (CRC)15 битКонтрольная сумма
Разграничитель контрольной суммы1 битРецессивный бит
Промежуток подтверждения (ACK)1 битДля приемника — доминантный бит, для передатчика — рецессивный
Разграничитель подтверждения1 битРецессивный бит
Конец кадра (EOF)7 битВсе биты рецессивные

Результирующий идентификатор получается в результате объединения полей «Идентификатор A» и «Идентификатор B«.

Кадр удаленного запроса (remote frame) представляет из себя кадр данных, описанный выше, но без поля данных и с рецессивным битом RTR. Он используется в случае, когда один узел хочет запросить данные у другого узла.

Кадр ошибки (error frame) передает устройство, обнаружившее ошибку в сети. Фрейм ошибки имеет наивысший приоритет и принимается всеми устройствами сети в обязательном порядке.

Кадр перегрузки (overload frame) используется очень редко… Его идея и назначение заключается в том, что с его помощью устройство, которое в данный момент не может принять данные, запрашивает повторную передачу этих же данных.

А давайте вернемся чуть назад, к арбитражу данных, и рассмотрим, что это может означать на практике! Итак, несколько устройств начинают передачу сообщения, а точнее кадра данных. Передается бит начала кадра и затем начинается передача идентификатора сообщения. Как вы помните, приоритет будет у того устройства, которое будет передавать доминантный бит, в тот момент, когда все остальные будут передавать рецессивный. То есть чем «позже» среди битов идентификатора появится «рецессивный бит», тем выше будет его приоритет! Другими словами: более высокий приоритет при использовании интерфейса CAN имеют сообщения с меньшим значением идентификатора.

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

Итак, что у нас на очереди теперь? Конечно же контроль ошибок — важнейший аспект работы протокола CAN! Стандарт предусматривает несколько механизмов контроля ошибок.

Благодаря всем этим механизмам, вероятность необнаружения ошибки является очень низкой, что, конечно же, не может не радовать 🙂

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

И на этом еще не все! Каждый узел может находиться в одном из трех состояний:

Протокол CAN предусматривает, что изначально, после старта, узел находится в первом из этих состояний — Error Active. Каждое устройство имеет два счетчика ошибок:

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

Если значение любого из этих двух счетчиков узла превысит значение 127, то узел переходит в состояние Error Passive. А если величина одного из счетчиков превысит 255, то узел перейдет в состояние Bus Off.

Разница между этими состояниями заключается в действиях узла при диагностировании ошибки:

Как видите, протокол CAN крайне интересен для изучения, надежен, безопасен, и удобен в использовании 🙂

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

Источник

Autotime

Обзоры. Автоновости. Тест-драйвы
Main Menu

Ошибка U0073 – модуль управления коммуникационной шиной «А» отключен.

Что означает код ошибки U0073?

Код U0073 обозначает «коммуникационная шина модуля управления ‘A’ выключена.

Блоки управления подключаются к шине CAN параллельно. Передача данных между блоками осуществляется последовательно, по одному биту за один раз. Это называется последовательной связью. На каждой шине есть терминирующий резистор.

При возникновении проблем со связью в CAN шине система зарегистрирует диагностический код неисправности (DTC). Код U0073 означает, что один или несколько модулей не могут правильно взаимодействовать по шине CAN ‘A’. В зависимости от производителя, шина «A» может относиться либо к шине CAN High, либо к шине CAN Low.

Симптомы ошибки U0073

Причины ошибки U0073

Ошибка U0073 обычно вызвана одним из следующих факторов:

Как диагностировать и устранять ошибку U0073

Выполнить предварительную проверку

Проверить, нет ли неисправности в блоке управления.

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

Затем выполняется опрос модулей с помощью диагностического сканера. Сканер подключается к автомобилю через встроенный диагностический порт. После подключения к автомобилю сканер становится еще одним модулем в сети и обменивается данными по сети. Затем сканер выполнит опрос остальных модулей, запросив их статус, чтобы узнать, какие из них работают правильно.

Любой модуль, который не отвечает, скорее всего, неисправен или имеет проблемы с коммутацией. Отсутствие связи не обязательно означает, что модуль неисправен. Модуль может не иметь питания и заземления. Или, возможно, потребуется перепрограммировать его.

Затем необходимо поочередно отключить модули от сети. Если отсоединение определенного модуля восстанавливает в CAN шине, то проблема связана с самим модулем или его цепью.

Проверка CAN шины

Первичная проверка целостности CAN шины производится через диагностический порт с помощью цифрового мультиметра (DMM). Подключив мультиметр к контактам CAN High и CAN Low диагностического порта можно обнаружить обрывы, замыкания и высокое сопротивление в шине CAN.

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

Примечание к ошибке U0073

Диагностика ошибки U0073 осуществляется, при нормальном напряжении в бортовой сети и работающем автомобиле.

Источник

Bus off что за ошибка

Доброго дня всем.
Почитал здешний форум, нашел много полезной инфы по разным вопросам и решил создать тему(в поиске не нашел).
Авто R320 CDI, WDC2511221A039211.

Проблема такова, очень редко загорается на приборке ABS/ESP, DRIVE TO WORKSHOP, CHECK ENGINE, пищит зуммер в приборке и т.д. При этом машина не заводится(стартер не крутит). По «quick testu» множество CAN ошибок(результаты приложу ниже), в основном по («chasis» и «interior» can). Машина приезжает или иногда привозят на эвакуаторе в те моменты когда постоянных can ошибок нет и все прекрасно работает. Повторюсь, что это происходит очень редко.

Что было сделано на авто:
1) АКБ(основной + маленький) ни разу не были разряжены при проявлении проблемы, зарядка в норме

2) Поднят полик спереди слева, наличия воды не обнаружено

3) Заменен CGW на новый + кодировка со старого.(старый не был сгнивший)

4) Поднят полик спереди справа, наличия воды не обнаружено(видно только, что когда то была она там, но совсем мало). Сняты и разобраны FSAM, Airmatic, HRA эбу, идеально чистые(не зеленые) и сухие без каких либо признаков, что там была вода.

По словам клиента сигнализацию ему никто не устанавливал до появления проблемы, единственное, что говорит была заменена эл. плата АКПП(он же ЭБУ АКПП) на новый в диллерском центре и якобы начали появляться эти проблемы(сомнительно).
В «quick test» ошибки типа «CAN BUS OFF», только по тем ЭБУ, которые сидят на «chasis» can, но странно то, что в Airmatic нет вообще никаких ошибок, хотя он на этом же CAN`е сидит. Не встречался с проблемой проводки CAN на W164,W251, все проблемы в основном только от SAM блоков были, может действительно есть болезненные места у проводки? Надеюсь заинтересует кого нибудь эта тема.

Источник

Краткий обзор протокола CAN. Часть II

По материалам компании Kvaser

Эта статья не претендует на полноту и абсолютную точность сведений, указанных в ней, и предназначена для ознакомления с протоколом CAN.

Содержание статьи

Разъемы CAN

Для разъемов CAN стандартов не существует! Обычно, каждый (!) протокол более высокого уровня (Higher Layer Protocol) описывает один или несколько предпочтительных типов разъемов. Основные типы:

• 9–контактный DSUB, предложен CiA;

• 5–контактный Mini–C и/или Micro–C, используется DeviceNet и SDS;

• 6–контактный Deutsch разъем, предложенный CANHUG для транспортных гидравлических систем.

Разъемы CAN

Данное назначение контактов разъема рекомендовано CiA и фактически является промышленным стандартом.

1Резерв
2CAN_LЛиния шины CAN_L (доминантная низкая)
3CAN_GNDЗаземление CAN
4Резерв
5(CAN_SHLD) Опционально: экран CAN
6(GND)Опционально: заземление CAN
7CAN_HЛиния шины CAN_H (доминантная высокая)
8Резерв (линия ошибок)
9CAN_V+Опционально: питание

Для пользователей продукции KVASER: Пожалуйста заметьте, что специфическое употребление этих контактов в кабелях KVASER DRVcan описано в документе LAPcan Hardware Guide, который можно скачать на сайте компании.

Если питание подается, оно должно быть в диапазоне +7..+13 В, 100 мA. Модули оснащены разъемом типа «папа» и должны соединять внутри контакты 3 и 6.

Нумерация контактов действительна для разъема типа «папа„, при взгляде со стороны разъема, или для разъема типа “мама», при взгляде со стороны распайки. – Чтобы запомнить расположение контактов, заметьте, что контакт CAN_LOW имеет МЕНЬШИЙ (LOW) номер, а CAN_HIGH – БОЛЬШИЙ (HIGH).

Bus off что за ошибка. Смотреть фото Bus off что за ошибка. Смотреть картинку Bus off что за ошибка. Картинка про Bus off что за ошибка. Фото Bus off что за ошибка

5-контактный Mini–C

Bus off что за ошибка. Смотреть фото Bus off что за ошибка. Смотреть картинку Bus off что за ошибка. Картинка про Bus off что за ошибка. Фото Bus off что за ошибка

КонтактФункцияЦвет DeviceNet
1ЭкранНеизолированный
2V+Красный
3V-Черный
4CAN_HБелый
5CAN_LСиний

Модули оснащены разъемами типа «папа». Подаваемое напряжение 24 В ±1%

6-контактный Deutsch DT04-6P

Рекомендован CANHUG для использования в транспортных гидравлических системах

Разъемы на модулях типа «папа», разъемы шины – «мама». На данный момент нет никаких рекомендаций по вопросу подачи питания.

КонтактФункцияРекомендованный цвет кабеля
1«Минус» питания
2CAN_HБелый
3 Опционально: заземление сигналаЖелтый
4Опционально: запускСерый
5«Плюс» питанияКрасный
6CAN_LСиний

Тактовая синхронизация CAN

Схема бита

Каждый бит, передаваемый по шине CAN, разделяется, для нужд тактовой синхронизации, как минимум на 4 части (кванта). Часть логически делится на 4 группы или сегмента:

Схема бита данных шины CAN:

Bus off что за ошибка. Смотреть фото Bus off что за ошибка. Смотреть картинку Bus off что за ошибка. Картинка про Bus off что за ошибка. Фото Bus off что за ошибка

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

Сегмент воспроизведения нужен для компенсации задержки на линиях шины.

Сегменты фазы могут быть сокращены (сегмент фазы 1) или удлинены (сегмент фазы 2), если это потребуется для сохранения синхронизованности тактовых частот.

Уровни шины замеряются на границе между сегментом фазы 1 и сегментом фазы 2.

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

Тактовая синхронизация

Для того, чтобы регулировать встроенный в чип генератор тактовых частот шины, контроллер CAN может сократить или удлинить бит на целое число квантов. Максимальное количество таких временных поправок бита определяется параметром «ширина скачка синхронизации» (Synchronization Jump Width, SJW).

Жесткая синхронизация происходит при переходе стартового бита от рецессивного к доминантному. Отсчет времени прохождения бита начинается заново с этой границы.

Повторная синхронизация происходит когда край бита не попадает в сегмент синхронизации сообщения. Один из сегментов фазы укорачивается или удлиняется на некоторое количество квантов, зависящее от ошибки фазы сигнала; максимальное количество используемых квантов определяется параметром «ширина скачка синхронизации» (Synchronization Jump Width, SJW).

Вычисление регистра тактовой синхронизации

Большинство контроллеров CAN позволяют программисту осуществлять настройку тактовой синхронизации используя следующие параметры:

• Значение предварительного делителя тактовой частоты

• Количество квантов перед точкой замера

• Количество квантов после точки замера

• Количество квантов в «ширина скачка синхронизации» (Synchronization Jump Width, SJW)

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

В контроллерах 82c200 и SJA1000, производства NXP (ранее Philips), раскладка регистра выглядит приблизительно так:

76543210
btr0SJW1SJW0BRP5BRP4BRP3BRP2BRP1BRP0
btr1SAMTSEG22TSEG21TSEG20TSEG13TSEG12TSEG11TSEG10

• BRP0..BRP5 устанавливают значение предварительного делителя тактовой частоты

• SJW0..SJW1 устанавливают длину SJW

• TSEG10..TSEG13 устанавливают количество квантов перед точкой замера (стартовый бит не включен)

• TSEG20..TSEG22 устанавливают количество квантов после точки замера

• SAM при установке значения 1 производится три замера, при установке значения 0 – один замер

Примечание: реальные значения этих параметров несколько отличаются от значений, вписанных в регистр.

Пример: если сигнал генератора, подаваемый на SJA1000, имеет частоту 16 МГц, и мы желаем получить скорость передачи 250 кбит/с, с точкой замера в районе 62% всего бита, и SJW равным 2 квантам, мы можем установить –
BRP = 4, что дает продолжительность кванта 2 × 4 / 16000000 с = 500 нс, и

TSEG1 = 5, что дает 5 квантов перед точкой замера, и

TSEG2 = 3, что дает 3 кванта после точки замера.

Каждый бит будет содержать 5 + 3 = 8 квантов, что даст нам желаемую скорость передачи 1 / (8 × 500 нс) = 250 кбит/с. Значения регистра должны быть следующими:

Точка замера в районе 5/8 = 62.5% бита.

Обработка ошибок CAN

Как CAN обрабатывает ошибки

Обработка ошибок встроена в протокол CAN и очень важна для производительности системы CAN. Обработка ошибок нацелена на обнаружение ошибок в сообщениях, передающихся по шине CAN, чтобы передатчик мог повторно выслать неверно принятое сообщение. Каждый CAN–контроллер на шине будет пытаться обнаружить ошибку в сообщении. Если ошибка найдётся, обнаруживший её узел будет передавать флаг ошибки, таким образом разрушая трафик шины. Другие узлы обнаружат ошибку, вызванную флагом ошибки (если еще не обнаружили оригинальную ошибку) и предпримут соответствующие действия, т.е. отбракуют текущее сообщение.

Каждый узел обслуживается двумя счетчиками ошибок: счетчиком ошибок передачи (Transmit Error Counter) и счетчиком ошибок приёма (Receive Error Counter). Существуют правила, регламентирующие повышение и/или понижение значения этих счетчиков. По существу, передатчик определяет повышение числа сбоев в счетчике ошибок передачи быстрее, нежели слушающие узлы увеличат значения своих счетчиков ошибок передачи. Это потому, что есть немалая вероятность, что сбой именно в передатчике! Когда значение любого счетчика ошибок превышает определенную величину, узел сначала становится Error Passive – это значит, что он не будет активно разрушать трафик шины при обнаружении ошибки; а затем Bus Off – это значит, что узел вообще не будет принимать участия в передаче данных по шине.

При помощи счетчиков ошибок узел CAN может не только обнаруживать сбои, но и ограничивать ошибки.

Механизмы обнаружения ошибок

Протокол CAN описывает не менее пяти различных способов обнаружения ошибок. Два из них работают на уровне бита, а остальные три – на уровне сообщения.

1.Мониторинг битов (Bit Monitoring).

2.Вставка битов (Bit Stuffing).

3.Проверка кадра (Frame Check).

4.Проверка распознавания (Acknowledgement Check).

5.Проверка циклической избыточности (Cyclic Redundancy Check).

Мониторинг бита

Каждый передатчик шины CAN осуществляет мониторинг (т.е. повторное прочтение) переданного уровня сигнала. Если уровень прочитанного бита отличается от уровня переданного, подается сигнал ошибки бита (Bit Error). (Роста бита ошибок в процессе разрешения конфликтов не происходит.) Вставка битов

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

Проверка кадра

Некоторые части сообщения CAN имеют фиксированный формат, т.е. стандарт четко определяет, какие уровни должны произойти и когда. (Эти части – ограничитель CRC (CRC Delimiter), ограничитель ACK (ACK Delimiter), конец кадра (End of Frame), а также пауза (Intermission), однако для них существуют дополнительные специализированные правила проверки на ошибки.) Если контроллер CAN обнаружит неверное значение в одном из этих полей, он подаст сигнал ошибки формы (Form Error).

Проверка распознавания

Ожидается, что все узлы шины, которые получили сообщение корректно (независимо от того, было ему это сообщение «интересно» или нет), отправят доминантный уровень в так называемой области распознавания (Acknowledgement Slot) кадра. Передатчик будет передавать рецессивный уровень. Если передатчик не сможет обнаружить доминантный уровень в области распознавания, он подаст сигнал ошибки распознавания (Acknowledgement Error).

Проверка циклической избыточности

Каждое сообщение содержит 15–битную контрольную сумму циклической избыточности (Cyclic Redundancy Checksum, CRC), и любой узел, обнаруживший что CRC в сообщении отличается от посчитанного им, подаст сигнал ошибки CRC (CRC Error).

Механизмы ограничения ошибок

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

Каждый узел обслуживают два счетчика ошибок: счетчик ошибок передачи и счетчик ошибок приема. Существуют правила, описывающие условия повышения и/или понижения значений этих счетчиков. По существу, передатчик, обнаруживший сбой, повышает значение своего счетчика ошибок передачи быстрее, чем слушающие узлы повысят значения своих счетчиков ошибок приема. Это потому, что есть большая вероятность, что сбоит сам передатчик!

Узел начинает работу в режиме Error Active. Когда значение любого из двух счетчиков ошибок превысит 127, узел перейдет в состояние Error Passive, а когда значение счетчика ошибок передачи превысит 255, узел перейдёт в состояние Bus Off.

• Узел в режиме Error Active при обнаружении ошибки будет передавать флаги активной ошибки (Active Error Flags).

• Узел в режиме Error Passive при обнаружении ошибки будет передавать флаги пассивной ошибки (Passive Error Flags).

• Узел в режиме Bus Off не будет передавать ничего.

Правила повышения и понижения значений счетчиков ошибок довольно сложные, но принцип прост: ошибка передачи добавляет 8 пунктов, а ошибка прием – 1 пункт. Правильно переданные и/или принятые сообщения вызывают понижение значения счетчика(ов).

Пример (слегка упрощенный): Представим, что у узла A плохой день. Всякий раз, когда A пытается передать сообщение, происходит сбой (не важно, по какой причине). При каждом сбое значение счетчика ошибок передач увеличивается на 8 пунктов и передается флаг активной ошибки. Затем он пытается послать сообщение ещё раз.. и всё повторяется.

Когда значение счетчика ошибок передачи превысит 127 пунктов (т.е. после 16 попыток), узел A перейдёт в режим Error Passive. Разница в том, что теперь он будет передавать флаги пассивной ошибки. Флаг пассивной ошибки содержит 6 рецессивных битов и не будет нарушать передачу других данных по шине – поэтому другие узлы не услышат жалобы A на ошибки шины. Однако A продолжит повышать значение счетчика ошибок передачи. Когда он превысит 255 пунктов, узел A окончательно сдастся и перейдет в режим Bus Off.

Что другие узлы думают об узле A? – После каждого флага активной ошибки, переданного узлом A, остальные узлы повышают значения своих счетчиков пассивной ошибки на 1 пункт. За всё то время, что потребуется узлу A для перехода в режим Bus Off, значения счетчиков ошибок получения остальных узлов не превысят границы Error Passive, т.е. 127. Это значение будет уменьшаться на 1 пункт при каждом корректном получении сообщения. Однако узел А будет оставаться в режиме Bus Off.

Большинство контроллеров CAN будут предоставлять биты статуса (и соответствующие прерывания) для двух состояний:

• «Предупреждение об ошибке» (Error Warning) – значение одного или обеих счетчиков ошибок превысило 96 пунктов

• Bus Off, как описано выше.

Некотрые, но не все (!), контроллеры также предоставляют бит для состояния Error Passive. Немногие контроллеры также предоставляют прямой доступ к счетчикам ошибок.

Привычка контроллеров CAN автоматически переотправлять сообщения при возникновении ошибок иногда может раздражать. На рынке имеется как минимум один контроллер (SJA1000 от Philips), поддерживающий полное ручное управление обработкой ошибок.

Режимы сбоев шины

Стандарт ISO 11898 перечисляет несколько режимов сбоев кабеля шины CAN:

3.CAN_H короткозамкнутый на напряжение батаре

4.CAN_L короткозамкнутый на землю

5.CAN_H короткозамкнутый на землю

6.CAN_L короткозамкнутый на напряжение батареи

7.CAN_L короткозамкнутый на провод

8.CAN_H и CAN_L прерваны в одном и том же месте

9.Потеря соединения с оконечной нагрузкой сети

Для сбоев 1–6 и 9 «рекомендовано», чтобы шина сохраняла работоспособность путём снижения соотношения сигнал/шум (S/N), а в случае сбоя 8 – чтобы исходная подсистема сохранила работоспособность. Для сбоя 7 существует «опциональная» возможность сохранения работоспособности путём снижения соотношения сигнал/шум (S/N).

На практике система CAN, построенная на приемопередатчиках типа 82C250, не сохранит работоспособность при сбоях 1–7, а при сбоях 8–9 может как сохранить, так и не сохранить.

Существуют «устойчивые к сбоям» драйверы, такие как TJA1053, способные обрабатывать все сбои. Обычно за эту устойчивость приходится платить ограничением максимальной скорости; для TJA1053 она составляет 125 кбит/с.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *