历史上的今天
今天是:2024年08月22日(星期四)
2018年08月22日 | CAN FD的全面升级
2018-08-22
众所周知,CAN FD是基于CAN 2.0的升级版协议,为了满足汽车电子日益增长的高带宽和高传输速率的要求,CAN FD主要升级了以下几个方面:
一、更高的传输波特率

图 1 可变数据段波特率结构
CANFD速率包含两个段的速率,一个是仲裁段和ACK段,沿用CAN2.0的规范,最高速率为1Mbit/s,中间的数据段是可以加速的,标称可以达到5Mbit/s,甚至更高。
二、更高效的数据段
对于汽车电子来说,对车辆动力系统、地盘以及主被动系统来说,加长的数据段避免了数据非必要的拆分,大大提升了CAN帧的传输效率。

图 2 CAN FD高效的数据段
三、更可靠的CRC校验和额外的控制位
在传统的CAN 2.0中,由于填充规则会对CRC产生干扰,在CAN FD中升级了算法,将填充位加入多项式的运算,主要作为格式检查,考虑数据长度变化的区间很大,CRC也根据区间会生成两种校验算法,当帧长小于210位,使用CRC_17,当帧长小于1023位,使用CRC_21位算法。

图 3 可靠的CRC校验
另外在CAN FD中利用了部分保留标志位,新增三种控制位,包括ED(是否是CANFD帧)、BRS(是否可变速率)以及ESI(错误状态),丰富帧内的有用信息。

图 4 新增控制位
接下来我们回到正题,升级后的CAN FD到底能跑多快呢?直接讲参数很肤浅的,我们要分析......那我们就用一个问题开始,大家都知道CAN 2.0最高速率可以到1M,但是为什么汽车电子高速CAN只跑到500K呢?
对于CAN总线的传输速率来讲,传输距离和传输速率是成反比的,一般来说传输距离(m)=(50000/波特率kbps)*0.8,如图 5所示。

图5 传输距离和传输速率的关系。
那收发器和传输距离到底关系何在?刚才提到,收发器输出是电平值,电平在传输的过程中难免衰减,线缆本身的阻抗和容抗无法避免,其次首尾终端电阻也是必要的,主要有两个功能:
首尾120欧姆终端电阻,保证阻抗连续性(防止电信号反射);
放电作用;
针对终端电阻放电作用,我们下面从两个层面分析:
电平传输层面分析

图 6 CAN FD波形
我们先来看一个CANFD分解波形,其中是由显隐性电平构成的,其中上升沿是由CAN收发器芯片本身驱动的。当显性电平转变为隐形电平的时候,需要终端电阻放电,所以下降沿是我们的终端电阻放电的造成的。

图 7 负载电阻与差分幅值的关系
如果下降沿缓慢是什么原因导致?
检查收发器外围电路是否存在容性较大的器件(不影响电路正常工作的情况下拆除),重新测试波形是否正常;
检查线缆的参数,每米容抗是否在正常范围内,正常线缆电容在40-70pF/m,容抗太大,建议更换线缆;
增加终端电阻放电,建议采用专业设备测试网络阻抗容抗做正确匹配。

图8 CANscope总线阻抗容抗测试
四、总线网络数据能否正确传输层面
阻抗太大,电压幅值压降太大,传输距离大大降低。现象就是在手牵手的网络拓扑中,当然差分辅幅值最好不要低于1.3V,防止在强干扰的环境下,导致收发器无法识别或误识别总线信号。
容抗也是影响下降沿的重要因素,如果下降沿太缓慢会导致位宽拉长,导致收发器错误识别,导致0/1的翻转,CAN总线是错误重发的机制,会一直重发,直到这一帧被正确接收。

图 9 电容对下降沿的影响
同样的我们回到阻抗和容抗的匹配是如何影响CAN FD的传输速率的呢,接下来我们用实测证明:

图 10 稳定时间140ns
前面我也提到5M数据速率时,位时间是200ns,,实际传输过程中,一位时间包含了上升沿、下降沿以及数据稳定时间,如图 15所示,数据稳定时间按是140ns,那其中上升沿和下降沿占了60ns,理想情况下,上升沿和下降沿完全对称,其中上升沿时间是30ns,按照边沿极限值12%计算,实际算出来的位时间=30/(12/100)=250ns,那么相对应的传输波特率就=1/250ns=4M波特率,所以实际5M波特率也就是在测试使用,如果按照7%的边沿时间为安全值来计算,实际的位时间=30/(7/100)约等于42ns,相对应的传输波特率=1/42ns约等于2.3M,所以想要实际在工况下稳定可靠传输,数据端波特率在2M左右比较合理。
综上所述,影响CAN FD到底能传输多快影响的因素非常多,也是我们大多数工程师在实际CAN总线开发的过程中会忽略的问题,如果需要CAN总线的相应的产品解决方案,随时致电我们,期待与您的探讨和交流。
史海拾趣
|
初次接触VXWORKS和TORNADO。 暂时没有目标实验板等器材,所以想先SIMPC和DEMO入手。 因为最终需要实现数据接受和传输的要求,所以问一下,是不是SIMPC可以实现串口传输数据的试验? 现在对于VXWORKS和TORNADO ,基本是很模糊的初学者,向各位前 ...… 查看全部问答> |
|
小弟今天写了一段关于SPI的驱动代码。板子上是通过SPI对一块FLASH操作的。MPC作为master,FLASH作为slave。 下面是我的代码,主要就是一些寄存器的初始化,这是我第一次操刀写BSP,希望各位达人帮我看看有没有问题,大家相互交流一下!谢谢! 我把 ...… 查看全部问答> |
|
现在ce6.0已经通过蓝牙连接上打印机,不知道如何发送打印命令,只要能打印文字就可以。 打印机是 tsc m23便携式,蓝牙端口是com9。 谢谢帮忙,请将代码发送到 250189023@qq.com… 查看全部问答> |
|
请问HKEY_LOCAL_MACHINE\System\Events]的作用 我将CE5下的那个电池驱动加到BSP工程中. 在platform.reg中增加. [HKEY_LOCAL_MACHINE\\System\\Events] \"SYSTEM/BatteryAPIsReady\"=\"Battery Interface APIs\" ; These registry entries load the battery driver. ...… 查看全部问答> |
|
用VB.NET编写POCKET PC 2003应用程序,要求文本框只能键入数字和小数点,也能退格,删除,而不能输入汉字、字母等等。(输出可以是任何形式)。 刚刚在VB.NET论坛问过了(如何让文本框只能被输入数字),但是那里的方法好像只在PPC是手写输入时才 ...… 查看全部问答> |
|
就最近周边同学找工作以及签约情况,特发次讨论帖,欢迎一工作的和未工作的朋友们给点建议和说出自己的想法。 (应届生) 大家讨论一下,做嵌入式LINUX,在上海,武汉,深圳哪个城市好? 如果在上海和深圳起薪3500 在武汉起薪3000 ...… 查看全部问答> |
|
RT,我去年做了个项目使用固件库的,感觉不是很难,但是底层操作不知道,而且固件库版本多,今年做项目又是使用的固件库,8月份将中文的手册看了一遍,想使用寄存器编程,请问我现在是学固件还是学寄存器?… 查看全部问答> |




