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