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

TWAI — контроллер CAN в ESP32

В описаниях ESP32 слова CAN почти нет, зато есть TWAI. Это тот же протокол CAN 2.0 по ISO 11898-1, только под другим названием: контроллер встроен в чип, а к шине его подключают через обычный трансивер CAN.

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

TWAI (two-wire automotive interface) — название, под которым Espressif описывает контроллер шины CAN в микроконтроллерах ESP32. Он совместим с ISO 11898-1 (CAN 2.0): кадры со стандартным 11-битным и расширенным 29-битным идентификатором, приоритет по идентификатору, обнаружение ошибок и отключение неисправного узла (ESP32 TRM, разд. 25.2–25.3). Физического уровня в чипе нет — к линиям CANH и CANL контроллер подключают через внешний трансивер.

Возможности контроллера ESP32

ПараметрЗначение
ПротоколISO 11898-1 (CAN 2.0), кадры 11 и 29 бит
Скорость25 кбит/с–1 Мбит/с (ревизии v0.0–v1.1), 12,5 кбит/с–1 Мбит/с (v3.0, v3.1)
РежимыNormal, Listen Only, Self Test
ПриёмFIFO 64 байта, фильтр приёма одинарный или двойной
Ошибкисчётчики ошибок, предел предупреждения, сохранение кода ошибки и потери арбитража
CAN FDне поддерживается — кадры FD считаются ошибкой

Данные — по ESP32 TRM (разд. 25.2) и ESP-IDF v6.1 (TWAI). Один контроллер TWAI есть у ESP32, S2, S3, C3 и H2, два — у ESP32-C6 (soc_caps.h ESP-IDF v6.1).

Подключение

Выводы TX и RX контроллера идут на трансивер; ESP-IDF в качестве примера называет TJA105x для ISO 11898-2. Наш вывод: при питании 3,3 В удобны трансиверы с таким же питанием; сравнение популярных микросхем в статье «SN65HVD230 и MCP2551». Дополнительно контроллер может выдавать сигнал BUS_OFF (низкий уровень в состоянии bus-off) и тактовый CLK_OUT. Для отладки одного узла без шины TX и RX замыкают и включают режим самопроверки, в котором подтверждение ACK не требуется.

Не путать

С CAN FD: несмотря на поддержку CAN в целом, у ESP32 нет кадров с переменной скоростью и данными до 64 байт. Состояния ошибок, через которые проходит узел, описаны в статье «Error active, error passive, bus-off», сам протокол — в статье «Шина CAN».

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

Чем TWAI отличается от CAN?

Протоколом — ничем: Espressif описывает TWAI как совместимый с ISO 11898-1, то есть CAN 2.0, со стандартными и расширенными кадрами (ESP32 TRM, разд. 25.2). Отличие в названии и в том, что у ESP32 нет кадров CAN FD: контроллер принимает их за ошибку (ESP-IDF, TWAI). Поэтому в сети CAN FD узел на ESP32 работать не сможет.

Что нужно, чтобы подключить ESP32 к шине CAN?

Внешний трансивер: встроенного у ESP32 нет. Выводы TX и RX контроллера идут на трансивер, а уже он — на линии CANH и CANL. ESP-IDF в пример приводит TJA105x для ISO 11898-2; наш вывод — при питании 3,3 В удобен трансивер с таким же питанием, например SN65HVD230 (подробнее — в статье о трансиверах). Для проверки одного узла без шины TX и RX можно соединить напрямую в режиме самопроверки.

Какую скорость поддерживает TWAI?

До 1 Мбит/с. Нижняя граница зависит от ревизии кристалла ESP32: 25 кбит/с у ревизий v0.0, v1.0 и v1.1 и 12,5 кбит/с у v3.0 и v3.1 (ESP32 TRM, разд. 25.2). Тайминги бита и точку выборки для своей частоты считает калькулятор битовых таймингов CAN.

Источники

  1. Espressif. ESP32 Technical Reference Manual, Version 5.8 — гл. 25 — TWAI: многомастерный протокол с обнаружением ошибок и приоритетами; контроллер подключается к шине через внешний трансивер; 25.2 — совместим с ISO 11898-1 (CAN 2.0), стандартные (11 бит) и расширенные (29 бит) кадры; 25 кбит/с–1 Мбит/с у ревизий v0.0/v1.0/v1.1, 12,5 кбит/с–1 Мбит/с у v3.0/v3.1; режимы Normal, Listen Only, Self Test; приёмный FIFO 64 байта; однократная передача, самоприём; фильтр приёма с одинарным и двойным режимом; счётчики ошибок, предел предупреждения; 25.3.1 — доминантный уровень — 0, рецессивный — 1, битстаффинг после пяти одинаковых бит, отключение узла по счётчикам ошибок
  2. Espressif. ESP-IDF Programming Guide v6.1: Two-Wire Automotive Interface (TWAI) (ESP32) — TWAI совместим со структурой кадров ISO 11898-1, кадры 11 и 29 бит; контроллеры ESP32 не поддерживают кадры FD и воспринимают их как ошибку; встроенного трансивера нет, нужен внешний, например TJA105x для ISO 11898-2; для проверки одного узла TX и RX можно замкнуть; выходы BUS_OFF и CLK_OUT; режимы self-test, loopback, listen-only; пример — 200 кбит/с
  3. Espressif. ESP-IDF v6.1 soc_caps.h — SOC_TWAI_CONTROLLER_NUM: 1 у ESP32, S2, S3, C3, H2; 2 у ESP32-C6

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