基于CANFD协议与CAN协议CRC校验差异化研究

2022-12-02 08:00潘文卿李国朋张鲁兵
内燃机与配件 2022年19期
关键词:传输速率校验字节

潘文卿,李国朋,张鲁兵,鞠 敏

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

0 引言

在CAN通讯过程中CAN控制器具备完整的错误检测能力,其中包含:位错误检测、格式错误检测、填充错误检测、应答错误检测和CRC错误检测。作为一种重要的错误检测手段,CRC错误检测是接收节点判断CAN帧信息的完整性和正确性并向总线确认应答的依据。

1 CANFD与CAN

2011年BOSCH首次发布了CANFD(CAN with Flexible Data rate)方案,在满足CAN总线特性的基础上升级了波特率和数据长度的两大特性,在数据段传输时即可以提升速率又可以增加数据长度,最大可以一次传输64个字节的数据,同时还可以提升数据段的传输速率,最大可以提升到5Mbps,如此一来,CANFD可以大大提升数据加载量和传输速率。同时CANFD还继承了传统CAN的主要特性,采用双线串行通讯协议,非破坏性仲裁技术,分布式实时控制,可靠的错误处理和检测机制,很好的继承了CAN的特性并优化了CAN总线最大只能传输8个字节数据,传输速率最大只能到1Mbps的局限性。可以很好的解决当前整车智能化带来的数据量急剧上升导致总线负载率过高,传输不稳定的问题。CANFD可以理解成CAN协议的升级版,只是将协议升级,物理层未作改变。CANFD可以向下兼容传统CAN,由传统CAN转移到CANFD比较方便。

1.1 CANFD帧结构

对比传统CAN[1]协议,CAN与CANFD主要区别:传输速率有提升,数据长度有提升,帧格式不同。CAN协议最大传输速率是1Mbps,CANFD协议的仲裁段的最大传输速率也是1Mbps,只是数据段的最大传输速率提升到了5Mbps,为了更加稳定的提升速率,CANFD协议的仲裁段和数据段的的传输速率一般保持1:1或者是1:2或者是1:4的提升数据段的速率,不然在传输过程中速率提升的太快会影响数据采集的有效性,造成大量错误帧。

CANFD协议的帧结构特点如图1所示:

1)CAN与CANFD使用相同的SOF标志位来标识报文的起始。帧起始由1个显性位构成,标识着报文的开始,并在总线上起着同步作用。

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

3)CANFD与CAN有着相同过的标识符扩展位IDE位,当IDE位为显性位0的时候表示ID长度是11bits的标准帧,当IDE位为隐形位1的时候表示ID长度是29bits的扩展帧。

4)为了区分CANFD与CAN,CANFD帧结构中增加了FDF(FD Format)位,为0表示传统CAN协议;为1表示CANFD协议。

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

6)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编码表

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

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

9)EOF(End of Frame)帧结束,7个隐性位。如果某一位编号下出现一个显性电平:[第1-6位]发送器或接收器检测到一个帧结构错误。此时接收器丢弃该帧,同时产生一个错误标记(接收节点CAN控制器处于错误主动状态,则产生显性错误帧;如果处于错误被动状态,则产生隐性错误帧)。如果是显性错误帧,则发送器重新发送该帧。[第7位]该位对于接收器有效,但对于发送器无效。如果此位出现显性错误帧,则接收器已经把报文接收成功,而发送器又重新发送,则该帧就被接收器接收两次,这时就需要由高层协议来处理。

2 CRC介绍

CRC即冗余校验码(Cyclic Redundancy Check):是数据通信领域中最常用的一种差错校验码,其特征是信息字段和校验字段的长度可以任意选定。循环冗余检查(CRC)是一种数据传输检错功能,对数据进行多项式计算,并将得到的结果附在帧的后面,接收设备也执行同样的算法,以保证数据传输的正确性和完整性。

CRC检验算法是基于一个多项式除法取余的结果,根据位数的需要和多项式的变化有数十种版本,该算法硬件实现简单,位反转侦错能力较强及运算量适中,被广泛应用与数字网络传输及数据存储领域。

3 CANFD与CAN的CRC差异化研究

