Перейти к содержанию

Кадр ошибки CAN (error frame)

Если узел CAN заметил ошибку в кадре, он не ждёт конца передачи, а сразу портит кадр для всех. Так ни один узел не примет испорченное сообщение, а передатчик повторит его. Инструмент для этого — кадр ошибки.

Обновлено Редакция GAW

Кадр ошибки (error frame) — один из четырёх типов кадров CAN, которым узел сообщает всем, что текущий кадр испорчен. Спецификация Bosch CAN 2.0 описывает его из двух полей: наложенных друг на друга флагов ошибки от разных узлов и разделителя.

Как он устроен

  • Активный флаг ошибки — шесть доминантных битов подряд. Он нарушает правило битстаффинга (не больше пяти одинаковых битов) или фиксированную форму полей ACK и EOF, поэтому ошибку замечают все узлы и отвечают своими флагами. На шине получается от 6 до 12 доминантных битов.
  • Пассивный флаг ошибки — шесть рецессивных битов. Его передаёт узел в состоянии error passive; если этот узел — приёмник, такой флаг чужой кадр не разрушает. Если же флаг передаёт сам передатчик кадра, шесть одинаковых битов нарушают правило заполнения, и ошибку увидят приёмники.
  • Разделитель — восемь рецессивных битов. После флага каждый узел передаёт рецессивные биты и ждёт, пока шина освободится, а затем добавляет ещё семь.

Какой флаг узел имеет право передать, определяется его состоянием по счётчикам ошибок.

Когда начинается флаг

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

Что дальше

TI в SLOA101B подчёркивает: передатчик повторяет испорченный кадр автоматически, без участия программы, а повтор снова проходит арбитраж. Bosch при этом советует не загружать шину на 100 %: узлу в состоянии error passive, чтобы правильно завершить кадр ошибки, может понадобиться свободная шина в течение хотя бы трёх битов. Из чего состоит обычный кадр и как считаются вставленные биты, показывает калькулятор кадра CAN.

Не путать с кадром перегрузки (overload frame): у него та же форма, но им узел просит задержать следующий кадр, а не отменяет текущий. И с ошибкой кадра UART — это флаг приёмника UART, а не отдельный кадр на шине.

Частые вопросы

Почему флаг ошибки CAN длится от 6 до 12 битов?

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

Что происходит после кадра ошибки?

Передатчик автоматически повторяет испорченный кадр. Повтор снова участвует в арбитраже наравне с другими кадрами, поэтому может уступить более приоритетному сообщению. Каждая ошибка меняет счётчики TEC и REC, и при частых ошибках узел переходит в error passive.

Как увидеть кадры ошибки?

Анализатором CAN или осциллографом с декодером: кадр обрывается, а за ним идёт серия из 6–12 доминантных битов. Многие контроллеры считают такие события в своих счётчиках ошибок, которые программа может прочитать.

Источники

  1. Robert Bosch GmbH. CAN Specification Version 2.0 (1991) — часть A, разд. 3.1.3: кадр ошибки — наложение флагов ошибки от разных узлов и разделитель; активный флаг — шесть доминантных битов, нарушает правило заполнения или фиксированную форму полей ACK и EOF; остальные узлы отвечают своими флагами, общая длина — от 6 до 12 битов; пассивный флаг — шесть рецессивных битов, если их не перезапишут доминантные; пассивный узел ждёт шесть одинаковых битов подряд; разделитель — восемь рецессивных битов; узлу error passive может понадобиться свободная шина не меньше 3 битов, поэтому шину не следует загружать на 100 %; разд. 6: флаг начинается со следующего бита после ошибки, при ошибке CRC — после разделителя ACK; разд. 3.1.4: кадр перегрузки — флаг перегрузки и разделитель той же формы, что у кадра ошибки, не больше двух подряд для задержки следующего кадра
  2. Texas Instruments. Introduction to the Controller Area Network (CAN), SLOA101B (S. Corrigan, August 2002, rev. May 2016) — разд. 4.2.3: кадр ошибки нарушает правила формата, заставляет все узлы отправить свои кадры ошибки, после чего передатчик автоматически повторяет сообщение; разд. 4.4: активный кадр ошибки — шесть доминантных битов, нарушающих правило заполнения, вместе с ответами — от 6 до 12 битов, затем разделитель из восьми рецессивных и пауза; повторённый кадр снова проходит арбитраж

Нашли ошибку?