CAN低速转CAN高速

CAN low speed to CAN high speed adaption

我想知道是否可以将低速容错 CAN 网络 (100kbps) 适配到高速 CAN 网络。我需要这个来将更新的信息娱乐板 (CIC) 连接到我的 BMW e60 车内的 K-CAN。我已经设法通过 Arduino 和 MCP2515 扩展板唤醒并控制(在 workbench 上)CIC。 你知道是否可能吗? 谢谢!

最简单的方法可能是简单地将您要放入车内的信息娱乐板上的 CAN 收发器 IC 更换为与您车内已有的总线类型相匹配的 IC。不同的收发器 IC 通常可以直接更换,所以没问题。

然而,即使使用匹配的收发器,数据比特率也需要匹配,因此您需要确定电路板使用的比特率和车辆总线使用的比特率。

如果比特率不匹配,则无需更换收发器 IC - 在这种情况下,唯一的解决方案可能是创建双向 store-and-forward adapter/gateway.

可以使用 Arduino 构建这样的网关,但它必须有两个 CAN 总线 "shield" 子板 - 每个总线一个,每个子板都带有适合总线的 CAN 收发器它会连接到,并将其 CAN 控制器配置为适当的比特率。

每个 CAN 控制器都通过 SPI 连接到 Arduino。多个从设备很可能共享一个 SPI 总线,主设备(例如 Arduino 微控制器)select使用 chip/slave[=38] 连接它希望与之通信的设备=] (CS/SS) 行。有关 SPI 通信(包括多从机)的更多信息,请参阅 here and here

对于依赖 SPI 的现成 Arduino "shields",额外的屏蔽(除了第一个)可能需要将它们的 CS/SS 线物理重新路由到来自 Arduino 微控制器的不同控制线, 让奴隶 selection.查阅电路板的引出线 and/or 示意图以确定需要进行哪些修改。具体来说,如果使用 seed 的 CAN 总线电路,请检查 its Wiki 的 "CS pin" 部分。

在软件方面,网关基本上需要不断地将一条总线上接收到的消息复制到另一条总线上,并使用一个小的 FIFO 缓冲区来保存一些消息,以防目标总线繁忙。 可能需要对 CAN 总线库的源代码进行一些修改,以支持多个 CAN 控制器并使用 CS/SS 行在它们之间切换。

顺便说一句,Stack Overflow 可能是这个问题的错误地方,因为它不是真正的编程问题。