CAN-FD核心技术简介

升级CAN的几条理由:

1. The original requirement of the automotive industry was to accelerate the software download at end-of-line and in the garages for software updates.

2. Additionally, the carmakers demand more bandwidth for some CAN-based in-vehicle networks.

3. The manufacturers of trucks and other commercial vehicles also require more throughputs for their CAN networks.

4. Non-automotive are also in favor of CAN FD. Some of them are not interested in the increasing speed, but in the longer payload (more than 8 byte)

1. 汽车行业的最初要求是加速软件下载,在线下和车库中进行软件更新。

2. 此外,汽车制造商还要求为一些基于CAN的车载网络提供更多带宽。

3. 卡车和其他商用车辆的制造商也需要更多的CAN网络吞吐量。

4. 非汽车也赞成CAN FD。 他们中的一些人对增加的速度不感兴趣,但是想要更长的有效载荷(超过8个字节)

 

CAN-FD怎么被想出来的?

假设我们现在还不知道CAN-FD,想提高CAN传输效率,即单位时间内CAN有效数据的传送量,有几种方法:

1. 提高数据场的长度。

    这是因为传统CAN(按照CAN2.0B规范)的有效载荷率太低了。CAN数据帧由七个段组成,只有数据段才是有效载荷,其它段都是为此服务的。对于11位CANID的标准帧,数据段N个字节。CAN有效载荷率=8*N/(8*N+44)。在无位填充的理想情况下才58%,最坏情况下给数据帧增加24个填充位降到了48%。标准帧无位填充情况下,除数据段其他段Bit等于:1+11+3+4+15+3+7=44个,则提高单帧数据长长度,可以有效增加有效载荷率。

2. 增加位填充的字节数

传统CAN当总线上有连续5个相同电平的位就增加一个反型位,其目的是为了实现收发节点的时钟同步。根据论文《 一种新的CAN总线位填充方案-2008年》的分析,由于使用石英晶体振荡器比最初陶瓷晶体振荡器的容差更小,选择10个相同电平增加一个位填充也能实现同步。但即便如此,最坏情况下CAN有效载荷率为53%,只比原来提高5%,效果不明显。

 

3. 提高CAN波特率

这个显而易见,波特率提高n倍,总数据载荷率和有效载荷率同样提高n倍。现在假设某CAN网络有6个节点,有两个节点A,B想提高数据传输速率。

方法一,6个节点都提高波特率。在整车环境下“牵一发而动全身“的方法成本太高。对于高级车型,所有通信节点重新设计增加的成本在整车成本比例中可能不高。但对于中低端车型显然会增加成本,显得不现实。另外,因为每个节点的零部件供应商和软件开发者可能都不一样,协调起来难度也较大。其次,有的节点本来数据传输量就不大,为了应付总体波特率提高而更改设计没有必要。

方法二,划分不同波特率时间片。例如,网络上所有节点约定一个全局时间,每隔100ms切换一次波特率,按照【50ms高速——50ms低速——50ms高速——50ms低速.......】循环进行。比如,按照流程:

0ms:  主节点A按低速波特率授时0ms计时开始,

0~45ms: 所有低速节点通信

45ms: 所有低速节点关闭通信

45~55ms:低高速通信切换缓冲区,总线空闲

55~90ms:所有高速节点通信

90ms:所有高速节点关闭通信

90~100ms:高低速通信切换缓冲区,总线空闲

重复0ms动作

存在的问题:

1. 每个循环周期有两次高低速切换缓冲区,在此期间不能通信,否则会引起错误帧。该缓冲区时间浪费带宽。如果要减少缓冲时间,就要保证较高的授时精度,这需要较复杂的软件算法。

2. 当某个节点因BusOff或其它原因脱离总线恢复后在没有收到授时帧前,不能发送数据,还需要做波特率检测算法。

3. 当0ms授时节点故障时,总线就会瘫痪。所以,需要做两个0ms授时节点的冗余方案。

2. 和方法一一样,无关的从节点也要更改软件,依然“牵一发而动全身“。

 

方法三,根据节点优先级动态更改波特率。例如,当节点A,B想用高波特率通信时,按流程:

a. A按照默认波特率通知其他节点停止接收,通知B节点提高波特率。

b. A提高波特率:2~10HMz等

c. A,B互相通信

d. A,B通信完释放总线。

e. 其它节点按照默认波特率通信。

 

综合,有一个很好的组合方案就出来了:延长数据场长度+根据节点优先级动态更改波特率,这就是CAN-FD,如下图。

特别的,CAN-FD在仲裁场增加BRS位,只要一个Bit的时间1~2us,就可以无缝切换波特率。其效率远高于固定时间片方法。另外,仅仅更换传统控制器CAN节点的收发器,使收到BRS位有效时立即关闭接收,避免波特率不一致使低速节点发出错误帧。使用最低的成本就是可以实现一个CAN网络中个别节点的速率提升。

 
CAN-FD的技核心术?

传统CAN 2.0B标准,限制波特率1Mbps,主要是考虑CAN时钟源振荡器的频率误差范围:根据ISO11898-1-2003标准描述,选用5位填充时,频率误差df公式如下,

