CAN на ESP32 с Nodemcu

Я пробовал различные сборки Nodemcu на основе idf 4 (включая онлайн-конструктор) и не могу заставить шину CAN работать на встроенном контроллере CAN. Когда я делаю menuconfig, я ничего не вижу о модуле CAN, кроме конфигурации TWAI. Я считаю, что модуль включен в сборку по умолчанию, но, возможно, это не так. Спасибо за любой совет!

      local can = require("can") --just for test
can.setup({
  speed = 500,
  tx = 5,
  rx = 4,
  dual_filter = false,
  code = 0,
  mask = 0xffffffff
}, function(format, msg_id, data)
     print(format, msg_id, data)
end)

sendTimer = tmr.create()
sendTimer:register(1000, tmr.ALARM_AUTO, function() 

can.send(can.STANDARD_FRAME, 0x123, "a");
print('send...')

end)

can.start()
sendTimer:start()

Пытаюсь отправить и получить сообщение CAN, но это не работает. Некоторые из моих сборок выдают сообщение о том, что CAN не определено (can.lua:2: попытка индексировать нулевое значение (поле 'can')), и сборка из онлайн-сервиса ( где в списке модулей оказывается kan) дают эффект:

  1. переданное сообщение с другого устройства, которое я вижу в CAN-сниффере, но в моем коде обратного вызова нет вызова.
  2. Когда я пытаюсь отправить сообщение каждые 1000 мс, я не вижу никакой активности на выводе TX на ESP32 (измерьте осциллографом)

1 ответ

Как оказалось, CAN-контроллер в ESP32 довольно специфичен. В espidf есть упоминание:

Внешний трансивер должен внутренне связать вход TX и выход RX так, чтобы изменение логического уровня линии сигнала TX можно было наблюдать на линии RX. Если этого не сделать, контроллер CAN будет интерпретировать разницу в логических уровнях между двумя сигнальными линиями как потерю в арбитраже или битовую ошибку.

Мне удалось установить обмен сначала между 2, а затем и 3 устройствами, но подключив другое, отличающееся только ревизией чипа (судя по отладочной информации, успешно работающие устройства имеют чип rev3, а устройство, вызвавшее в конечном итоге у автобуса, который должен упасть, есть чип rev1). Никаких закономерностей относительно доработки чипа в документации или опечаток мне найти не удалось.

Другие вопросы по тегам