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

Шина CAN

CAN — дифференциальная шина без ведущего: узлы на одной витой паре сами решают, кто передаёт, по идентификатору сообщения и аппаратно проверяют каждый кадр. Ниже — уровни и терминаторы по ISO 11898-2, формат кадра и обработка ошибок по спецификации Bosch, расчёт битового тайминга и подключение MCP2515.

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

CAN (Controller Area Network) — последовательная шина, которую Robert Bosch GmbH разработала для автомобилей и представила в 1986 году. Узлы подключаются к одной дифференциальной паре CAN_H и CAN_L и обмениваются короткими кадрами — до 8 байт данных в каждом. Кадр несёт не адрес получателя, а идентификатор: он обозначает смысл сообщения («обороты двигателя», «температура») и одновременно его приоритет. Ведущего на шине нет. Передавать может любой узел, а одновременные попытки разрешает побитовый арбитраж: сообщение с меньшим идентификатором проходит без задержки и без искажений, остальные повторяются сразу после него.

Контроль ошибок встроен в сам протокол: CRC, проверка формы кадра, контроль каждого бита передатчиком, подтверждение приёма и счётчики ошибок, которые отключают неисправный узел. Поэтому CAN работает в автомобилях и спецтехнике, промышленной автоматике, на транспорте и в медицинском оборудовании. Канальный уровень описывают спецификация Bosch CAN 2.0 и стандарт ISO 11898-1, физический уровень высокоскоростного CAN, о котором здесь речь, — ISO 11898-2.

Коротко

  • Линии: CAN_H, CAN_L и общий провод; витая пара 120 Ом, по терминатору 120 Ом на каждом конце — между линиями около 60 Ом.
  • Уровни: рецессивный — обе линии около 2,5 В, разность около нуля; доминантный — CAN_H около 3,5 В, CAN_L около 1,5 В, разность около 2 В. Приёмник: ниже 0,5 В — рецессивный, выше 0,9 В — доминантный.
  • Скорость и длина: до 1 Мбит/с на 40 м, 500 кбит/с — 100 м, 125 кбит/с — около 500 м, 50 кбит/с — около 1 км.
  • Кадр: идентификатор 11 бит (CAN 2.0A) или 29 бит (CAN 2.0B), 0–8 байт данных, CRC-15, подтверждение ACK; после пяти одинаковых битов передатчик вставляет противоположный.
  • Арбитраж и ошибки: меньший идентификатор — выше приоритет; при счётчике ошибок TEC или REC от 128 узел становится error passive, при TEC от 256 отключается от шины (bus-off).
  • CAN FD: до 64 байт данных и повышенная скорость в фазе данных; нужны контроллер и трансивер с поддержкой FD.

Как работает шина CAN

Каждый узел шины состоит из двух частей. Контроллер протокола формирует и разбирает кадры, считает CRC, ведёт счётчики ошибок; он бывает встроенным в микроконтроллер (bxCAN в STM32) или отдельной микросхемой (MCP2515). Трансивер превращает логические сигналы контроллера TXD и RXD в дифференциальные уровни на линиях и обратно. Трансивер слушает шину всегда, в том числе пока сам передаёт: контроллер сравнивает каждый отправленный бит с тем, что видит на линии.

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

Доминантный и рецессивный уровни

У шины два состояния. Доминантное (логический 0) создаёт передатчик, рецессивное (логическая 1) — состояние, когда никто не передаёт. Если один узел выдаёт 0, а другой 1, на шине будет 0: доминантный бит перекрывает рецессивный, как в «монтажном И». На этом свойстве построены и арбитраж, и подтверждение приёма, и сигнализация ошибок.

Откуда взялся CAN: история и стандарты

  • 1983 — в Bosch начинают разработку новой последовательной шины для автомобилей.
  • Февраль 1986 — Bosch представляет CAN на конгрессе Общества автомобильных инженеров SAE.
  • 1987 — первые микросхемы контроллеров: Intel 82526, вскоре Philips 82C200.
  • 1991 — спецификация Bosch CAN 2.0: часть A описывает стандартный формат с 11-битным идентификатором, часть B добавляет расширенный формат с 29-битным. В том же году Mercedes-Benz начинает ставить CAN на автомобили высшего класса.
  • 1992 — основана организация пользователей и производителей CAN in Automation (CiA), сейчас она ведёт CANopen и рекомендации по физическому уровню.
  • Ноябрь 1993 — опубликован стандарт ISO 11898, в 1995 году к нему добавлен расширенный формат кадра.
  • 2012 — Bosch публикует спецификацию CAN FD 1.0: длиннее поле данных и выше скорость в фазе данных.

Где применяется CAN

Texas Instruments в обзоре SLOA101 перечисляет легковые и грузовые автомобили, мотоциклы и снегоходы, поезда и автобусы, самолёты, сельскохозяйственную, строительную и горную технику, суда, а также автоматизацию зданий, медицинскую технику и производство. Типичный узор применения — много коротких сообщений вроде температуры или оборотов, которые нужны сразу нескольким узлам и должны дойти с гарантированной задержкой. Для длинной линии с опросом по схеме «ведущий — ведомые» проще и дешевле RS-485 с Modbus RTU; CAN выигрывает там, где узлы передают по событиям и важна аппаратная проверка каждого кадра.

Физический уровень: CAN_H, CAN_L и напряжения

В рецессивном состоянии передатчик выключен, и обе линии подтянуты к середине питания: у TJA1050 — через входные цепи приёмника с внутренним сопротивлением около 25 кОм к уровню VCC/2 (NXP, AN00020). Чтобы передать доминантный бит, передатчик поднимает CAN_H примерно на 1 В и опускает CAN_L примерно на 1 В — получается разность около 2 В. Приёмник смотрит только на разность CAN_H − CAN_L, поэтому помеха, наведённая на оба провода одинаково, на результат не влияет.

Рецессивное и доминантное состояния шины CAN: напряжения CAN_H и CAN_L и их разностьКогда передатчик выдаёт логическую единицу, шина рецессивна: обе линии около 2,5 В, разность около нуля. Логический ноль — доминантное состояние: CAN_H поднимается примерно до 3,5 В, CAN_L опускается примерно до 1,5 В, разность около 2 В. Приёмник считает шину рецессивной, если разность ниже 0,5 В, и доминантной, если выше 0,9 В.1рецессивный0доминантный1рецессивный0доминантный0доминантный1рецессивныйTXDШина3,5 В2,5 В1,5 ВCAN_HCAN_Lобе ≈ 2,5 ВUдиф≈ 2 В: доминантный0,9 В0,5 В≈ 0: рецессивный
Рецессивные и доминантные биты на шине CAN. Логика инвертирована: TXD = 0 — доминантное состояние. Серая полоса — зона 0,5–0,9 В, где приёмник не обязан различать состояния. Уровни типовые.
ПараметрЗначениеУсловия
Напряжение каждой линии в рецессиве2–3 В, типично 0,5·VCC ≈ 2,5 Вбез нагрузки, TJA1051
CAN_H в доминанте2,75–4,5 В, типично 3,5 Внагрузка 50–65 Ом
CAN_L в доминанте0,5–2,25 В, типично 1,5 Внагрузка 50–65 Ом
Разность CAN_H − CAN_L в доминанте1,5–3 Внагрузка 45–65 Ом
Разность в рецессиве−50…+50 мВбез нагрузки
Порог приёмника0,5–0,9 В, типично 0,7 Вниже 0,5 В — рецессив, выше 0,9 В — доминант
Синфазный диапазон−2…+7 В по ISO 11898у TJA1050 и MCP2562 пороги нормированы до ±12 В, у TJA1051 — до ±30 В

Значения в таблице — из даташита NXP TJA1051 (уровни и пороги) и обзоров TI SLOA101 и SLLA270 (синфазный диапазон ISO 11898). У других трансиверов цифры близкие, потому что все они следуют ISO 11898-2.

Отсюда главное отличие CAN от RS-485. Передатчик RS-485 активно выдаёт оба состояния, а передатчик CAN — только доминантное. Рецессивное состояние восстанавливается пассивно: ток разряжает ёмкость линии через терминаторы. TI в SLLA270 называет CAN по этой причине технологией с открытым коллектором и объясняет ею потолок в 1 Мбит/с для классического CAN. Без терминаторов фронт «доминант → рецессив» затягивается на время разряда ёмкости линии через входы приёмников, а у них десятки килоом.

