【发布时间】:2016-11-13 12:35:11
【问题描述】:
我想知道是否可以将低速容错 CAN 网络 (100kbps) 适应高速 CAN 网络。我需要这个来将更新的信息娱乐板 (CIC) 连接到我的 BMW e60 车内的 K-CAN。我已经设法通过 Arduino 和 MCP2515 shield 唤醒和控制(在工作台上)CIC。 你知道是否可能吗? 谢谢!
【问题讨论】:
我想知道是否可以将低速容错 CAN 网络 (100kbps) 适应高速 CAN 网络。我需要这个来将更新的信息娱乐板 (CIC) 连接到我的 BMW e60 车内的 K-CAN。我已经设法通过 Arduino 和 MCP2515 shield 唤醒和控制(在工作台上)CIC。 你知道是否可能吗? 谢谢!
【问题讨论】:
最简单的方法可能是简单地将您要放入汽车的信息娱乐板上的 CAN 收发器 IC 更换为与您车内已有的总线类型相匹配的芯片。不同的收发器 IC 通常可以直接更换,因此没问题。
但是,即使使用匹配的收发器,数据比特率也需要匹配,因此您需要确定电路板使用的比特率和车辆总线使用的比特率。
如果比特率不匹配,则无需更换收发器 IC - 在这种情况下,唯一的解决方案可能是创建双向 store-and-forward 适配器/网关。
可以使用 Arduino 构建这样的网关,但它必须有两个 CAN 总线“屏蔽”子板 - 每个总线一个,每个子板都带有一个适用于它要连接的总线的 CAN 收发器到,并将其 CAN 控制器配置为适当的比特率。
每个 CAN 控制器都通过 SPI 连接到 Arduino。多个从设备很有可能共享一个 SPI 总线,主设备(例如 Arduino 微控制器)使用芯片/从设备选择 (CS/SS) 线选择它希望与之通信的设备。有关 SPI 通信(包括多从机)的更多信息,请参阅 here 和 here。
对于依赖 SPI 的现成 Arduino“屏蔽”,额外的屏蔽(除了第一个)可能需要将其 CS/SS 线物理重新路由到来自 Arduino 微控制器的不同控制线,以允许从机选择。请查阅电路板的引出线和/或原理图以确定需要进行哪些修改。具体来说,如果使用seeed的CAN总线电路,请查看its Wiki的“CS pin”部分。
在软件方面,网关基本上需要不断地将在一条总线上接收到的消息复制到另一条总线上,并使用一个小的 FIFO 缓冲区来保存一些消息,以防目标总线繁忙。 可能需要对 CAN 总线库的源代码进行一些修改,以支持多个 CAN 控制器并使用 CS/SS 线路在它们之间切换。
顺便说一句,堆栈溢出可能是这个问题的错误地方,因为它不是一个真正的编程问题。
【讨论】: