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

CAN-контроллер

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

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

CAN-контроллер (CAN controller) — узел, который реализует протокол CAN: формирует и разбирает кадры, ведёт арбитраж, проверяет CRC, считает ошибки и синхронизируется с битами на шине. Он работает с логическими уровнями: передаёт по выводу TX и принимает по RX, а к линиям шины его подключает CAN-трансивер.

Место в модели CAN

Спецификация Bosch CAN 2.0 делит CAN на три уровня (часть A, с. 4–5):

УровеньЧто делаетКто реализует
Объектоввыбирает сообщения для передачи и принятые для приложенияконтроллер (фильтры, буферы) и программа
Передачикадры, арбитраж, обнаружение и сигнализация ошибок, ограничение неисправностей, битовое времяконтроллер
Физическийэлектрическая передача битов по линиитрансивер, кабель, согласующие резисторы

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

Что внутри

На примере MCP2515 (Microchip DS20001801K, разд. 1.0–1.5):

  • протокольный автомат — передача, приём, арбитраж, сигнализация ошибок и автоматический повтор кадра;
  • CRC — вычисляет контрольную сумму передаваемого кадра и проверяет принятые;
  • логика ошибок — счётчики REC и TEC и состояния error-active, error-passive и bus-off;
  • логика битового времени — синхронизация по фронтам с рецессивного на доминантный и точка выборки;
  • буферы, маски и фильтры — у MCP2515 три буфера передачи, два буфера приёма, шесть фильтров и две маски.

Встроенный или внешний

Многие микроконтроллеры имеют встроенный контроллер: bxCAN и FDCAN у STM32, TWAI у ESP32. Тогда к выводам TX и RX подключают только трансивер. Если своего CAN нет, ставят внешний контроллер с SPI: MCP2515 поддерживает CAN 2.0B до 1 Мбит/с, SPI до 10 МГц и питание 2,7–5,5 В (с. 1). Фильтры в контроллере экономят время процессора: ненужные кадры отбрасываются аппаратно и не вызывают прерываний.

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

Чем CAN-контроллер отличается от CAN-трансивера?

Уровнем модели. Контроллер реализует протокол — собирает и разбирает кадры, ведёт арбитраж, считает CRC и ошибки, синхронизируется с битами шины. Трансивер — физический уровень: переводит логические уровни TX и RX контроллера в дифференциальные CANH и CANL и обратно. Bosch разделяет эти уровни прямо в спецификации CAN 2.0 (часть A, с. 4–5), поэтому почти любой контроллер работает с любым трансивером.

Когда нужен внешний контроллер вроде MCP2515?

Когда в микроконтроллере нет своего CAN, как в ATmega328P или ESP8266. MCP2515 подключают по SPI до 10 МГц; он сам принимает и фильтрует кадры, у него три передающих и два приёмных буфера, шесть фильтров и две маски (DS20001801K, с. 1). Между ним и шиной всё равно нужен трансивер.

Можно ли соединить два контроллера CAN без трансиверов?

Спецификация оставляет физический уровень свободным, но внутри одной сети он должен быть одинаков у всех узлов (CAN 2.0, часть A, с. 5). Самодельное соединение логических выводов без трансиверов не даёт ни дифференциального сигнала, ни согласования линии, ни защиты, поэтому годится разве что для опытов на столе на коротких проводах. В реальной сети у каждого узла стоит трансивер.

Источники

  1. Robert Bosch GmbH. CAN Specification Version 2.0 (1991) — часть A, с. 4–5, «Basic Concepts»: CAN разделён на уровень объектов, уровень передачи и физический уровень; уровни объектов и передачи вместе дают канальный уровень модели OSI; уровень объектов выбирает сообщения для передачи и принятые для использования, связывает с прикладной аппаратурой; уровень передачи — кадры, арбитраж, проверка ошибок, сигнализация ошибок и ограничение неисправностей, часть битового времени, изменять его нельзя; физический уровень — передача битов с электрическими свойствами, его выбор свободен; скорости до 1 Мбит/с
  2. Microchip. MCP2515 Stand-Alone CAN Controller with SPI Interface (DS20001801K, 2003–2021) — с. 1: CAN 2.0B до 1 Мбит/с, стандартные и расширенные кадры данных и удалённого запроса, два приёмных буфера, шесть 29-битных фильтров и две маски, три передающих буфера, SPI до 10 МГц в режимах 0,0 и 1,1, питание 2,7–5,5 В, режим однократной передачи; разд. 1.0–1.1: модуль CAN — протокольный автомат, маски, фильтры, буферы; принятое сообщение проверяется на ошибки и по фильтрам попадает в буфер; разд. 1.5.1–1.5.4: конечный автомат, CRC, счётчики ошибок REC и TEC и состояния error-active, error-passive, bus-off, логика битового времени и точка выборки; выводы TXCAN и RXCAN идут к трансиверу

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