Общий провод и синфазный диапазон

Приёмник различает уровни, только пока каждая линия относительно его собственной земли остаётся в синфазном диапазоне. ISO 11898 требует −2…+7 В — столько составляет допустимый сдвиг земель между узлами. Многие трансиверы держат больше, но на запас не стоит рассчитывать: без общего провода потенциалы земель удалённых узлов ничем не связаны. Поэтому в кабеле вместе с парой прокладывают общий провод CAN_GND, а TI в SLLA270 советует заземлять сеть в одной точке, чтобы по экрану и общему проводу не текли уравнивающие токи. Если земли узлов могут расходиться сильнее, ставят трансиверы с гальванической развязкой.

Топология, терминаторы 120 Ом и отводы

ISO 11898 описывает одну топологию — линию. Витая пара с волновым сопротивлением 120 Ом идёт от первого узла к последнему, на двух её физических концах стоят терминаторы по 120 Ом, узлы подключены к магистрали короткими отводами. По TI SLOA101, стандарт рассчитан на 1 Мбит/с при длине шины 40 м и до 30 узлов, а отвод без терминатора рекомендует не длиннее 0,3 м.

Шина CAN: витая пара CAN_H и CAN_L с терминаторами 120 Ом на обоих концахЛинии CAN_H и CAN_L и общий провод идут от первого узла к последнему. На двух физических концах пары между CAN_H и CAN_L стоят терминаторы RT1 и RT2 по 120 Ом, вместе они дают 60 Ом. Узлы — микроконтроллер с контроллером CAN и трансивер — подключены к магистрали короткими отводами без терминаторов.CAN_HCAN_LGNDRT1120 ОмRT2120 Омвитая параZ₀ ≈ 120 Омобщий проводRT1 ∥ RT2 = 60 Ом между CAN_H и CAN_LУзел 1МК + трансиверУзел 2МК + трансиверУзел 3МК + трансиверУзел NМК + трансивер…
Шина CAN: витая пара CAN_H/CAN_L и общий провод от узла к узлу, терминаторы RT1 и RT2 — только на двух концах линии, узлы — на коротких отводах: на 1 Мбит/с не длиннее 0,3 м.

Терминаторы: сколько, где и как проверить

  • Ровно два терминатора по 120 Ом, на двух концах линии. Вместе они дают 60 Ом — на такую нагрузку нормирован передатчик. Лишние терминаторы — в середине шины или на каждом узле — снижают доминантный уровень и искажают сигнал.
  • Лучше в разъёме или отдельной заглушке, чем в узле. ISO 11898, по TI SLLA270, не рекомендует ставить терминатор внутри узла: если такой узел отключить, шина останется без согласования. На практике терминатор часто включают перемычкой на крайних платах — тогда её положение надо проверять при каждой перекомпоновке.
  • Проверка омметром. При выключенном питании всех узлов сопротивление между CAN_H и CAN_L должно быть около 60 Ом — два резистора по 120 Ом параллельно, чуть меньше из-за входов трансиверов. 120 Ом — стоит только один терминатор, 40 Ом — три, единицы ом — замыкание.
  • Мощность. В доминантном бите на терминаторе 120 Ом около 2 В, это примерно 33 мВт (по закону Ома: P=U2/RP = U^2 / R), так что резистор 0,25 Вт с допуском 5 % подходит. TI предупреждает о другом: при замыкании линии на бортовые 24 В такой резистор сгорит, поэтому там, где это возможно, выбирают мощность с запасом.

Для длинных линий CiA 303-1 рекомендует не только толще провод, но и большее сопротивление терминаторов — чтобы снизить потери сигнала на сопротивлении кабеля:

Длина шиныСопротивление проводаСечениеТерминаторСкорость
0–40 м70 мОм/м0,25–0,34 мм²124 Ом1000 кбит/с при 40 м
40–300 мне больше 60 мОм/м0,34–0,6 мм²150–300 Омбольше 500 кбит/с при 100 м
300–600 мне больше 40 мОм/м0,5–0,6 мм²150–300 Омбольше 100 кбит/с при 500 м
600–1000 мне больше 26 мОм/м0,75–0,8 мм²150–300 Омбольше 50 кбит/с при 1 км

Кабель в той же рекомендации — 120 Ом, задержка 5 нс/м. Экран, если он есть, соединяют с землёй в одной точке (TI SLLA270).

Расщеплённый терминатор

Вместо одного резистора 120 Ом на конце линии ставят два по 60 Ом последовательно, а их среднюю точку соединяют с землёй через конденсатор. Для дифференциального сигнала ничего не меняется, а синфазная высокочастотная помеха уходит через конденсатор на землю — это улучшает электромагнитную совместимость. TI рекомендует резисторы 60 Ом с допуском 1 % — их разброс снижает помехоустойчивость — и конденсатор 4,7 нФ, NXP в AN00020 называет 10–100 нФ. Для TJA1050 NXP прямо рекомендует расщеплённый терминатор: по её измерениям он позволяет обойтись без синфазного дросселя. Среднюю точку можно дополнительно стабилизировать выводом трансивера: SPLIT у MCP2561 или Vref у SN65HVD230.

Два способа терминировать конец шины CAN: один резистор 120 Ом или расщеплённый терминаторСлева между CAN_H и CAN_L включён один резистор 120 Ом. Справа терминатор расщеплён на два резистора по 60 Ом, их средняя точка соединена с землёй через конденсатор CL: он отводит на землю синфазную высокочастотную помеху.Обычный терминаторCAN_HCAN_LRT120 Омк узлам шиныРасщеплённый (split)CAN_HCAN_LR160 ОмR260 ОмCL4,7 нФк узлам шиныR1 и R2 — одинаковые, с допуском 1 %
Обычный и расщеплённый терминатор на конце линии. Конденсатор CL отводит на землю синфазную помеху; 4,7 нФ — значение TI, NXP указывает 10–100 нФ.

Отводы: почему 0,3 м и когда можно длиннее

Отвод — это кусок линии без терминатора, от его конца сигнал отражается. Чем короче фронт передатчика, тем короче допустимый отвод. TI в SLLA270 считает так: критическая длина линии — это когда задержка туда и обратно равна времени фронта, а отвод должен быть не длиннее трети критической длины. Для фронта 50 нс и кабеля 5 нс/м критическая длина — 5 м, отвод — до 1,67 м. Если замедлить фронты SN65HVD230 резистором 10 кОм на выводе Rs (фронт около 160 нс), допустимый отвод вырастает до 5,3 м.

Стандарты строже: ISO 11898 ограничивает отвод 0,3 м на 1 Мбит/с, автомобильный SAE J2284 рекомендует меньше 1 м (NXP, AN00020). CiA 303-1 даёт ориентир через битовый тайминг: длина одиночного отвода Lu<tPROPSEG/(50⋅tp)L_u < t_\text{PROPSEG} / (50 \cdot t_p), где tp=5t_p = 5 нс/м. Звезду ни ISO 11898, ни SAE J2284 не описывают: NXP допускает её в автомобилях как вынужденную меру и советует проверять такую топологию моделированием или измерениями. J2284 к тому же рекомендует не располагать узлы через равные промежутки и не делать отводы одинаковой длины — чтобы не возникали стоячие волны.

Разъём DE-9 и цоколёвка по CiA 303-1

В промышленных сетях и у USB-адаптеров CAN часто ставят разъём DE-9 (его нередко называют DB9). Назначение выводов задаёт рекомендация CiA 303-1:

ВыводСигналНазначение
2CAN_Lлиния CAN_L
3CAN_GNDобщий провод
5CAN_SHLDэкран, необязательно
6GNDземля, необязательно; внутри устройства соединена с выводом 3
7CAN_Hлиния CAN_H
9CAN_V+внешнее питание трансивера и оптронов при гальванической развязке, необязательно
1, 4, 8—резерв

В автомобильном диагностическом разъёме OBD-II (SAE J1962) CAN_H — вывод 6, CAN_L — вывод 14, корпус и сигнальная земля — выводы 4 и 5, +12 В — вывод 16.

Скорость и длина линии CAN

