CANFD协议在整车通讯中的研究及应用

2022-11-16 02:16潘文卿史家涛李秀月张鲁兵
电子技术与软件工程 2022年16期
关键词:波特率字节校验

潘文卿 史家涛 李秀月 张鲁兵

(潍柴动力股份有限公司 山东省潍坊市 261061)

汽车功能的高速发展使其越来越智能化和复杂化,导致数据出现大爆炸现象,网络越来越受到传输速率1Mbps 带宽的限制,而且传统CAN 一次只能传输8 个字节的数据,导致网络中的负载率越来越高,传统的CAN 总线难以满足当前需求,但是又不可能直接放弃传统CAN 总线技术,为了解决负载率问题还要兼容传统的CAN 总线, CANFD应运而生。2011 年BOSCH 首次发布了CANFD(CAN with Flexible Data rate)方案,在满足CAN 总线特性的基础上升级了波特率和数据长度的两大特性,在数据段传输时既可以提升速率又可以增加数据长度,最大可以一次传输64 字节的数据, CANFD 同时还继承了传统CAN 的主要特性,采用双线串行通讯协议,非破坏性仲裁技术,分布式实时控制,具有可靠的错误处理和检测机制。CANFD 协议在整车通讯领域中的应用将会越来越广泛。

1 CANFD协议简介

1.1 CANFD帧结构

对比传统CAN[1]协议,CANFD 的帧结构特点如图1 所示:

图1:CANFD 帧结构

(1)CANFD 不支持远程帧,所以原来RTR 远程传输请求位用RRS 远程请求替换位替代,并且始终为显性位’0’。

(2)为了区分CANFD 与CAN,增加了FDF(FD Format)位,为0 表示传统CAN;为1 表示CANFD。

(3)CANFD 最显著的特征就是数据段可以提升传输速率,在CANFD 仲裁场增加BRS(Bit Rate Switch)位速率转换开关位,为1 表示进行速率切换,发送节点在BRS 位时将会切换到高速传输的波特率,其他接收节点也必须转换对应的波特率。在CRC 界定符的采样点,所有节点的波特率再切换回仲裁场的波特率;为0 表示不进行速率切换。

(4)CANFD 最大可传输64 字节的数据,所以原来4 个字节的DLC(Data Length Code)需要重新编码即支持传统CAN 的0 到8 个字节,也要支持最大64 个字节的CANFD,数据长度可以从0 到8,12,16,20,24,32,48,64 字节中选择,具体编码方式如表1 所示,CANFD 的长度只能是表中显示的长度,不随意指定数据长度,例如30 个字节是不支持的。

表1:CAN&CANFD DLC 编码表

(5)CRC(Cyclic Redundancy Check)校验在传统CAN 的基础上进行了升级,如果数据段的长度大于16 个字节时,CRC 的长度为21bits,小于等于16 个字节时,CRC的长度是17bits, CANFD 对CRC 算法做了改变。在校验和部分从第一位开始每4bits 添加一个填充位加以分割,这个填充位的值是上一位的反码。

(6)ESI(Error State Indicator)错误知识状态位,0 表示CANFD 节点处于主动报错状态,1 表示CANFD 节点处于被动报错状态[2]。通过ESI 位,所有节点都可以确认当前的传输节点的错误状态。而在传统CAN 帧中,无法得知其传输节点的错误状态。

1.2 CANFD的CRC校验

一个传统的CAN 帧结构中,CRC 域放置在数据结束后应答检测之前,CANFD 帧结构在同样的位置,该信息在用户界面是不可见的,可以通过示波器波形分析得到CRC的数据展示。与传统CAN 相比,CANFD 多了4 个bits 的Stuff Count 位填充序列,如图2 所示,包含3 个bits 的填充位计数以及1 个bit 填充计数检验位,此四位的加入进一步提高通讯可靠性。3 个bits 填充位计数表示的值为实际填充位计数对8 取模的结果,采用格雷码显示。奇偶校验位对填充位计数进行奇偶校验,即1 的个数是奇数时,奇偶校验位的值位1,反之为0。详见表2。

图2:CANFD-CRC 域填充位

表2:填充位计数

传统CAN 采用的是15 位的CRC 多项式校验,由于CANFD 支持更大的数据量,为提高通讯可靠性,针对不同数据长度的CANFD 报文,调整CRC 多项式算法,详见表3。当报文为传统CAN 时,仍采用原有的CRC 多项式校验。当报文为CANFD 且数据长度小于等于16 字节时,调整为17 位的CRC 多项式校验。当报文为CANFD 且数据长度大于16 字节时,则调整为21 位的CRC 多项式校验。根据CANFD 报文的数据长度自动调整CRC 多项式的算法,可以提高通讯数据安全校验的可靠性。

表3:CRC 多项式