3.1 CRC帧结构

一个传统CAN帧结构中,CRC域放置在数据结束后应答检测之前,如图2所示。对于CANFD也是同样的位置,该信息对于用户应用界面来说是不可见的,可通过CANscope总线分析仪解码窗口或者示波器从总线波形上得到对应的CRC数据展示。

CANFD帧结构中,CRC域在同样的位置,并且CRC的长度随着数据域的长度变化分为17位和21位的校验,CRC采用一种固定填充位的格式:在CRC段第一位及接下来的每四位增加一个固定填充位,填充位的值为上一位的反码。

如图3和图4分别展示CRC17和CRC21的固定填充位FSB位置。

除了固定填充位之外和CRC计算位外,CRC域的起始还包含了3位的填充位计数,及1位填充位计数检验位,以此四个位的加入来进一步提高通讯可靠性。填充位计数在CRC段的位置如图5红框所示。

3位填充位计数表示的值为实际填充位计数对8取模的结果,采用格雷码显示。奇偶校验位对填充位计数进行奇偶校验,即1的个数是奇数时,奇偶校验位的值位1,反之为0。详见表2。

表2 填充位计数

3.2 CRC多项式

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

表3 CRC多项式

3.3 CRC计算

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

在CANFD中,CRC计算的时机调整为位填充后,位填充原则同样为连续5个相同会后填充一个相反位,发送节点发送报文时,先对报文按照位填充原则进行位的填充,再做CRC计算。这种方式增加了对填充位的CRC计算,提高了位校验可靠性,降低了错误漏检的概率。

CANFD对CRC算法进行了改进,CRC对填充位也加入了计算。在CRC域的校验和部分为避免连续相同位超过6个,就确定在第一位以及以后每4位添加一个填充位加以分隔,这个填充位的值是上一位的反码,作为格式检查,如果填充位不是上一位的反码,就作错误处理。

CAN帧基于CRC多项式的安全校验是发送节点根据发送的位计算校验值,并在CAN帧结构CRC字段中提供该结果。接收节点使用相同的多项式来计算总线上所见位的校验值,将自我计算的校验值与接收的校验值进行比较,如果匹配,则认为被正确接收,接收节点在ACK时隙中发送显性状态,从而覆盖发送器的隐形状态。在不匹配的情况下,接收节点在ACK定界符之后发送错误帧。

CANFD的控制器CRC校验实现过程会相对复杂一些,在一个CAN总线网络中,帧起始被检测到后所有的节点开始使用三组多项式同步计算CRC序列,其中也包含发送节点,由于CRC的计算受CAN帧类型和DLC长度影响,直到CAN帧的控制域以及DLC确认后才选择采用对应的多项式生成CRC序列,最终生成的 CRC序列会填充在帧结构中CRC字段,用于发送和接收节点进行比较判定该报文是否被正确完整发送和接收。

4 结论

CANFD协议相较于传统CAN有更高的传输速率,有更大的数据带宽,CANFD协议在仲裁场和数据场进行切换,在数据段增加数据长度,在传输的过程中需要更高效更准确的校验机制来保证数据传输的准确性。所有基于CANFD协议的CRC校验机制相较于传统CAN有相应的升级以保证传输过程中数据的完整性和正确性,能有效防止物理层传输错误,CANFD因为数据段是可以变速率并且数据段的长度也是可变的,所以CRC校验会更为复杂一些会根据数据长度的不同,更换CRC校验多项式,同时增加了填充域,采用格雷码校验和奇偶校验的形式保证位填充的正确性,为数据传输的准确性添加了双重保险。CRC校验用户在应用场景下是看不到的,完整的有效的校验机制可以让用户界面不需要额外关注帧传输数据的正确性。

猜你喜欢
传输速率校验字节
使用Excel朗读功能校验工作表中的数据
No.8 字节跳动将推出独立出口电商APP
电能表在线不停电校验技术
三星利用5G毫米波 实现创纪录传输速率
No.10 “字节跳动手机”要来了?
精通文件校验的“门道”
夏季滨海湿地互花米草植物甲烷传输研究
数据传输速率
基于FPGA的CRC32校验查找表算法的设计
人类进入“泽它时代”