СкоростьДлина шиныОткуда цифра
1 Мбит/с40 мISO 11898 по TI SLOA101 и SLLA270, CiA 303-1; в сетях CANopen на практике около 25 м (HMS)
500 кбит/с100 мTI SLLA270, CiA 303-1, Microchip AN754
250 кбит/с200–250 м200 м — TI SLLA270, 250 м — Microchip AN754 и HMS
125 кбит/с500 мMicrochip AN754, HMS
100 кбит/с500 мTI SLLA270, CiA 303-1
50 кбит/с1000 мTI SLLA270, CiA 303-1, HMS

Для линий длиннее 100 м TI предлагает осторожное правило: скорость в Мбит/с, умноженная на длину в метрах, — не больше 50. Для 1000 м это 50 кбит/с, и, по словам TI, лабораторные опыты с кабелем 120 Ом дали ту же цифру.

Почему длина ограничена: арбитраж и подтверждение

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

Bosch формулирует это как условие для сегмента распространения битового времени (о сегментах — ниже):

tProp_Seg≥2⋅(tвых+tлинии+tвх),t_\text{Prop\_Seg} \ge 2 \cdot \left( t_\text{вых} + t_\text{линии} + t_\text{вх} \right),

где tвыхt_\text{вых} и tвхt_\text{вх} — задержки узла на выходе и входе (контроллер и трансивер), tлинииt_\text{линии} — задержка кабеля между двумя самыми удалёнными узлами, около 5 нс/м. Два примера из первоисточников:

  • Microchip AN754: линия 50 м по 5,5 нс/м (275 нс), задержки приёмника 40 нс и передатчика 60 нс — в сумме 750 нс туда и обратно. Если бит состоит из 10 квантов и под распространение отдать 6 из них, квант — 125 нс, бит — 1,25 мкс, предел — 800 кбит/с.
  • TI SLLA270: 10 м кабеля и узлы с цифровыми изоляторами (по 17 нс), задержкой контроллера 50 нс и трансивера по 100 нс на передачу и приём дают 618 нс туда и обратно, и это ещё без запаса на точность генераторов.

Длинную линию ограничивает и затухание: напряжение доминантного бита падает на сопротивлении кабеля и входных сопротивлениях узлов. NXP в AN00020 рекомендует считать оба ограничения — по задержке и по амплитуде — и брать меньшее из двух значений длины.

Формат кадра CAN

Спецификация Bosch знает четыре типа кадров: кадр данных, удалённый кадр — запрос данных, кадр ошибки и кадр перегрузки. Кадры данных и удалённые бывают стандартными, с 11-битным идентификатором, и расширенными, с 29-битным.

Кадр данных CAN: стандартный с 11-битным и расширенный с 29-битным идентификаторомСтандартный кадр: SOF, идентификатор 11 бит, RTR, IDE, r0, DLC 4 бита, данные от 0 до 64 бит, CRC 15 бит, разделитель CRC, слот ACK, разделитель ACK, конец кадра 7 бит и межкадровый интервал 3 бита. В расширенном кадре после базового идентификатора идут SRR и IDE, затем 18 бит расширения идентификатора, RTR и резервные биты r1 и r0. Битстаффинг действует от SOF до конца последовательности CRC.Стандартный кадр (CAN 2.0A): идентификатор 11 битSOF1Идентификатор11RTR1IDE1r01DLC4Данные0–64CRC15разд.1ACK1разд.1EOF7IFS3битстаффинг: после пяти одинаковых битов вставляется противоположныйРасширенный кадр (CAN 2.0B): идентификатор 29 битSOF1Базовый ID11SRR1IDE1Расширение ID18RTR1r11r01DLC4Данные0–64CRC15разд.1ACK1разд.1EOF7IFS3битстаффинг: после пяти одинаковых битов вставляется противоположныйполе арбитражаполе управленияданные, 0–8 байтCRC-15фиксированная форма, без битстаффинга
Стандартный и расширенный кадры данных. Ширина полей не в масштабе, цифры под полями — длина в битах.
ПолеБитНазначение
SOF1доминантный бит начала кадра; по его фронту все узлы выполняют жёсткую синхронизацию
Идентификатор11смысл и приоритет сообщения; передаётся старшим битом вперёд
RTR10 — кадр данных, 1 — удалённый кадр
IDE10 — стандартный формат, 1 — расширенный
r01резерв, передаётся доминантным
DLC4число байтов данных, 0–8
Данные0–64байты старшим битом вперёд
CRC15 + 1контрольная сумма и рецессивный разделитель
ACK1 + 1слот подтверждения и рецессивный разделитель
EOF7семь рецессивных битов — конец кадра
Межкадровый интервал3intermission: три рецессивных бита, затем шина свободна

Подробности, которые пригодятся при чтении осциллограмм и отладке:

  • Идентификатор. По спецификации Bosch семь старших битов стандартного идентификатора не могут быть все рецессивными, поэтому значения 0x7F0–0x7FF запрещены.
  • Расширенный кадр. После 11 бит базового идентификатора идут рецессивный бит SRR (на месте RTR) и рецессивный IDE, затем 18 бит расширения, RTR и два резервных бита r1 и r0. Расширенный идентификатор — это 29 бит: базовая часть ID28–ID18 и расширение ID17–ID0.
  • Удалённый кадр запрашивает данные: в нём RTR рецессивный, поля данных нет, а DLC равен длине ожидаемого ответа. Узел, у которого есть данные с таким идентификатором, отвечает кадром данных.
  • DLC. CAN 2.0 допускает 0–8 байт, «другие значения использовать нельзя». Коды 9–15 позже получили смысл в CAN FD.
  • CRC — остаток от деления на образующий полином x15+x14+x10+x8+x7+x4+x3+1x^{15} + x^{14} + x^{10} + x^8 + x^7 + x^4 + x^3 + 1 (0x4599) последовательности от SOF до конца данных без вставленных битов. По Bosch механизмы контроля обнаруживают все глобальные ошибки, любые 5 случайных искажённых битов в кадре, пакеты ошибок короче 15 бит и любое нечётное число ошибок; вероятность пропустить искажённый кадр — меньше 4,7·10⁻¹¹ от доли искажённых кадров.
  • ACK. Передатчик выдаёт в слоте ACK рецессивный бит, а каждый приёмник, получивший кадр с правильной CRC, перекрывает его доминантным. Подтверждение значит «кадр принят без ошибок хотя бы одним узлом», а не «получатель обработал данные».
  • Когда кадр считается доставленным. Для передатчика — если до конца EOF не было ошибок, для приёмника — до предпоследнего бита EOF. Испорченный кадр передатчик повторяет сам, как только шина освободится.

Битстаффинг: пять одинаковых битов

В CAN нет отдельного такта: приёмник подстраивает свой битовый генератор по фронтам сигнала. Чтобы фронты были, передатчик после каждых пяти одинаковых битов вставляет один противоположный (bit stuffing), а приёмник его удаляет. Правило действует от SOF до конца последовательности CRC. Разделитель CRC, поле ACK и EOF имеют фиксированную форму и не дополняются, кадры ошибки и перегрузки — тоже. Шесть одинаковых битов подряд в поле со вставками — это ошибка заполнения, и на этом построен флаг ошибки: шесть доминантных битов, нарушающих правило.

Вставленные биты удлиняют кадр, и в худшем случае ощутимо. Стандартный кадр с 8 байтами данных — 108 бит от SOF до EOF плюс 3 бита межкадрового интервала, всего 111. Под правило попадают 98 из них, от SOF до конца CRC. Первая вставка возможна после 5 бит, следующие — каждые 4 бита, потому что вставленный бит начинает новую серию. Отсюда до ⌊(98 − 1) / 4⌋ = 24 вставок и до 135 бит на кадр. Для расширенного кадра с 8 байтами — от 131 до 160 бит.

СкоростьСтандартный кадр, 8 байтКадров в секунду, не большеПолезных данных
125 кбит/с0,89–1,08 мс926–112659–72 кбит/с
250 кбит/с444–540 мкс1852–2252119–144 кбит/с
500 кбит/с222–270 мкс3704–4505237–288 кбит/с
1 Мбит/с111–135 мкс7407–9009474–577 кбит/с

Диапазоны — от кадра без вставленных битов до худшего случая с 24 вставками. Bosch советует не загружать шину на 100 %: узлу в состоянии error passive, чтобы правильно завершить кадр ошибки, может понадобиться свободная шина в течение не меньше 3 битов.

