CAN与CAN FD通信之间存在的问题

简介: 因为受制于产品的稳定性考验,改造成本等问题,没法快速全面普及CAN FD。另外,在2012年底提出CAN FD到2015年中成为ISO CAN FD。也就是说目前市场上大部分都还是在用传统的CAN2.0,有一小部分用非ISO标准的CAN FD,一部分用ISO标准的CAN FD。

对汽车电子技术感兴趣的小伙伴请关注公众号:美男子玩编程,公众号优先推送最新技术博文,创作不易,请各位朋友多多点赞、收藏、关注支持~


因为受制于产品的稳定性考验,改造成本等问题,没法快速全面普及CAN FD。另外,在2012年底提出CAN FD到2015年中成为ISO CAN FD。


也就是说目前市场上大部分都还是在用传统的CAN2.0,有一小部分用非ISO标准的CAN FD,一部分用ISO标准的CAN FD。


这样会遇到一个问题:传统CAN与CAN FD共存的网络中,如何解决彼此通讯?


将可能存在的问题分成了4类。


1、通讯速率和数据长度不同的问题

这个问题里面,又分成如下几种情况:


传统CAN节点以1Mbit/s 传输数据到 CAN FD;

CAN FD设备以8Mbit/s传输数据到传统CAN;

传统CAN节点向 CAN FD节点传输8字节的数据;

CAN FD节点向传统CAN 节点传输64字节的数据。

第1种情况和第3种情况是可以直接通过的,因为CAN FD天然向下兼容CAN2.0。


CAN FD节点向传统CAN 节点传输64字节的数据,需要采用可编程CAN FD路由器。预先编程并下载到路由器,CAN FD数据通过路由器后可以按照预先设置的程序将数据做拆包等处理再转成8字节转发出去给传统CAN设备。


2、非ISO CAN FD与ISO CAN FD设备的通讯问题

非ISO CAN FD与 ISO CAN FD的共同点在于:传输速率一致,数据长度一致。区别在于:后者引入了一个3位的填充位计数器以及额外的校验位,另外,CRC计算值也不同。


所以两者是不兼容的,因此CiA建议所有的CAN FD应用需注明ISO CAN FD或non-ISO CAN FD。


2012年底到2015年中之前有很多厂家已经开发了CAN FD产品,但是那个是非ISO标准的CAN FD产品,并且已经有少部分产品已经在市场流通。而这些非ISO产品的供应商也没法完全收回或者销毁原有产品,所以这些供应商仍然需要解决这个问题。


3、多设备切换的通讯问题

未来的CAN网络,较长时间内都会存在着传统CAN与CAN FD并存的情况。


那么在一个共存网络中,就需要解决某几个设备之间交叉通讯的问题、多个切换的问题、以及一个设备需要同时与CAN FD节点和传统CAN节点通讯的切换问题。


如下图所示,一个网络中只有EMS与ABS是用CAN FD的,如果是EMS和ABS通信,这个时候只要对CAN FD之间的数据1:1转发即可。但是如果是EMS或者ABS与其他ECU通信,那么这时就需要将CAN FD数据切换为传统CAN再转发。


0417a3a13a2e4994931e93586c300a0e.png


否则可能会遇到以下两种问题:


1、使用CAN FD网络时,需要ECU和CAN控制器、收发器均支持CAN FD通讯。当CAN网络中某些节点升级为CAN FD时,车辆上CAN与CAN FD处于共存的情况,因为普通的CAN节点无法正常解析CAN FD报文,节点就会一直报错,出现大量错误报文,导致总线通讯异常。


2、假设CAN FD的数据传输速率是5Mbit/s,而CAN的传输速率为500Kbit/s,平常使用上位机软件解析CAN报文的时候需要设置对应的波特率,否则报文无法解析。可能会遇到波特率不匹配,不能被正常解析,节点报错,导致CAN FD报文无法正常发送,干扰总线的正常运行。


当然也是有一些解决办法的,如下:


1、CAN节点忽略CAN FD报文


支持CAN2.0的ECU忽略CAN FD报文不对其进行识别,这样虽然无法对CAN FD报文进行解析处理,但是也不会将其识别为错误帧,总线可以保证正常通讯。


因为CAN FD是向下兼容CAN的,保证CAN FD节点可以正常接收所有类型的CAN报文,CAN节点无法接收解析CAN FD报文,该解决方案仅可作为临时使用。


2、全部节点升级为CAN FD


将所有网络上所有的节点都替换成CAN FD,由于CAN FD可以向下兼容CAN,此时的网络既可以进行CAN报文收发也可以进行CAN FD报文收发。但是由于整体网络全部更新替换,成本较高,所以使用率很低。


3、利用CAN网桥进行CAN FD与CAN的转换


在原有的CAN网络上通过CAN网桥与新的CAN FD节点进行连接,将传统的CAN总线网络通过协议转换与CAN FD网络进行融合,快速实现CAN设备的升级。当接收到CAN FD报文的时候,CAN网桥会采用直转、合并、拆分三种方式实现传统CAN的8字节长度和CAN FD的64字节长度的互相转换,无损还原原有数据。


4、测试平台共用的问题

CAN FD节点在进行环境测试、疲劳测试、寿命测试等的情况下,只需要测试设备本身的性能,而与通讯速率/字节数无关,因此,这几类测试可以沿用传统CAN设备的测试平台。


而CAN FD通讯性能的测试、兼容性测试等涉及到通讯机制本身,因此这类测试需要用新的CAN FD测试工具。



相关文章
|
7月前
|
存储
14.4 Socket 双向数据通信
所谓双向数据传输指的是客户端与服务端之间可以无差异的实现数据交互,此类功能实现的核心原理是通过创建`CreateThread()`函数多线程分别接收和发送数据包,这样一旦套接字被建立则两者都可以异步发送消息,本章将实现简单的双向交互功能。
27 0
14.4 Socket 双向数据通信
|
5天前
|
C++
C++实现Socket连接通信
C++实现Socket连接通信
14 1
|
5天前
|
网络协议 Linux
Linux网络编程(TCP状态转换关系)
Linux网络编程(TCP状态转换关系)
23 0
|
11月前
|
IDE 算法 自动驾驶
一文搞懂CAN和CAN FD总线协议
这篇文章是将一文搞懂CAN总线协议帧格式和一文搞懂CAN FD总线协议帧格式两篇文章的整合,方便各位朋友学习和查阅。
|
缓存
多线程之间的通信~~~管道通道
多线程之间的通信~~~管道通道
190 0
|
SQL 网络协议 关系型数据库
TCP性能和发送接收Buffer的关系
# 前言 本文希望解析清楚,当我们在代码中写下 socket.setSendBufferSize 和 sysctl 看到的rmem/wmem系统参数以及最终我们在TCP常常谈到的接收发送窗口的关系,以及他们怎样影响TCP传输的性能。 先明确一下:**文章标题中所说的Buffer指的是sysctl中的 rmem或者wmem,如果是代码中指定的话对应着SO_SNDBUF或者SO_RCVB
5481 0
|
C# 网络协议 消息中间件
c# IPC实现本机进程之间的通信
原文:c# IPC实现本机进程之间的通信   IPC可以实现本地进程之间通信。这种用法不是太常见,常见的替代方案是使用wcf,remoting,web service,socket(tcp/pipe/...)等其他分布式部署方案来替代进程之间的通信。
2486 0
通过命令管道,在进程之间进行通信的简单例子
write_to_named_pipe.py import os if __name__ == "__main__": named_pipe = "my_pipe" if not os.
1336 0
http://www.vxiaotou.com