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

本文涉及的产品
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 因为受制于产品的稳定性考验,改造成本等问题,没法快速全面普及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测试工具。



相关文章
|
6月前
【进程通信】用命名管道模拟server和client之间的通信
【进程通信】用命名管道模拟server和client之间的通信
|
6月前
|
C++
C++实现Socket连接通信
C++实现Socket连接通信
56 1
|
IDE 算法 自动驾驶
一文搞懂CAN和CAN FD总线协议
这篇文章是将一文搞懂CAN总线协议帧格式和一文搞懂CAN FD总线协议帧格式两篇文章的整合,方便各位朋友学习和查阅。
|
API 信息无障碍 C++
VS Code 技术揭秘系列 — IPC 通信
前言我们知道 VS Code 基于 Electron,在 Electron 中,主进程和渲染进程之间是通过 IPC 进行进程之间的通信的,当然 VS Code 中还有其他一些进程(比如:Shared Process/Extension Host Process/File Watcher Process/Terminal Host Process/Terminal Process/Search Pr
662 0
|
缓存
多线程之间的通信~~~管道通道
多线程之间的通信~~~管道通道
224 0
|
C# 网络协议 消息中间件
c# IPC实现本机进程之间的通信
原文:c# IPC实现本机进程之间的通信   IPC可以实现本地进程之间通信。这种用法不是太常见,常见的替代方案是使用wcf,remoting,web service,socket(tcp/pipe/...)等其他分布式部署方案来替代进程之间的通信。
2575 0
|
消息中间件 Unix Shell
《UNIX网络编程 卷2:进程间通信(第2版)》——2.3 创建与打开IPC通道
若不存在则创建由函数第一个参数所指定名字的消息队列、信号量或共享内存区对象(同时检查O_EXCL标志,我们不久将要说明)。创建一个新的消息队列、信号量或共享内存区对象时,至少需要另外一个称为mode的参数。该参数指定权限位,它是由图2-4中所示常值按位或形成的。
1597 0