Арбитраж: почему меньший идентификатор важнее

Передавать можно, только когда шина свободна. Если несколько узлов начали кадр одновременно, все они передают биты идентификатора и сравнивают каждый с тем, что видят на шине. Пока уровни совпадают, передача продолжается. Узел, который выдал рецессивную единицу, а увидел доминантный ноль, проиграл: по спецификации Bosch он прекращает передачу, «не отправляя больше ни одного бита», и становится приёмником. Кадр победителя не искажается и не задерживается, а проигравшие повторят попытку, когда шина освободится.

Побитовый арбитраж CAN: три узла начинают передачу одновременноУзлы A (идентификатор 0x0E5), B (0x0E3) и C (0x0F1) одновременно передают SOF и идентификатор. Пока биты совпадают, передают все. На бите ID4 узел C передаёт рецессивную единицу, а видит на шине доминантный ноль и прекращает передачу. На бите ID2 так же выбывает узел A. Узел B с наименьшим идентификатором продолжает кадр, его данные не искажены.идентификатор: ID10 … ID0SOF109876543210RTRУзел AID 0x0E50000111001передал 1, увидел 0 → приёмУзел BID 0x0E30000111000110победилУзел CID 0x0F100001111передал 1, увидел 0 → приёмШина0 — доминантный0000111000110
Арбитраж трёх узлов. Узел C выбывает на бите ID4, узел A — на бите ID2; узел B с наименьшим идентификатором 0x0E3 продолжает кадр.

Отсюда правила, которые нужно учитывать при назначении идентификаторов:

  • Меньший идентификатор — выше приоритет. Идентификатор из одних нулей держит шину в доминанте дольше всех и всегда выигрывает. Приоритеты раздают по важности: в примере TI сообщения тормозной системы получают меньший идентификатор, чем указатели поворота.
  • Кадр данных сильнее удалённого кадра с тем же идентификатором: у первого RTR доминантный.
  • Стандартный кадр сильнее расширенного с тем же базовым идентификатором: на месте RTR расширенный кадр передаёт рецессивный SRR.
  • Идентификаторы передатчиков должны быть уникальными. Арбитраж решается только идентификатором и битом RTR. Если два узла одновременно отправят кадр данных с одинаковым идентификатором и разными данными, на первом несовпадающем бите данных один из них получит ошибку бита, и кадр будет испорчен.

Арбитраж решает и задачу доступа, и задачу приоритета без единого лишнего бита. Цена — та самая связь скорости и длины линии: все узлы должны видеть один и тот же бит одновременно.

Обработка ошибок: TEC, REC, error passive и bus-off

Пять типов ошибок

ОшибкаКто обнаруживаетПризнак
Ошибка бита (bit error)передатчикотправил одно значение, а на шине другое; исключения — рецессивный бит в поле арбитража и в слоте ACK
Ошибка заполнения (stuff error)всешестой одинаковый бит подряд в поле со вставками
Ошибка CRCприёмникивычисленная CRC не совпала с принятой
Ошибка формы (form error)всенедопустимый бит в поле фиксированной формы: разделителях, EOF
Ошибка подтверждения (ACK error)передатчикв слоте ACK нет доминантного бита — кадр не принял ни один узел

Узел, обнаруживший ошибку, со следующего бита передаёт флаг ошибки; при ошибке CRC — после разделителя ACK. Активный флаг — шесть доминантных битов подряд: он нарушает правило заполнения или форму кадра, поэтому ошибку видят все узлы и отвечают своими флагами. Наложенные флаги дают на шине от 6 до 12 доминантных битов, за ними — разделитель из 8 рецессивных. Пассивный флаг — шесть рецессивных битов, и сам по себе чужой кадр он не портит. По Bosch от обнаружения ошибки до начала следующего кадра проходит не больше 31 бита, если ошибок больше нет.

Счётчики TEC и REC

Каждый узел ведёт два счётчика: ошибок передачи TEC и ошибок приёма REC. Главные правила из спецификации Bosch:

СобытиеСчётчик
Приёмник обнаружил ошибкуREC + 1
Приёмник увидел доминантный бит сразу после своего флага ошибкиREC + 8
Передатчик отправил флаг ошибкиTEC + 8
Ошибка бита во время своего активного флага ошибкиTEC + 8 у передатчика, REC + 8 у приёмника
Кадр успешно переданTEC − 1, если TEC больше нуля
Кадр успешно принятREC − 1, если REC был от 1 до 127; если больше 127 — REC становится от 119 до 127

Исключения из правила «TEC + 8»: передатчик в состоянии error passive, который получил ошибку подтверждения и не увидел доминантного бита во время своего пассивного флага, и ошибка заполнения в поле арбитража, когда вставленный рецессивный бит прочитан как доминантный. В этих случаях TEC не меняется.

Состояния узла

СостояниеУсловиеПоведение
Error activeTEC ≤ 127 и REC ≤ 127полноценно работает, при ошибке передаёт активный флаг
Error passiveTEC ≥ 128 или REC ≥ 128передаёт только пассивный флаг; после своего кадра ждёт ещё 8 рецессивных битов, прежде чем передавать снова
Bus-offTEC ≥ 256не влияет на шину, выход трансивера фактически отключён

Из bus-off узел возвращается в error active со сброшенными счётчиками после того, как увидит на шине 128 раз по 11 рецессивных битов подряд. MCP2515 делает это сам, без участия программы; bxCAN в STM32 — автоматически, если установлен бит ABOM, а иначе только по запросу программы. Bosch отмечает, что счётчик больше примерно 96 указывает на сильно зашумлённую шину; MCP2515 и bxCAN выставляют при этом флаг предупреждения.

Из правил следует поведение, которое сбивает с толку при первом запуске. Узел один на шине, его кадр никто не подтверждает. Каждая попытка — ошибка подтверждения и TEC + 8, после 16 попыток TEC = 128, и узел становится error passive. Дальше срабатывает исключение: TEC больше не растёт, и узел повторяет кадр бесконечно, но в bus-off не уходит — спецификация Bosch оговаривает это отдельно. Некоторые руководства, в том числе TI SLLA270, пишут, что такой узел уйдёт в bus-off, — это расходится со спецификацией.

Битовый тайминг: кванты, сегменты и точка выборки

У CAN нет тактовой линии, и каждый узел сам отмеряет биты от своего генератора. Генераторы разных узлов немного отличаются, а сигнал приходит с задержкой. Поэтому бит делят на кванты времени и в нужных местах оставляют запас.

Битовое время CAN: кванты, сегменты и точка выборкиБит длиной 16 квантов по 125 нс (500 кбит/с): сегмент синхронизации 1 квант, Prop_Seg 6 квантов, Phase_Seg1 7 квантов и Phase_Seg2 2 кванта. Точка выборки — в конце Phase_Seg1, после 14 квантов из 16, то есть на 87,5 % бита. При пересинхронизации Phase_Seg1 удлиняется, а Phase_Seg2 укорачивается не больше чем на SJW.1 бит = 16 квантов по 125 нс = 2 мкс (500 кбит/с)SyncProp_Seg6 квантовPhase_Seg17 квантовPhase_Seg22 кванта12345678910111213141516точка выборки: 14 из 16 квантов = 87,5 %± SJWTSEG1 = Prop_Seg + Phase_Seg1 = 13TSEG2 = 2MCP2515 с кварцем 16 МГц: квант = 2 · (BRP + 1) / FOSC = 125 нс при BRP = 0
Бит из 16 квантов при 500 кбит/с: синхронизация 1 квант, Prop_Seg 6, Phase_Seg1 7, Phase_Seg2 2. Точка выборки — в конце Phase_Seg1, на 87,5 % бита.

Квант времени получают делением тактовой частоты контроллера: tq=k/ft_q = k / f, где kk — коэффициент делителя. Битовое время по спецификации Bosch состоит из четырёх сегментов:

  • Sync_Seg — 1 квант. В нём ожидается фронт бита.
  • Prop_Seg — 1–8 квантов. Компенсирует задержки распространения в сети, по Bosch — вдвое больше суммы задержки линии, входного компаратора и выходного драйвера.
  • Phase_Seg1 — 1–8 квантов. В его конце — точка выборки, где контроллер читает уровень бита.
  • Phase_Seg2 — остаток бита после точки выборки. Он не короче времени обработки (Information Processing Time, до 2 квантов).

