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). Самодельное соединение логических выводов без трансиверов не даёт ни дифференциального сигнала, ни согласования линии, ни защиты, поэтому годится разве что для опытов на столе на коротких проводах. В реальной сети у каждого узла стоит трансивер.
Источники
- Robert Bosch GmbH. CAN Specification Version 2.0 (1991) — часть A, с. 4–5, «Basic Concepts»: CAN разделён на уровень объектов, уровень передачи и физический уровень; уровни объектов и передачи вместе дают канальный уровень модели OSI; уровень объектов выбирает сообщения для передачи и принятые для использования, связывает с прикладной аппаратурой; уровень передачи — кадры, арбитраж, проверка ошибок, сигнализация ошибок и ограничение неисправностей, часть битового времени, изменять его нельзя; физический уровень — передача битов с электрическими свойствами, его выбор свободен; скорости до 1 Мбит/с
- 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 идут к трансиверу
Нашли ошибку?
Смотрите также
- CANCAN_H и CAN_L, терминаторы, кадр, арбитраж, ошибки, тайминг, MCP2515
- CAN-трансиверМикросхема физического уровня между контроллером CAN и шиной
- MCP2515CAN по SPI: выводы, кварц и скорость, маски и фильтры, режимы
- Фильтр приёма CANАппаратный отбор кадров CAN по идентификатору: маска или список
- Error active, error passive, bus-offТри состояния узла CAN по счётчикам ошибок
- TWAI (CAN в ESP32)Встроенный контроллер CAN 2.0 у ESP32 под названием Espressif