在传统CAN 中,连续5 位相同位后会填充一位相反位,并且在CRC 计算之后进行填充。当CAN 控制器发送报文时,先对报文按照多项式进行CRC 计算,然后再按照填充位原则填入填充位发送;在接收节点接收报文时,则对接收数据先根据位填充的原则移除填充位后,再做CRC 校验。

在CANFD 中,CRC 计算的时机调整为位填充后,位填充原则同样为连续5 个相同会后填充一个相反位,发送节点发送报文时,先对报文按照位填充原则进行位的填充,再按照CRC 多项式做CRC 计算。在CRC 域的校验和部分为避免连续相同位超过6 个,就确定在第一位以及以后每4 位添加一个填充位进行分隔,这个填充位的值是上一位的反码,作为格式检查,如果填充位不是上一位的反码,就作错误处理。CANFD 的CRC 校验过程中因为会随着数据长度的不同采用不同的多项式计算,所以在CANFD 网络中,帧起始位被检测到后所有的节点开始使用多项式同步计算,直到DLC 长度确认后才确定采用对应的多项式生成CRC 序列,填充到帧结构中用于发送和接受节点的校验。这种方式增加了对填充位的CRC 计算,提高了位校验可靠性,降低了错误漏检的概率。

1.3 CANFD数据传输理论计算

因为报文的长度会根据内容不同有不同长度的填充位,所以传统CAN 和CANFD 报文的传输时间计算均以有效位计算,不考虑填充位。本文中是基于扩展帧格式的CAN 和CANFD 报文进行理论计算。传统CAN 整车通讯,按照总线波特率是250Kbps 计算,传输1bit 的时间是1s/250000bit=4us/bit,报文数据长度是8 字节,一帧不计算数据填充位的报文长度是128 个bits,传输一帧报文的时间是4us*128bit=512us。按照标准的J1939‐71 协议,总线报文的传输周期分为10ms,20ms,50ms,100ms,200ms,500ms,1000ms 等,同时还可以自定义周期。按照传统负载率的计算方式:报文传输时间/报文周期,一条10ms 周期的报文负载率是512us/10ms*100%=512us/10000 us*100%=5.12%。按照同样的计算方法,20ms 周期的报文负载率是2.56%,100ms 周期报文的负载率是0.512%。

CANFD 报文的在理论计算过程中按照仲裁段按照250Kbps 波特率,数据段波特率可以是500Kbps,1000Kbps,2000Kbps,传输的数据长度可以是8字节,24字节,32 字节,48 字节,最大长度64 个字节。其中BRS 速率切换指示位是数据段波特率加速过渡阶段,BRS 阶段前半段为仲裁段会采用仲裁段的波特率,后半段采用数据段的波特率,所以计算BRS 的整体脉宽则是分别取两种比特率脉宽的一半[3],进行累加,CRC 界定符同理。仲裁段按照图1 的帧格式计算仲裁段是45bits,仲裁段传输时间为180us,数据段按照数据域的长度不同而不同,按照64 字节计算,数据段长度是543bits。根据数据段不同的波特率,不同的数据长度,一帧CANFD 报文的传输时间如表4 所示。

表4:CANFD 报文传输时间

通过表4 可以看出当波特率低了,传输的字节超过32 字节时,传输时间就会加长,负载率就会升高,所有CANFD 协议的整车通讯如果是多字节传输数据,数据段的负载率必须要高,必须高于1000Kbps 对于降低负载率才会很好的效果。本文基于仲裁段是250Kbps,数据段是2000Kbps,数据域是64 字节长度与传统CAN 做对标分析如表5 所示,在报文周期分别是10ms,20ms,100ms 时的负载率分别是4.515%,2.2575%,0.4515%,可见通过理论计算,相较于传统CAN,CANFD 不仅可以增加数据带宽,还可以降低负载率。

表5:负载率理论计算

2 CANFD协议的整车通讯设计

2.1 CANFD通讯方案设计

根据CANFD 的特性,数据段扩大长度和提升波特率。按照一定的规则,添加多个标准的J1939 报文,增加数据段的长度,增加标准J1939 报文的加载量[5],同时提升数据段的波特率,加快报文传输速率。

标准J1939 报文通过PGN 参数群编号进行标识。每个PGN中定义不同的数据对应的位置以及数据的精度和偏移。对于组合为一条CANFD 报文的标准J1939 报文周期可以不相同,但是CANFD 报文的周期必须是标准J1939 报文最小周期的整数倍,CANFD 报文的周期是J1939 报文中最小的周期,例如,标准1939 报文有10ms,20ms,100ms,那CANFD 报文是10ms 周期往总线上发送,对于标准J1939报文是20ms,100ms 的需要分别间隔1 个10ms 周期和9 个10ms 周期对CANFD 报文中20ms,100ms 的周期PGN 更新一次数据,其余时间数据保持上一帧的不变。