Контроллер по Bosch должен поддерживать от 8 до 25 квантов на бит. Скорость и точка выборки:

fбит=fk⋅N,N=1+Prop_Seg+Phase_Seg1+Phase_Seg2,SP=1+Prop_Seg+Phase_Seg1N.f_\text{бит} = \frac{f}{k \cdot N}, \qquad N = 1 + \text{Prop\_Seg} + \text{Phase\_Seg1} + \text{Phase\_Seg2}, \qquad \text{SP} = \frac{1 + \text{Prop\_Seg} + \text{Phase\_Seg1}}{N}.

В большинстве контроллеров Prop_Seg и Phase_Seg1 объединены в один параметр TSEG1 (у bxCAN — BS1), а Phase_Seg2 называется TSEG2 (BS2). Для работы контроллера важна только их сумма — от неё зависит положение точки выборки.

Синхронизация и SJW

По фронту SOF после простоя шины все узлы выполняют жёсткую синхронизацию: начинают отсчёт бита заново. Дальше на каждом фронте из рецессива в доминант, но не чаще одного раза за бит, идёт пересинхронизация: если фронт пришёл позже ожидаемого, Phase_Seg1 удлиняется, если раньше — Phase_Seg2 укорачивается. Величину поправки ограничивает SJW (Synchronization Jump Width) — от 1 до 4 квантов и, по Bosch, не больше Phase_Seg1. Битстаффинг гарантирует фронты для этой подстройки внутри кадра.

Допуск частоты генератора

Bosch приводит два условия для допустимого отклонения частоты каждого генератора от номинала Δf\Delta f; выполняться должны оба:

Δf≤min⁡(Phase_Seg1, Phase_Seg2)2⋅(13⋅N−Phase_Seg2),Δf≤SJW20⋅N.\Delta f \le \frac{\min(\text{Phase\_Seg1},\ \text{Phase\_Seg2})}{2 \cdot (13 \cdot N - \text{Phase\_Seg2})}, \qquad \Delta f \le \frac{\text{SJW}}{20 \cdot N}.

Наибольший допуск, 1,58 %, даёт комбинация Prop_Seg = 1 и Phase_Seg1 = Phase_Seg2 = SJW = 4 при 10 квантах. Но на распространение тогда остаётся всего 10 % бита, и Bosch оценивает её годной до 125 кбит/с при шине 40 м. Именно поэтому спецификация CAN 2.0 допускает керамические резонаторы примерно до 125 кбит/с, а на полной скорости требует кварц. Для бита из 16 квантов с Phase_Seg2 = 2 и SJW = 1 второе условие даёт 1 / 320 ≈ 0,31 % — кварцевому генератору этого хватает с большим запасом.

Где ставить точку выборки

Поздняя точка выборки оставляет больше времени на распространение сигнала и на затухание звона после фронта. Ранняя оставляет длиннее Phase_Seg2, а с ним и больший допустимый SJW — запас на расхождение генераторов. Bosch требует главного: точка выборки должна быть одинаковой у всех узлов сети. Для сетей CANopen рекомендация CiA 301 — 87,5 % на всех стандартных скоростях; допустимый диапазон — 75–90 % на 1 Мбит/с и 800 кбит/с и 85–90 % на 500 кбит/с и ниже. Microchip в даташите MCP2515 называет более раннюю типичную точку, 60–70 %, но для смешанной сети ориентируйтесь на CiA. Драйвер CAN в Linux, если точку выборки не задать, берёт 87,5 % до 500 кбит/с, 80 % до 800 кбит/с и 75 % выше.

Регистры MCP2515: CNF1, CNF2 и CNF3

В MCP2515 квант задаёт поле BRP: tq=2⋅(BRP+1)/fOSCt_q = 2 \cdot (\text{BRP} + 1) / f_\text{OSC}, BRP = 0–63. Сегменты — Prop_Seg 1–8, PS1 1–8, PS2 2–8 квантов, SJW 1–4. Даташит добавляет правила: Prop_Seg + PS1 ≥ PS2, Prop_Seg + PS1 ≥ TDELAY (обычно 1–2 кванта) и PS2 больше SJW. Все поля хранят значение на единицу меньше длины сегмента.

РегистрАдресБиты
CNF10x2A7–6 — SJW − 1; 5–0 — BRP
CNF20x297 — BTLMODE (1: длину PS2 задаёт CNF3); 6 — SAM (1: три выборки на бит); 5–3 — PS1 − 1; 2–0 — Prop_Seg − 1
CNF30x287 — SOF (вывод CLKOUT как сигнал начала кадра); 6 — WAKFIL (фильтр пробуждения); 2–0 — PS2 − 1

Примеры:

  • Пример из даташита: кварц 20 МГц, BRP = 4 — квант 500 нс, 16 квантов на бит дают 125 кбит/с. Сегменты: синхронизация 1, Prop_Seg 2, PS1 7, PS2 6, SJW 1, точка выборки — 10 из 16 квантов, 62,5 %. Регистры: CNF1 = 0x04, CNF2 = 0xB1, CNF3 = 0x05.
  • Кварц 16 МГц, 500 кбит/с, 87,5 %: BRP = 0, квант 125 нс, 16 квантов = 1 + 6 + 7 + 2. Регистры: CNF1 = 0x00, CNF2 = 0xB5, CNF3 = 0x01. Те же значения даёт алгоритм драйвера Linux.
  • Кварц 8 МГц: при BRP = 0 квант 250 нс. На 500 кбит/с в бите только 8 квантов, и из-за PS2 ≥ 2 точка выборки не позже 75 %. 1 Мбит/с недостижим вовсе: на бит пришлось бы 4 кванта, а MCP2515 нужно не меньше 5 — потолок с таким кварцем 800 кбит/с.

Регистр CAN_BTR в STM32 (bxCAN)

В bxCAN, по RM0008, tq=(BRP+1)⋅tPCLKt_q = (\text{BRP} + 1) \cdot t_\text{PCLK}, где PCLK — частота шины APB1, у STM32F103 она не выше 36 МГц. BRP занимает 10 бит, поэтому делитель от 1 до 1024. Сегмент BS1 объединяет Prop_Seg и Phase_Seg1 и программируется от 1 до 16 квантов, BS2 — от 1 до 8, SJW — от 1 до 4. Регистр CAN_BTR: SJW − 1 в битах 25–24, BS2 − 1 в битах 22–20, BS1 − 1 в битах 19–16, BRP в битах 9–0; бит 31 включает режим «только приём», бит 30 — петлю. Значение после сброса — 0x01230000: SJW 2 кванта, BS2 3, BS1 4 кванта, делитель 1.

Пример: PCLK1 = 36 МГц, 500 кбит/с. Делитель 9 даёт квант 250 нс и 8 квантов на бит — BS1 = 6, BS2 = 1, точка выборки ровно 87,5 %, CAN_BTR = 0x00050008. Если нужен SJW = 2, BS2 = 1 уже мало, и подойдёт делитель 4: 18 квантов, BS1 = 15, BS2 = 2, точка выборки 88,9 %, CAN_BTR = 0x011E0003. В библиотеке HAL те же числа задают полями Prescaler, TimeSeg1 (CAN_BS1_15TQ), TimeSeg2 (CAN_BS2_2TQ) и SyncJumpWidth (CAN_SJW_2TQ) структуры CAN_InitTypeDef.

Калькулятор битового тайминга CAN

Выберите контроллер и введите частоту тактирования, скорость шины, нужную точку выборки и SJW. Калькулятор переберёт все делители, найдёт настройку с точной скоростью и ближайшей точкой выборки, проверит правила контроллера и покажет значения регистров. Ниже результата — другие варианты с той же скоростью: например, с большим числом квантов.

Исходные данные

Контроллер CAN
МГц

частота кварца на OSC1/OSC2: у готовых модулей обычно 8 или 16 МГц

кбит/с

стандартные: 125, 250, 500, 1000 кбит/с

%

CiA 301 рекомендует 87,5 %

SJW, квантов

Результат

