Шина CAN
CAN — дифференциальная шина без ведущего: узлы на одной витой паре сами решают, кто передаёт, по идентификатору сообщения и аппаратно проверяют каждый кадр. Ниже — уровни и терминаторы по ISO 11898-2, формат кадра и обработка ошибок по спецификации Bosch, расчёт битового тайминга и подключение MCP2515.
Обновлено Редакция GAW
Содержание
- Как работает шина CAN
- Физический уровень: CAN_H, CAN_L и напряжения
- Топология, терминаторы 120 Ом и отводы
- Скорость и длина линии CAN
- Формат кадра CAN
- Арбитраж: почему меньший идентификатор важнее
- Обработка ошибок: TEC, REC, error passive и bus-off
- Битовый тайминг: кванты, сегменты и точка выборки
- CAN FD: до 64 байт и вторая скорость
- Трансиверы CAN
- Контроллеры: MCP2515, bxCAN и FDCAN
- Протоколы поверх CAN: CANopen, J1939, OBD-II
- Типичные ошибки и отладка
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, поэтому помеха, наведённая на оба провода одинаково, на результат не влияет.
| Параметр | Значение | Условия |
|---|---|---|
| Напряжение каждой линии в рецессиве | 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 м.
Терминаторы: сколько, где и как проверить
- Ровно два терминатора по 120 Ом, на двух концах линии. Вместе они дают 60 Ом — на такую нагрузку нормирован передатчик. Лишние терминаторы — в середине шины или на каждом узле — снижают доминантный уровень и искажают сигнал.
- Лучше в разъёме или отдельной заглушке, чем в узле. ISO 11898, по TI SLLA270, не рекомендует ставить терминатор внутри узла: если такой узел отключить, шина останется без согласования. На практике терминатор часто включают перемычкой на крайних платах — тогда её положение надо проверять при каждой перекомпоновке.
- Проверка омметром. При выключенном питании всех узлов сопротивление между CAN_H и CAN_L должно быть около 60 Ом — два резистора по 120 Ом параллельно, чуть меньше из-за входов трансиверов. 120 Ом — стоит только один терминатор, 40 Ом — три, единицы ом — замыкание.
- Мощность. В доминантном бите на терминаторе 120 Ом около 2 В, это примерно 33 мВт (по закону Ома: ), так что резистор 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.
Отводы: почему 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 даёт ориентир через битовый тайминг: длина одиночного отвода , где нс/м. Звезду ни ISO 11898, ни SAE J2284 не описывают: NXP допускает её в автомобилях как вынужденную меру и советует проверять такую топологию моделированием или измерениями. J2284 к тому же рекомендует не располагать узлы через равные промежутки и не делать отводы одинаковой длины — чтобы не возникали стоячие волны.
Разъём DE-9 и цоколёвка по CiA 303-1
В промышленных сетях и у USB-адаптеров CAN часто ставят разъём DE-9 (его нередко называют DB9). Назначение выводов задаёт рекомендация CiA 303-1:
| Вывод | Сигнал | Назначение |
|---|---|---|
| 2 | CAN_L | линия CAN_L |
| 3 | CAN_GND | общий провод |
| 5 | CAN_SHLD | экран, необязательно |
| 6 | GND | земля, необязательно; внутри устройства соединена с выводом 3 |
| 7 | CAN_H | линия CAN_H |
| 9 | CAN_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 формулирует это как условие для сегмента распространения битового времени (о сегментах — ниже):
где и — задержки узла на выходе и входе (контроллер и трансивер), — задержка кабеля между двумя самыми удалёнными узлами, около 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-битным.
| Поле | Бит | Назначение |
|---|---|---|
| SOF | 1 | доминантный бит начала кадра; по его фронту все узлы выполняют жёсткую синхронизацию |
| Идентификатор | 11 | смысл и приоритет сообщения; передаётся старшим битом вперёд |
| RTR | 1 | 0 — кадр данных, 1 — удалённый кадр |
| IDE | 1 | 0 — стандартный формат, 1 — расширенный |
| r0 | 1 | резерв, передаётся доминантным |
| DLC | 4 | число байтов данных, 0–8 |
| Данные | 0–64 | байты старшим битом вперёд |
| CRC | 15 + 1 | контрольная сумма и рецессивный разделитель |
| ACK | 1 + 1 | слот подтверждения и рецессивный разделитель |
| EOF | 7 | семь рецессивных битов — конец кадра |
| Межкадровый интервал | 3 | intermission: три рецессивных бита, затем шина свободна |
Подробности, которые пригодятся при чтении осциллограмм и отладке:
- Идентификатор. По спецификации 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 — остаток от деления на образующий полином (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–1126 | 59–72 кбит/с |
| 250 кбит/с | 444–540 мкс | 1852–2252 | 119–144 кбит/с |
| 500 кбит/с | 222–270 мкс | 3704–4505 | 237–288 кбит/с |
| 1 Мбит/с | 111–135 мкс | 7407–9009 | 474–577 кбит/с |
Диапазоны — от кадра без вставленных битов до худшего случая с 24 вставками. Bosch советует не загружать шину на 100 %: узлу в состоянии error passive, чтобы правильно завершить кадр ошибки, может понадобиться свободная шина в течение не меньше 3 битов.
Арбитраж: почему меньший идентификатор важнее
Передавать можно, только когда шина свободна. Если несколько узлов начали кадр одновременно, все они передают биты идентификатора и сравнивают каждый с тем, что видят на шине. Пока уровни совпадают, передача продолжается. Узел, который выдал рецессивную единицу, а увидел доминантный ноль, проиграл: по спецификации Bosch он прекращает передачу, «не отправляя больше ни одного бита», и становится приёмником. Кадр победителя не искажается и не задерживается, а проигравшие повторят попытку, когда шина освободится.
Отсюда правила, которые нужно учитывать при назначении идентификаторов:
- Меньший идентификатор — выше приоритет. Идентификатор из одних нулей держит шину в доминанте дольше всех и всегда выигрывает. Приоритеты раздают по важности: в примере 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 active | TEC ≤ 127 и REC ≤ 127 | полноценно работает, при ошибке передаёт активный флаг |
| Error passive | TEC ≥ 128 или REC ≥ 128 | передаёт только пассивный флаг; после своего кадра ждёт ещё 8 рецессивных битов, прежде чем передавать снова |
| Bus-off | TEC ≥ 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 нет тактовой линии, и каждый узел сам отмеряет биты от своего генератора. Генераторы разных узлов немного отличаются, а сигнал приходит с задержкой. Поэтому бит делят на кванты времени и в нужных местах оставляют запас.
Квант времени получают делением тактовой частоты контроллера: , где — коэффициент делителя. Битовое время по спецификации Bosch состоит из четырёх сегментов:
- Sync_Seg — 1 квант. В нём ожидается фронт бита.
- Prop_Seg — 1–8 квантов. Компенсирует задержки распространения в сети, по Bosch — вдвое больше суммы задержки линии, входного компаратора и выходного драйвера.
- Phase_Seg1 — 1–8 квантов. В его конце — точка выборки, где контроллер читает уровень бита.
- Phase_Seg2 — остаток бита после точки выборки. Он не короче времени обработки (Information Processing Time, до 2 квантов).
Контроллер по Bosch должен поддерживать от 8 до 25 квантов на бит. Скорость и точка выборки:
В большинстве контроллеров 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 приводит два условия для допустимого отклонения частоты каждого генератора от номинала ; выполняться должны оба:
Наибольший допуск, 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: , 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. Все поля хранят значение на единицу меньше длины сегмента.
| Регистр | Адрес | Биты |
|---|---|---|
| CNF1 | 0x2A | 7–6 — SJW − 1; 5–0 — BRP |
| CNF2 | 0x29 | 7 — BTLMODE (1: длину PS2 задаёт CNF3); 6 — SAM (1: три выборки на бит); 5–3 — PS1 − 1; 2–0 — Prop_Seg − 1 |
| CNF3 | 0x28 | 7 — 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, , где 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. Калькулятор переберёт все делители, найдёт настройку с точной скоростью и ближайшей точкой выборки, проверит правила контроллера и покажет значения регистров. Ниже результата — другие варианты с той же скоростью: например, с большим числом квантов.
Исходные данные
частота кварца на OSC1/OSC2: у готовых модулей обычно 8 или 16 МГц
стандартные: 125, 250, 500, 1000 кбит/с
CiA 301 рекомендует 87,5 %
Результат
- Регистры 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.
| DLC | 0–8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
|---|---|---|---|---|---|---|---|---|
| Байт данных | 0–8 | 12 | 16 | 20 | 24 | 32 | 48 | 64 |
Совместимость односторонняя. Контроллер 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 нет, его ставят отдельно.
Схема для микроконтроллера на 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:
| Сообщение | Идентификатор |
|---|---|
| Управление сетью NMT | 0x000 |
| SYNC | 0x080 |
| Аварийное сообщение EMCY | 0x080 + номер узла |
| 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
- Омметр, питание выключено. Между CAN_H и CAN_L около 60 Ом — оба терминатора на месте. 120 Ом — одного не хватает, 40 Ом — стоит лишний, близко к нулю — замыкание.
- Мультиметр, шина в простое. Каждая линия относительно общего провода — около 2,5 В, разность — около нуля. Если обе линии около 0 В, ни один трансивер не запитан.
- Осциллограф во время обмена. Два канала на CAN_H и CAN_L относительно общего провода и математика «разность» или дифференциальный пробник. В доминанте разность около 2 В, в рецессиве — около нуля. Проверьте длительность бита (2 мкс на 500 кбит/с), бит ACK в конце кадра и отсутствие звона к точке выборки. Шесть доминантных битов подряд посреди кадра — флаг ошибки.
- Счётчики и код последней ошибки. У MCP2515 — регистры TEC, REC и EFLG. У bxCAN в регистре CAN_ESR, кроме счётчиков, есть поле LEC с кодом последней ошибки: 1 — заполнения, 2 — формы, 3 — подтверждения, 4 и 5 — ошибка бита рецессивного и доминантного, 6 — CRC. Растущий TEC при нулевом REC обычно значит, что кадры этого узла никто не подтверждает.
- Логический анализатор — на 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.
Источники
- Robert Bosch GmbH. CAN Specification Version 2.0, 1991 — часть B: формат кадров, битстаффинг, типы ошибок, правила счётчиков TEC и REC, битовое время и синхронизация
- 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
- F. Hartwich, A. Bassemir (Robert Bosch GmbH). The Configuration of the CAN Bit Timing, 6th iCC, 1999 — условие для Prop_Seg и две формулы допуска частоты генератора
- Texas Instruments. SLOA101B: Introduction to the Controller Area Network (CAN), S. Corrigan, 2002, ред. 2016 — уровни шины, 40 м на 1 Мбит/с, отвод 0,3 м, 30 узлов, расщеплённый терминатор
- Texas Instruments. SLLA270: Controller Area Network Physical Layer Requirements, S. Corrigan, 2008 — таблица длины линии и скорости, бюджет задержек, критическая длина отвода, мощность терминаторов
- Microchip. AN754: Understanding Microchip's CAN Module Bit Timing, 2001 — задержка распространения, пример 50 м и 800 кбит/с, условие для SJW
- Microchip. MCP2515 Stand-Alone CAN Controller with SPI Interface, DS20001801J — разд. 5 — битовый тайминг и регистры CNF1–CNF3, разд. 6 — ошибки, табл. 8-2 — конденсаторы кварца, табл. 12-1 — команды SPI
- Microchip. MCP2561/2 High-Speed CAN Transceiver, DS20005167C
- Microchip. MCP2551 High-Speed CAN Transceiver, DS20001667G
- NXP (Philips). TJA1050 High speed CAN transceiver, product specification, 22 October 2003
- NXP (Philips). AN00020: TJA1050 CAN High-Speed Transceiver, 2000 — смещение линий к VCC/2, совместимость с 3,3 В, расщеплённый терминатор, отводы по ISO 11898 и SAE J2284
- NXP. TJA1051 High-speed CAN transceiver, product data sheet, Rev. 9, 28 November 2017
- Texas Instruments. SN65HVD23x 3.3-V CAN Bus Transceivers, SLOS346O, 2018
- STMicroelectronics. RM0008 Reference manual STM32F101xx–STM32F107xx, Rev 21, 2021 — гл. 24 — bxCAN: битовый тайминг, регистры CAN_BTR и CAN_ESR, автоматический выход из bus-off
- STMicroelectronics. AN5348: Introduction to FDCAN peripherals for STM32 MCUs
- CAN in Automation. CiA 303-1: Cabling and connector pin assignment, V1.7 — табл. 2 — кабель, терминаторы и скорость по длине линии; правило для отвода; разъём DE-9
- HMS Networks (Ixxat). Basics of the CANopen and CANopen FD protocol — скорости и диапазоны точки выборки по CiA 301, длина сети, идентификаторы CANopen
- CAN in Automation. History of CAN technology; CAN FD — the basic idea — даты разработки и стандартизации; ISO- и non-ISO CAN FD
- Linux kernel: drivers/net/can/dev/calc_bittiming.c, drivers/net/can/spi/mcp251x.c, drivers/net/can/bxcan.c — эталон для проверки калькулятора: алгоритм подбора и кодирование регистров MCP2515 и bxCAN
- Wikipedia. On-board diagnostics; OBD-II PIDs; SAE J1939 — обзор: выводы разъёма SAE J1962, скорости ISO 15765-4, идентификаторы запросов и ответов, скорости J1939
Смотрите также
- RS-485Уровни, длина линии, терминаторы, смещение, MAX485, Modbus RTU
- SPISCLK, MOSI, MISO, CS, режимы 0–3, daisy chain, частота, SPI в AVR
- I²CSDA и SCL, START/STOP, ACK, адреса, скорости, расчёт подтяжек
- МикроконтроллерыAVR, ARM Cortex-M, ESP32, PIC, MSP430: архитектура и выбор
- Закон ОмаU, I, R и P по любым двум величинам