式1),分母中的13意思是2*(N+1)+1=2*(5+1)+1,可见填充位的位数N越大,对振荡器的精度要求越高。CAN规范在设计之初就排除了误差较大的RC振荡器,误差在1%以上,用户可选用的是陶瓷或晶体振荡器(陶瓷振荡器精度是几千个ppm,石英振荡器可以达到几个ppm,相差3个数量级)。根据ISO11898-1-2003限制的位时序参数,取最大波特率1MHz, tbit=8Tq,最小的PSEG1, PSEG2=2, PTS=4, 带入公式1,df≤2/(2*(13*8-2)=0.9%=9000ppm,可以满足大部分陶瓷振荡器的频率误差。

参考:下图是某款汽车级的陶瓷振荡器,频率公差在±3000ppm

可见要实现CANFD,必须要在保证时钟频率误差的前提下提高波特率。

1. 如果选用频率误差更低的陶瓷振荡器或晶体振荡器,波特率就能提高10倍?

设目标波特率是10MHz,一个位8个Tq,那么CAN时钟源至少80MHz。目前汽车也用的最多是20MHz晶振,80MHz晶振或许有,但价格肯定也很高。

 

2. 用PLL倍频方法提高CAN时钟频率可以吗?

用PLL倍频,可以把20MHz倍频到80~200MHz甚至更高。但是PLL倍频一般会放大频率误差。比如,飞思卡尔MPC5643L一款MCU,他就推荐CAN时钟源尽量直接用晶振不要用PLL。

 

但是,如果CPU制造商技术强大的话,也可以保证PLL倍频后的误差不会太高。比如下面英飞凌TC275,可见芯片厂家在PK技术的时候PLL倍频时钟频率误差是一个非常重要的制约点。

3. 总线传输延迟的考虑。

    但是,光保证PLL倍频精度还不够。在传统CAN里面,ISO 11898-5:2007规定了最大总线传输延迟是255ns,对于1MHz波特率1us/bit, 按照极限情况8Tq/bit计算一个Tq=125ns。则总线最大传输延迟=2Tq, 则传播时间段设置2Tq就可以吸收该延迟。

 

但是,当总线波特率提高时。假设5MHz, 则有200ns/bit, 仍旧按8Tq/bit计算,则25ns/Tq。则总线最大传输延迟=10Tq。原来的传播时间段显然无法覆盖。那怎么办?

1. 延长传播延迟段参数,比如10~20Tq,那每位的Tq个数增加了,波特率又下降了,与目的违反,显然不行。

2. 把这个时间实测出来,补偿到传播时间段参数里。这是个很好的方法。英飞凌TC275的手册里有如下描述:The Transmitter loop delay is measured in each transmitted frame at the edge from the FDF bit to the following bit r0, between the edge of the transmitted bit and the edge of the received bit.

 

如图,是考虑了总线延迟,采样点从SSP后移到SSP,

4. 总线传播延迟的补偿方法

    总线传播延迟时间tLoop分两段:隐性到显性延迟 tLoop-rec2dom, 显性到隐性延迟 tLoop-dom2rec.

 由于CAN2.0规范允许重同步时只考虑隐性到显性电平的变化,如下图示:对于tLoop-rec2dom的时间是可以提前测量的也是基本稳定的(硬件原因),但是必须要在实际测量出tLoop-dom2rec前就要对第6个反型位采样,那么就要提前估算出tLoop-dom2rec,也就是确定tRec的值。方法就是先做大量实验测量tRec的值,受各种原因影响,从显性位回到隐性位的延迟时间不固定,如下表示。但是它总在tBit的左右一定范围内变化。

我们关心的是tRec的实际时刻与期望时刻的一个偏差,如下公式所示,并在规范里限制该偏差在一定范围内。

 

5. 位速率分界线

 

 

6. SSP计算方法

       在CAN-FD数据段,第二采样点=传播延迟时间(实测,SS是一个估计值)+补偿时间(相当于相位缓冲段1)。

7. 延时补偿的影响范围

    受网络复杂度影响,tLoop-dom2rec在5MHz以上变化范围很宽。所以当CAN-FD波特率≥5MHz时只能用于点对点通信,CAN-FD波特率≤2MHz时可以用于复杂网络通信,在2~5MHz范围不能保证复杂网络通信的可靠性。如此,当总线上所有节点都升级到CAN-FD功能后,网络波特率最大被限制到2MHz。要想在5MHz范围内保证网络通信的可靠性,就要用更好的线束,收发器,而这又是一笔不小的成本。

 
升级CAN-FD的影响:

1. 所有基于传统CAN的测试设备要升级:Canoe, Canlyzer, ES581, 刷新工具

2. 所有基于传统CAN的测试软件要升级:Canoe, Canlyzer, INCA,刷新软件

 

总结:

1. 在保证CAN总线上非相关节点软硬件基本不动的前提下(硬件上只需更换收发器),CAN-FD是一种性价比最好的方法

2. CAN-FD的核心技术:

    a. 提高CAN时钟源频率的前提下依然保证误差容许范围不超过9000ppm(由CPU制造商保证)

    b. 自动测量隐性到显性的传播延迟时间Tloop,结合不同波特率下隐性到显性传播延迟时间的期望值,在第二采样点SSP做补偿就可以。

    c. 当总线上所有节点都升级到CAN-FD功能后,网络波特率最大被限制到2MHz。要想在5MHz范围内保证网络通信的可靠性,就要用更好的线束,收发器,而这又是一笔不小的成本。

参考文献:

1. Infineon-TC27x_D-step-UM-v02_02-EN.pdf

2. ISO11898-1_en.pdf

3. ISO11898-5_en.pdf

4. With flexible data rate (CAN FD) – Part 1: Physical interface implementation
 
————————————————
版权声明:本文为CSDN博主「Lincanman123」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_40137252/article/details/98500615

 

USB转CANFD适配器,CANFD总线开发好帮手:链接

CAN-FD核心技术简介_第1张图片

 

你可能感兴趣的:(单片机,CAN,FD,USBCAN,CAN)