Регистры MCP2515
CNF1 0x00CNF2 0xB5CNF3 0x01
BTLMODE = 1, SAM = 0 (одна выборка)
BRP
0квант 125 нс = 2 периода FOSC
Квантов в бите
16 = 1 + 6 + 7 + 2Sync + Prop_Seg + PS1 + PS2
Точка выборки
87,5 %цель 87,5 %
Скорость
500 кбит/сошибка 0 %
SJW
1 квант
Допуск частоты генератора
±0,31 %по условиям Bosch для этих сегментов

Другие варианты с той же скоростью

  • BRP 1, 8 квантов, выборка 75 %CNF1 = 0x01, CNF2 = 0x91, CNF3 = 0x01

Проверка: результат совпадает с примерами из даташита MCP2515 и с алгоритмом подбора драйвера Linux для MCP2515 и bxCAN. Главное правило остаётся тем же: у всех узлов шины должны совпадать скорость и, по возможности, точка выборки.

CAN FD: до 64 байт и вторая скорость

Спецификацию CAN with Flexible Data-Rate Bosch опубликовала в 2012 году. Задача — передавать больше данных за кадр и быстрее, не меняя физический уровень: те же трансиверы по ISO 11898-2, та же топология и тот же арбитраж. В кадре CAN FD:

  • Новые биты управления. Рецессивный бит EDL отличает кадр CAN FD от классического: в классическом кадре на этом месте доминантный r0. Бит BRS решает, переключать ли скорость, ESI сообщает, находится ли передатчик в состоянии error passive. Вместо RTR передаётся доминантный резервный бит, поэтому удалённых кадров в CAN FD нет.
  • Две скорости. Арбитраж и конец кадра — ACK и EOF — идут на номинальной скорости. Если BRS рецессивный, после него и до разделителя CRC контроллер работает на второй, более высокой скорости. Для второй скорости у контроллера свой набор параметров битового тайминга.
  • До 64 байт данных. Коды DLC 0–8 значат то же, что в CAN 2.0, остальные — более длинные поля данных.
  • Длиннее CRC. CRC-17 для полей данных до 16 байт и CRC-21 для более длинных, оба с расстоянием Хэмминга 6; вставленные биты здесь входят в расчёт CRC.
DLC0–89101112131415
Байт данных0–812162024324864

Совместимость односторонняя. Контроллер CAN FD работает с классическими узлами, пока не отправляет кадры CAN FD. Классический контроллер кадр CAN FD не понимает, поэтому Bosch предлагает на время обмена в формате FD держать такие узлы в дежурном режиме. MCP2515 и bxCAN — классические контроллеры. Трансивер тоже должен выдерживать скорость фазы данных: у TJA1051 временные параметры гарантированы для CAN FD до 5 Мбит/с.

Есть и тонкость с версиями. Стандарт ISO 11898-1 описывает CAN FD с дополнительной защитой: в поле CRC добавлен счётчик вставленных битов. Контроллеры по исходной спецификации Bosch 1.0, так называемые non-ISO CAN FD, с ISO-версией несовместимы (CiA), поэтому вариант протокола должен совпадать у всех узлов сети.

Трансиверы CAN

МикросхемаПитаниеЛогические уровниСкоростьОсобенности
TJA1050 (NXP)4,75–5,25 Ввход TXD понимает 3,3 В, выход RXD — до VCCдо 1 Мбит/свывод S — режим «только приём» (silent); не меньше 110 узлов; таймаут доминантного TXD 250–750 мкс
TJA1051 (NXP)4,5–5,5 Ву TJA1051T/3 и TK/3 вывод VIO, 2,8–5,5 В20 кбит/с — 1 Мбит/с, CAN FD до 5 Мбит/снаследник TJA1050; у TJA1051T/E вывод EN и режим Off; пороги приёмника нормированы для −30…+30 В
MCP2551 (Microchip)4,5–5,5 В5 В16 кбит/с — 1 Мбит/свывод Rs: скорость фронтов и дежурный режим; до 112 узлов; не рекомендован для новых разработок, замена — MCP2561
MCP2561, MCP2562 (Microchip)4,5–5,5 Ву MCP2562 вывод VIO, 1,8–5,5 В14,4 кбит/с — 1 Мбит/сSTBY — дежурный режим; у MCP2561 вывод SPLIT для расщеплённого терминатора; ESD ±14 кВ по IEC 61000-4-2
SN65HVD230 (TI)3,0–3,6 В3,3 Вдо 1 Мбит/сработает на одной шине с 5-вольтовыми трансиверами; Rs: скорость фронтов и дежурный режим; до 120 узлов; синфазный диапазон −2…+7 В

Нижняя граница скорости — не опечатка. Трансиверы защищают шину от зависшего контроллера: если TXD держится в нуле дольше таймаута, передатчик отключается. Таймаут ограничивает самый длинный допустимый доминантный участок, а значит, и минимальную скорость — для медленных сетей на 10 кбит/с трансивер нужно выбирать по этому параметру.

Все пять микросхем выпускаются в 8-выводном корпусе с одинаковым назначением основных выводов: 1 — TXD, 2 — GND, 3 — VCC, 4 — RXD, 6 — CANL, 7 — CANH. Выводы 5 и 8 различаются, и при замене одного трансивера другим проверяют именно их:

  • Вывод 8 — S у TJA1050 и TJA1051 (высокий уровень — режим «только приём»), Rs у MCP2551 и SN65HVD230 (на землю — обычный режим, высокий уровень — дежурный), STBY у MCP2561/2. У MCP2561/2 STBY внутри подтянут к питанию, поэтому неподключённый вывод оставит трансивер в дежурном режиме. Надёжный вариант для всех — вывод 8 на землю или на вывод микроконтроллера.
  • Вывод 5 — выход опорного напряжения Vref у TJA1050, MCP2551 и SN65HVD230, не подключён у TJA1051T, вход питания логики VIO у TJA1051T/3 и MCP2562, выход SPLIT у MCP2561, вход EN у TJA1051T/E. VIO и EN обязательно подключают, иначе трансивер не работает.

Контроллеры: MCP2515, bxCAN и FDCAN

MCP2515: CAN по SPI

MCP2515 — самостоятельный контроллер CAN 2.0B для микроконтроллеров без своего CAN. Он подключается по SPI (до 10 МГц, режимы 0,0 и 1,1), принимает и передаёт стандартные и расширенные кадры данных и удалённые кадры на скорости до 1 Мбит/с. Внутри — три буфера передачи, два буфера приёма, шесть фильтров и две маски на 29 бит. Питание — 2,7–5,5 В; частота кварца — до 40 МГц при питании 4,5–5,5 В и до 25 МГц при 2,7–5,5 В. Трансивера в MCP2515 нет, его ставят отдельно.

Подключение MCP2515 и трансивера MCP2562 к микроконтроллеру на 3,3 ВМикроконтроллер соединён с MCP2515 по SPI: SCK, MOSI на вход SI, MISO с выхода SO, отдельный вывод на CS и вход прерывания от INT. MCP2515 питается от 3,3 В и тактируется кварцем 8 МГц с конденсаторами 22 пФ. Выход TXCAN идёт на вход TXD трансивера MCP2562, выход трансивера RXD — на вход RXCAN. Трансивер питается от 5 В, а его вывод VIO подключён к 3,3 В, поэтому логические уровни совпадают с микроконтроллером. STBY соединён с землёй — нормальный режим. CANH и CANL идут на разъём шины, терминатор 120 Ом ставится только на крайних узлах.МК3,3 В+3,3 ВMCP2515SCKSCK13MOSISI14MISOSO15GPIOCS16EXTIINT12+3,3 ВVDD18+3,3 ВR110 кОмRESET17OSC1OSC2VSS879C222 пФC122 пФQ18 МГцTXCANRXCAN12MCP2562TXDRXDSTBY148+5 ВVDD3+3,3 ВVIO5VSS2CANHCANL76RT120 ОмRT — толькона крайних узлахCAN_HCAN_LGND
Узел CAN с MCP2515 и MCP2562 для микроконтроллера на 3,3 В: SPI и прерывание к МК, кварц 8 МГц, трансивер с шинной частью на 5 В и логикой 3,3 В через VIO. Блокировочные конденсаторы у выводов питания не показаны.

