Шина CAN и ошибки / Error Active / Error Passive / Bus Off

CAN Ошибки

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

Правила счетчика ошибок

  1. При сбросе счетчик ошибок инициализируется в ноль
  2. Увеличение REC на 1 когда обнаруживается ошибка в передаче
  3. Увеличение REC на 8 если приемник первым передает флаг ошибки
  4. Уменьшение REC на 1 при успешном получении сообщения
  5. Увеличение TEC на 8 когда обнаруживается ошибка при передаче
  6. Уменьшение TEC на 1 при успешной передаче сообщения
  • Transmit Error Counter (TEC) - Счетчик ошибок передачи
  • Receive Error Counter (REC) - Счетчик ошибок чтения

TEC и REC создают метрику для оценки качества передачи данных на шине. Каждый узел действует в соответсатвии со своим индивидуальной оценкой. В результате чего это позволяет отключаться узлу (прекращать передачу пакетов по шине).

Увеличение и уменьшение счетчиков ассиметрично. При успешной передаче если счетчик не равен нулю то он уменшается на 1, при ошибке значение счетчика увеличивается на число больше чем при успешной передаче.

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

ErrorState.jpg

В зависимости от счетчика ошибок состояние CAN контроллера меняется:

  1. Active State (также исходное состояние/нормальный режим работы контроллера CAN), когда REC и TEC ниже пассивной ошибки (лимит 128)
  2. Error Passive, Если хотя бы одна из ошибок счетчика больше или равна 128
  3. Bass Off, Если TEC равен или превышает лимит в 256, CAN контроллер отключается от шины.

Контроллер CAN может отправлять активный флаг ошибки только в состоянии Error Active. Когда CAN-контроллер отправляет флаг ошибки, фактически Передача сообщения будет прервана, и сообщение будет повторено. CAN-контроллеру в состоянии пассивной ошибки по-прежнему разрешено отправлять сообщения, но не должен отправлять активные флаги ошибок. В состоянии Bus Off контроллер CAN не должен оказывать никакого влияния на шину.

Возможны 3-и возможных состояния обнаружения ошибок:

  1. Error active - Счетчики ошибок меньше 128, Он полностью принимает участие в обмене данными по шине и сигнализирует об ошибке путем передачи активного кадра ошибки. Он состоит из последовательности из 6 доминантных битов, за которыми следуют 8 рецессивных битов, все остальные узлы отвечают соответствующим флагом ошибки в ответ на нарушение правило битовой вставки.
  2. Error passive - Узел переходит в это состояния если хотя бы один из счетчиков больше 127. Он по-прежнему участвует в деятельности шины, но при ошибках отправляет только пассивный кадр ошибки. Кроме того, пассивный узел ошибки должен подождать дополнительное время (поле приостановки передачи, 8 рецессивных битов после поля прерывания) после передачи сообщения, прежде чем он сможет инициировать новую передачу данных. Флаг первичной пассивной ошибки состоит из 6 пассивных битов и, таким образом, «прозрачен» на шине и не будет «заглушать» связь.
  3. Bus Off - Если счетчик ошибок передачи CAN-контроллера превышает 255, он переходит в состояние отключения шины. Он отключается от шины (с помощью внутренней логики) и больше не участвует в работе шины. Для повторного подключения контроллера протокола необходимо выполнить так называемую последовательность восстановления отключения шины. Обычно это включает в себя повторную инициализацию и настройку контроллера CAN хост-системой, после чего он будет ждать 128 * 11 рецессивных битов, прежде чем начать связь.

Правила ограничения ошибок CAN

  • Когда получатель обнаруживает ошибку, значение REC увеличивается на 1, за исключением случаев, когда обнаруженная ошибка была битовой ошибкой во время отправки флага активной ошибки или флага перегрузки.
  • Когда приемник обнаруживает доминантный бит в качестве первого бита после отправки флага ошибки, значение REC увеличивается на 8.
  • Когда передатчик отправляет флаг ошибки, TEC увеличивается на 8. Исключение 1: если передатчик является пассивным по ошибке и обнаруживает ошибку ACK из-за того, что не обнаруживает доминантный ACK, и не обнаруживает доминантный бит при отправке своего флага пассивной ошибки. Исключение 2: Если передатчик отправляет флаг ошибки, потому что во время арбитража произошла ошибка материала, которая должна была быть рецессивной и была отправлена как рецессивная, но отслеживалась как доминантная.
  • Если передатчик обнаруживает битовую ошибку при отправке флага активной ошибки или кадра перегрузки, TEC увеличивается на 8
  • Если получатель обнаруживает битовую ошибку при отправке флага активной ошибки или флага перегрузки, значение REC увеличивается на 8.
  • Любой узел допускает до 7 последовательных доминантных битов после отправки флага активной ошибки, флага пассивной ошибки или флага перегрузки. После обнаружения четырнадцатого последовательного доминантного бита (в случае флага активной ошибки или флага перегрузки) или после обнаружения восьмого последовательного доминантного бита, следующего за флагом пассивной ошибки, и после каждой последовательности дополнительных восьми последовательных доминантных битов каждый передатчик увеличивает свой TEC на 8, и каждый приемник увеличивает свой REC на 8.
  • После успешной передачи кадра (получение ACK и отсутствие ошибок до завершения EOF) TEC уменьшается на 1, если он еще не равен 0.
  • После успешного приема кадра (прием без ошибок до слота ACK и успешная отправка бита ACK) значение REC уменьшается на 1, если оно было между 1 и 127. Если значение REC было 0, оно остается равным 0. , и если оно было больше 127, ему будет присвоено значение от 119 до 127.
  • Узел является пассивным по ошибкам, когда TEC равен или превышает 128 или когда REC равен или превышает 128. Состояние ошибки, позволяющее узлу стать пассивным по ошибкам, заставляет узел отправлять флаг активной ошибки.
  • Узел отключается от шины, когда TEC больше или равен 256.
  • Узел Error Passive снова становится Error Active, когда значения TEC и REC меньше или равны 127.
  • Узлу, который отключен от шины, разрешается стать активным по ошибке (больше не отключенным от шины), при этом его счетчики ошибок будут установлены на 0 после того, как на шине будет проверено 128 вхождений 11 последовательных рецессивных битов.'

Пошаговый пример

can_error.jpg

  1. Узел CAN 1 передает сообщение на шину CAN и считывает каждый отправленный бит.
  2. При этом он обнаруживает, что один бит, который был отправлен доминантным, был прочитан как рецессивный.
  3. Это «битовая ошибка», и узел 1 поднимает флаг активной ошибки, чтобы сообщить другим узлам.
  4. На практике это означает, что узел 1 отправляет на шину последовательность из 6 доминантных битов.
  5. В свою очередь, 6 доминирующих битов рассматриваются другими узлами как «ошибка вставки битов».
  6. В ответ узлы 2 и 3 одновременно поднимают флаг активной ошибки.
  7. Эта последовательность поднятых флагов ошибок составляет часть «кадра ошибки CAN».
  8. Узел CAN 1, передатчик, увеличивает свой «Счетчик ошибок передачи» (TEC) на 8.
  9. Узлы CAN 2 и 3 увеличивают свой счетчик ошибок приема (REC) на 1.
  10. CAN-узел 1 автоматически повторно передает сообщение – и теперь это удается
  11. В результате узел 1 уменьшает свой TEC на 1, а узлы 2 и 3 уменьшают свой REC на 1.

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

can_error_flag.jpg

Оставьте комментарий

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