带有 Nodemcu 的 ESP32 上的 CAN

问题描述 投票:0回答:1

我尝试了各种基于 idf 4 的 Nodemcu 构建(包括在线构建器),但无法让 CAN 总线在内置 CAN 控制器上工作。当我执行 make menuconfig 时,除了 TWAI 配置之外,我看不到任何关于 CAN 模块的信息。我相信该模块默认包含在构建中,但也许情况并非如此。 感谢您的任何建议!

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 not not defined 的消息(can.lua:2: attempt to index a nil value (field 'can') ),并从在线服务构建(kan 在模块列表中的最终位置)给出了效果:

  1. 从我在 CAN 嗅探器中看到的另一个设备传输的消息,但在我的代码回调中没有调用。
  2. 当尝试每 1000 毫秒发送一次消息时,我没有看到 ESP32 上的 TX 引脚有任何活动(测量示波器)
lua esp32 can-bus nodemcu nodemcu-build
1个回答
0
投票

事实证明,ESP32 中的 CAN 控制器非常具体。 espidf中有一些提及:

外部收发器必须在内部连接 TX 输入和 RX 输出,以便可以在 RX 线上观察到 TX 信号线的逻辑电平变化。如果不这样做,将导致 CAN 控制器将两条信号线之间的逻辑电平差异解释为仲裁丢失或位错误。

我设法先在 2 个和 3 个设备之间建立交换,但是通过连接另一个仅在芯片版本上不同的设备(根据调试信息判断,成功工作的设备具有芯片 rev3,最终导致的设备下降的公共汽车有芯片 rev1)。 我在文档或勘误表中找不到关于芯片修订的任何规律。

© www.soinside.com 2019 - 2024. All rights reserved.