Схема для микроконтроллера на 3,3 В. MCP2515 питается от 3,3 В, тогда уровни SPI совпадают с микроконтроллером. Шинная часть MCP2562 питается от 5 В, а вывод VIO — от 3,3 В, и трансивер принимает и выдаёт 3,3-вольтовую логику. STBY соединён с землёй — нормальный режим; если подключить его к выводу МК, трансивер можно переводить в дежурный режим. Кварц 8 МГц с конденсаторами 22 пФ — значения из таблицы 8-2 даташита. Вывод RESET подтянут к питанию, а после включения программа подаёт команду сброса по SPI. Терминатор 120 Ом ставится только на двух крайних узлах шины.

На распространённых готовых модулях стоят MCP2515 и трансивер TJA1050 с питанием 5 В, часто с кварцем 8 МГц и перемычкой терминатора. С таким модулем нужно помнить о трёх вещах:

  • Частота кварца. Её задают в программе — библиотеке или своему коду. Если библиотека считает, что кварц 16 МГц, а на плате 8 МГц, скорость окажется вдвое ниже заданной, и шина заполнится кадрами ошибок. Маркировку кварца проверьте на плате.
  • Предел скорости. С кварцем 8 МГц MCP2515 не работает на 1 Мбит/с — это следует из правил его битового тайминга (см. выше).
  • Логика 5 В. TJA1050 питается только от 5 В, и выход RXD у него поднимается до 5 В. NXP в AN00020 прямо пишет: микросхемы на 3,3 В, подключённые к TJA1050, должны допускать 5 В на этих выводах. Если MCP2515 на модуле тоже питается от 5 В, на 5 В будет и линия MISO. Для микроконтроллеров на 3,3 В без допуска 5 В на входах нужен трансивер вроде MCP2562 с VIO, отдельный трансивер на 3,3 В или согласование уровней.

После сброса MCP2515 находится в режиме конфигурации — только в нём можно записать CNF1–CNF3, — и переходит в нормальный режим по запросу через регистр CANCTRL. Пример инициализации на 500 кбит/с с кварцем 16 МГц:

#include <stdint.h>

/* MCP2515 SPI instructions and registers, DS20001801J */
#define MCP_RESET    0xC0
#define MCP_READ     0x03
#define MCP_WRITE    0x02
#define MCP_CANSTAT  0x0E
#define MCP_CANCTRL  0x0F
#define MCP_CNF3     0x28
#define MCP_CNF2     0x29
#define MCP_CNF1     0x2A

/* Board-specific: SPI mode 0, chip select and a delay */
extern void    cs_low(void);
extern void    cs_high(void);
extern uint8_t spi_transfer(uint8_t byte);
extern void    delay_ms(uint16_t ms);

static void mcp_write(uint8_t reg, uint8_t value)
{
    cs_low();
    spi_transfer(MCP_WRITE);
    spi_transfer(reg);
    spi_transfer(value);
    cs_high();
}

static uint8_t mcp_read(uint8_t reg)
{
    cs_low();
    spi_transfer(MCP_READ);
    spi_transfer(reg);
    uint8_t value = spi_transfer(0x00);
    cs_high();
    return value;
}

/* 16 MHz crystal, 500 kbit/s, sample point 87.5 %, SJW = 1 */
int mcp2515_init(void)
{
    cs_low();
    spi_transfer(MCP_RESET);               /* reset: configuration mode */
    cs_high();
    delay_ms(1);                           /* oscillator start-up timer: 128 OSC1 cycles */

    if ((mcp_read(MCP_CANSTAT) & 0xE0) != 0x80)
        return -1;                         /* no answer or not in configuration mode */

    mcp_write(MCP_CNF1, 0x00);             /* SJW = 1, BRP = 0: TQ = 125 ns */
    mcp_write(MCP_CNF2, 0xB5);             /* BTLMODE = 1, PS1 = 7, PropSeg = 6 */
    mcp_write(MCP_CNF3, 0x01);             /* PS2 = 2 */

    mcp_write(MCP_CANCTRL, 0x00);          /* REQOP = 000: normal mode, CLKOUT off */
    for (uint16_t i = 0; i < 1000; i++)
        if ((mcp_read(MCP_CANSTAT) & 0xE0) == 0x00)
            return 0;                      /* normal mode reached */
    return -2;
}

Для отладки у MCP2515 есть режимы loopback — кадры не выходят на шину и сразу возвращаются в приёмник — и listen-only — только приём, без подтверждений и флагов ошибок. Счётчики ошибок читаются из регистров TEC (0x1C) и REC (0x1D), состояние — из EFLG (0x2D): там флаги error passive, bus-off и предупреждения при 96 ошибках.

bxCAN и FDCAN в STM32

У многих микроконтроллеров контроллер CAN встроенный, и снаружи нужен только трансивер: выводы CAN_TX и CAN_RX — это обычные логические сигналы, к шине их подключать напрямую нельзя. В STM32F1 и ряде других серий это модуль bxCAN — классический CAN 2.0A и 2.0B. Расчёт его регистра CAN_BTR разобран выше. Ограничение STM32F103: по RM0008, USB и CAN делят общие 512 байт памяти, поэтому одновременно их использовать нельзя.

В семействах с поддержкой CAN FD модуль называется FDCAN — по application note ST AN5348, например, в сериях STM32G4 и STM32H7. Как у любого контроллера CAN FD, у него два набора параметров битового тайминга: для номинальной скорости и для фазы данных.

Протоколы поверх CAN: CANopen, J1939, OBD-II

CAN задаёт кадр и правила доступа, но не смысл данных. Смысл определяют протоколы верхнего уровня.

CANopen (CiA 301, европейский стандарт EN 50325-4) — промышленная автоматика, приводы, датчики, медицинская техника. По умолчанию используются стандартные кадры; 11-битный идентификатор складывается из 4-битного кода функции и 7-битного номера узла от 1 до 127. Стандартный набор идентификаторов, по HMS:

СообщениеИдентификатор
Управление сетью NMT0x000
SYNC0x080
Аварийное сообщение EMCY0x080 + номер узла
TPDO1 / RPDO1 (данные процесса)0x180 / 0x200 + номер узла
SDO: ответ узла / запрос к узлу0x580 / 0x600 + номер узла
Heartbeat, загрузка узла0x700 + номер узла

Скорость выбирают из стандартного ряда CiA 301 — по HMS это 1 Мбит/с, 800, 500, 250, 125 и 50 кбит/с — с рекомендованной точкой выборки 87,5 %.

SAE J1939 — тяжёлая техника: грузовики, автобусы, спецтехника. Используются расширенные кадры с 29-битным идентификатором, в который входит номер группы параметров PGN. Скорость — 250 кбит/с по J1939/11 и J1939/15, 500 кбит/с по J1939/14.

OBD-II поверх CAN (ISO 15765-4) — диагностика легковых автомобилей; в США CAN обязателен как один из протоколов OBD-II с 2008 года. Скорость — 250 или 500 кбит/с. В варианте с 11-битными идентификаторами сканер отправляет запрос всем блокам с идентификатором 0x7DF или конкретному блоку — 0x7E0…0x7E7, а блоки отвечают с идентификаторами 0x7E8…0x7EF. Выводы разъёма приведены выше.

Типичные ошибки и отладка

СимптомВероятная причинаЧто проверить
Кадр уходит снова и снова, TEC растёт до 128на шине нет второго работающего узла, ACK никто не ставитвторой узел в нормальном режиме, а не в listen-only или конфигурации; для одиночной проверки — режим loopback
Шина забита кадрами ошибоку узлов разные скорости или сильно разные точки выборкиодинаковые настройки у всех; частота кварца MCP2515 в программе и на плате; длительность бита осциллографом
На столе работает, на объекте сбоитнет терминаторов или их больше двух, длинные отводы, звездаомметр между CAN_H и CAN_L — 60 Ом; осциллограмма разности на дальнем конце
Связи нет совсемперепутаны CAN_H и CAN_L, нет общего проводав доминанте CAN_H должна быть выше CAN_L; общий провод между узлами
Трансивер не передаётвывод 8 или 5 оставлен неподключённым: STBY у MCP2561/2, EN у TJA1051T/E, VIO у MCP2562уровни на выводах 5 и 8 по таблице выше
Сбои и нагрев входов МК на 3,3 В5-вольтовый RXD у TJA1050 или MCP2551, MISO MCP2515 с питанием 5 Втрансивер с VIO или согласование уровней
Узел работает и вдруг замолкаетbus-off после серии ошибок, а автоматический выход отключёнфлаги bus-off (EFLG у MCP2515, CAN_ESR у bxCAN), бит ABOM у bxCAN