CANFD 报文的第一个字节Byte0 表示此条CANFD 报文中包含的标准J1939 报文的个数,第2 到第4 个字节即Byte1‐Byte3 表示包含J1939 标准报文PGN 参数编号的周期标识,定义如表6 所示。从Byte4‐Byte63 存放报文的PGN标识和对应的8 字节数据,一条标准的J1939 报文用10 个字节标识,PGN 占用2 个字节,数据占用8 个字节。通过此方案的设计每一个CANFD 报文最多可以加载6 条标准报文,如图3 所示。

表6:周期标识定义

图3:CANFD 的数据域定义

按照此方案的设计,例如传统CAN 报文10ms 报文2 条,20ms 报文2 条,100ms 报文2 条。具体PGN 及周期信息如表7 所示。

表7:CAN 报文

此六条报文组合为一条CANFD 报文,CANFD 报文的64 个字节数据域分配为:

Byte0:0x06, Byte1:0x11, Byte2:0x22, Byte3:0x44,

Byte4‐5: 0xF000; Byte6‐13: Data0‐Data7;

Byte14‐15:0xFF04; Byte16‐23: Data0‐Data7;

Byte24‐25:0xFF10; Byte26‐33: Data0‐Data7;

Byte34‐35:0xEF00; Byte36‐43: Data0‐Data7;

Byte44‐45:0xFCDC; Byte46‐53: Data0‐Data7;

Byte54‐55:0xFF08; Byte56‐63: Data0‐Data7;

按照理论计算,如表8 所示,6 条传统CAN 报文的负载率是16.384%。这六条传统CAN 报文组合为一条周期是10ms,数据长度是64 字节长度,仲裁段波特率是250Kbps,数据段波特率是2000Kbps 的CANFD 报文,此CANFD 报文的载率按照表5 的计算结果为4.515%,负载率降低了11.869%。由此可见,CANFD 协议不仅可以大大增加数据带宽,还可以很明显的降低负载率。所以通过此方案的设计可以很好的优化CAN 总线负载率高,数据量大的问题。

表8:CAN 报文负载率

如果组成一条CANFD 报文的标准J1939 报文数量不是6 条,是3 条或者是4 条,5 条,在Byte1‐Byte3 的报文周期标识处,不被使用的bit 位用1 来填充,后面的PGN 标识位置,数据标识位,不用的bit 位同样用1 填充。例如一条CANFD 报文加载3 条10ms 的标准J1939 报文,报文填充格式如图4 所示。

图4:CANFD 报文位填充

2.2 CANFD协议整车通讯测试

按照表7 的周期以及报文条数设计6 条报文分别通过传统CAN 和CANFD 发送到总线上,通过报文检测工具实际验证负载率的变化。6 条报文,地址,PGN,周期如表7 所示,采用传统CAN 发送这些报文到总线上,波特率为250Kpbs,通过报文检测工具可以看到报文以及报文的负载率如图5 所示,实际CAN 总线的平均负载率在19.42%。如图6 所示,这六条报文按照本文的设计方案组合为一条数据长度是64 字节的CANFD 报文,发送到总线上,数据段波特率是2000Kbps,仲裁段的波特率是250Kbps,平均负载率为6.14%。通过实际测试传输相同的数据量,CANFD 协议可以降低13.28%的负载率。

图5:CAN 报文发送及负载率

图6:CANFD 报文发送及负载率

通过实际测试的结果与理论计算的结果对比,CANFD对于将负载率的效果相接近,证明本方案对降低负载率和提升数据带宽方面的效果是实际有效的。所以在今后的整车通讯中基于此方案使用CANFD 协议可以很好的克服数据猛增,负载率偏高的问题,为今后CANFD 协议的在整车通讯中的广泛应用奠定了基础。

3 结论

CANFD 协议只针对物理层给出了定义,但是在整车通讯,故障诊断等数据链路层和应用层如何使用未给出明确的定义,所以基于CANFD 协议的应用方面,各个整车厂会有自己的定义方式,很难达做到普遍性的统一应用。在整车通讯方面,基于本文的方案设计,通过理论计算和实际测试,可以看出CANFD 协议的整车通讯方案可以最大限度的兼容传统CAN,即可以增加数据带宽又可以提高传输效率,降低总线负载率。如果再进一步提升仲裁段和数据段的波特率,降负载率将会更明显。所以基于此方案的设计,CANFD 协议在整车通讯中降负载率和提升数据带宽方面的优势非常明显,可以很好的解决当前随着汽车智能化的发展,数据量大爆发的问题。在未来的整车通讯中,CANFD 协议也将会得到广泛应用。

猜你喜欢
波特率字节校验
No.8 字节跳动将推出独立出口电商APP
No.10 “字节跳动手机”要来了?
基于FPGA的异步串行通信波特率容错设计
炉温均匀性校验在铸锻企业的应用
简谈MC7字节码
大型电动机高阻抗差动保护稳定校验研究
基于加窗插值FFT的PMU校验方法
锅炉安全阀在线校验不确定度评定
C*Core芯片SCI串口波特率容限优化
计算机多设备接口波特率不匹配的研究