Как проверить линию CAN

  1. Омметр, питание выключено. Между CAN_H и CAN_L около 60 Ом — оба терминатора на месте. 120 Ом — одного не хватает, 40 Ом — стоит лишний, близко к нулю — замыкание.
  2. Мультиметр, шина в простое. Каждая линия относительно общего провода — около 2,5 В, разность — около нуля. Если обе линии около 0 В, ни один трансивер не запитан.
  3. Осциллограф во время обмена. Два канала на CAN_H и CAN_L относительно общего провода и математика «разность» или дифференциальный пробник. В доминанте разность около 2 В, в рецессиве — около нуля. Проверьте длительность бита (2 мкс на 500 кбит/с), бит ACK в конце кадра и отсутствие звона к точке выборки. Шесть доминантных битов подряд посреди кадра — флаг ошибки.
  4. Счётчики и код последней ошибки. У MCP2515 — регистры TEC, REC и EFLG. У bxCAN в регистре CAN_ESR, кроме счётчиков, есть поле LEC с кодом последней ошибки: 1 — заполнения, 2 — формы, 3 — подтверждения, 4 и 5 — ошибка бита рецессивного и доминантного, 6 — CRC. Растущий TEC при нулевом REC обычно значит, что кадры этого узла никто не подтверждает.
  5. Логический анализатор — на TXD и RXD трансивера, а не на линии. Там чистые логические уровни, и декодер CAN в анализаторе сразу покажет идентификаторы, данные и ошибки.

Дальше по теме: RS-485 — когда нужна длинная линия с опросом узлов ведущим, SPI — интерфейс, по которому подключается MCP2515, I²C — для связи микросхем внутри платы. Остальные интерфейсы — в разделе интерфейсы, микроконтроллеры с CAN — в разделе «Микроконтроллеры».

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

Нужен ли терминатор 120 Ом на шине CAN?

Да: по одному резистору 120 Ом между CAN_H и CAN_L на двух физических концах линии. Передатчик CAN активно держит только доминантное состояние, рецессивное восстанавливают терминаторы; без них фронт из доминанта в рецессив затягивается и линия звенит. Проверка: при выключенном питании омметр между CAN_H и CAN_L показывает около 60 Ом. 120 Ом — терминатор один, 40 Ом — их три.

Какая максимальная длина шины CAN?

Зависит от скорости: около 40 м на 1 Мбит/с, 100 м на 500 кбит/с, 200–250 м на 250 кбит/с, около 500 м на 125 кбит/с и около 1 км на 50 кбит/с. Длину ограничивает задержка распространения: бит от самого дальнего узла должен вернуться к передатчику до точки выборки, иначе арбитраж и подтверждение ACK не работают.

Почему узел CAN не передаёт, если он один на шине?

Каждый кадр должен подтвердить хотя бы один другой узел доминантным битом ACK. Одиночный передатчик видит ошибку подтверждения, повторяет кадр и после 16 попыток (счётчик TEC растёт на 8 за каждую) становится error passive. По спецификации Bosch из-за этого он не уходит в bus-off и повторяет кадр бесконечно. Проверять узел в одиночку удобно в режиме loopback контроллера.

Можно ли подключить CAN к микроконтроллеру на 3,3 В?

Да, если трансивер рассчитан на такую логику. SN65HVD230 целиком питается от 3,3 В. У MCP2562 и TJA1051T/3 шинная часть питается от 5 В, а вывод VIO подключают к 3,3 В — тогда уровни TXD и RXD совпадают с микроконтроллером. TJA1050 понимает 3,3-вольтовый TXD, но выход RXD у него поднимается до 5 В, поэтому вход МК должен это выдерживать.

Чем CAN FD отличается от обычного CAN?

В кадре CAN FD до 64 байт данных вместо 8, и скорость может переключаться: арбитраж идёт на обычной скорости, а поле данных — на повышенной, если бит BRS рецессивный. CRC длиннее — 17 или 21 бит, удалённых кадров нет. Нужны контроллер и трансивер с поддержкой FD: классические контроллеры вроде MCP2515 и bxCAN кадры CAN FD не понимают.

Нужен ли общий провод GND в шине CAN?

Да. Приёмник измеряет разность CAN_H − CAN_L, но обе линии относительно его земли должны оставаться в синфазном диапазоне: по ISO 11898 это −2…+7 В, у современных трансиверов шире, у TJA1051 — до ±30 В. Без общего провода потенциалы земель удалённых узлов ничем не связаны. В разъёме DE-9 по CiA 303-1 общий провод CAN_GND — вывод 3.

Источники

  1. Robert Bosch GmbH. CAN Specification Version 2.0, 1991 — часть B: формат кадров, битстаффинг, типы ошибок, правила счётчиков TEC и REC, битовое время и синхронизация
  2. Robert Bosch GmbH. CAN with Flexible Data-Rate Specification Version 1.0, 17 April 2012 — биты EDL, BRS, ESI, коды DLC до 64 байт, CRC-17 и CRC-21; копия из Internet Archive
  3. F. Hartwich, A. Bassemir (Robert Bosch GmbH). The Configuration of the CAN Bit Timing, 6th iCC, 1999 — условие для Prop_Seg и две формулы допуска частоты генератора
  4. Texas Instruments. SLOA101B: Introduction to the Controller Area Network (CAN), S. Corrigan, 2002, ред. 2016 — уровни шины, 40 м на 1 Мбит/с, отвод 0,3 м, 30 узлов, расщеплённый терминатор
  5. Texas Instruments. SLLA270: Controller Area Network Physical Layer Requirements, S. Corrigan, 2008 — таблица длины линии и скорости, бюджет задержек, критическая длина отвода, мощность терминаторов
  6. Microchip. AN754: Understanding Microchip's CAN Module Bit Timing, 2001 — задержка распространения, пример 50 м и 800 кбит/с, условие для SJW
  7. Microchip. MCP2515 Stand-Alone CAN Controller with SPI Interface, DS20001801J — разд. 5 — битовый тайминг и регистры CNF1–CNF3, разд. 6 — ошибки, табл. 8-2 — конденсаторы кварца, табл. 12-1 — команды SPI
  8. Microchip. MCP2561/2 High-Speed CAN Transceiver, DS20005167C
  9. Microchip. MCP2551 High-Speed CAN Transceiver, DS20001667G
  10. NXP (Philips). TJA1050 High speed CAN transceiver, product specification, 22 October 2003
  11. NXP (Philips). AN00020: TJA1050 CAN High-Speed Transceiver, 2000 — смещение линий к VCC/2, совместимость с 3,3 В, расщеплённый терминатор, отводы по ISO 11898 и SAE J2284
  12. NXP. TJA1051 High-speed CAN transceiver, product data sheet, Rev. 9, 28 November 2017
  13. Texas Instruments. SN65HVD23x 3.3-V CAN Bus Transceivers, SLOS346O, 2018
  14. STMicroelectronics. RM0008 Reference manual STM32F101xx–STM32F107xx, Rev 21, 2021 — гл. 24 — bxCAN: битовый тайминг, регистры CAN_BTR и CAN_ESR, автоматический выход из bus-off
  15. STMicroelectronics. AN5348: Introduction to FDCAN peripherals for STM32 MCUs
  16. CAN in Automation. CiA 303-1: Cabling and connector pin assignment, V1.7 — табл. 2 — кабель, терминаторы и скорость по длине линии; правило для отвода; разъём DE-9
  17. HMS Networks (Ixxat). Basics of the CANopen and CANopen FD protocol — скорости и диапазоны точки выборки по CiA 301, длина сети, идентификаторы CANopen
  18. CAN in Automation. History of CAN technology; CAN FD — the basic idea — даты разработки и стандартизации; ISO- и non-ISO CAN FD
  19. Linux kernel: drivers/net/can/dev/calc_bittiming.c, drivers/net/can/spi/mcp251x.c, drivers/net/can/bxcan.c — эталон для проверки калькулятора: алгоритм подбора и кодирование регистров MCP2515 и bxCAN
  20. Wikipedia. On-board diagnostics; OBD-II PIDs; SAE J1939 — обзор: выводы разъёма SAE J1962, скорости ISO 15765-4, идентификаторы запросов и ответов, скорости J1939