【CAN和CAN FD总线协议】
【CAN和CAN FD总线协议车载】
一、CAN与CAN FD的概念
1、CAN是什么
控制器局域网总线(CAN,Controller Area Network)是一种用于实时应用的串行通讯协议总线,它可以使用双绞线来传输信号,是世界上应用最广泛的现场总线之一。 CAN协议用于汽车中各种不同元件之间的通信,以此取代昂贵而笨重的配电线束。 该协议的健壮性使其用途延伸到其他自动化和工业应用。 CAN协议的特性包括完整性的串行数据通讯、提供实时支持、传输速率高达1Mb/s、同时具有11位的寻址以及检错能力。
2、CAN FD是什么
CAN FD 是CAN with Flexible Data rate的缩写,翻译为【可变速率的 CAN】。 也可以简单的认为是传统CAN的升级版,其中要说明的是,只升级了协议,物理层没有改变。
3、为什么需要CAN FD?
原因主要是汽车功能越来越多,越来越复杂,传统的CAN总线(CAN2.0)的负载率越来越高,甚至负载率高达95%,以及传统CAN总线还存在一些局限性。
传统CAN总线的局限性包括:
-
传输率最大为1Mbiy/s(典型的<= 500kbit/s);
-
传统CAN数据帧超过50%的额外开销(overhead > 50%)。
对比其他协议,额外开销比例要小得多,如UDP (1500 bytes/datagram, 64 bytes overhead),FlexRay(254 bytes/frame, 8 bytes overhead)。
还有就是历史原因,汽车不可能直接放弃目前的传统CAN总线技术,重头来过。 那么为了解决CAN总线负载率问题,而又能兼容CAN总线,并且研发成本不能太高的问题,因此在2015年最新的修订版ISO 11898-1(classic CAN和CAN FD)发布。
目前的很多应用对于通讯的数据量要求越来越高,对于通讯的速率要求也越来越高,尤其是当速率高于1MBit/s的时候,传统的CAN通讯是无法满足的,所以基于这种应用的需求,CAN FD就应运而生了。 既然是出于这样的目的,CANFD的出现肯定是需要解决传输速率和传输字节的问题,带着这样的思路我们就可以更容易地理解CANFD协议,以及为什么会出现它了。
二、CAN与CANFD的比较
CAN与CAN-FD主要区别:传输速率不同、数据域长度不同、帧格式不同、ID长度不同。
1、传输速率不同
CAN的传输速率
一般的工程中比较常用的为500K每秒的通讯速率。 这个速率在实际测试的时候也是非常可靠的。 CAN总线上任意两个节点的最大传输距离与其位速率有关。 最大通信距离指的是同一条总线上两个节点之间的距离。 从下面图中,可以看到速率越低通讯距离就越远,也就是说CAN总线的通讯距离和波特率成反比。 CAN最大传输速率为1Mbps
CANFD的传输速率
CAN-FD 采用了两种位速率:从控制场中的 BRS 位到 ACK 场之前(含 CRC 分界符)为可变速率,其余部分为原 CAN 总线用的速率。 两种速率各有一套位时间定义寄存器,它们除了采用不同的位时间单位 TQ 外,位时间各段的分配比例也可不同。
因此,对于 CAN FD而言,是在 CAN 的基础上增加了一个数据域的传输速率,数据传输速率要大于等于原 CAN 总线用的速率。 也就是说 CAN FD 支持两种传输速率,两种速率可以保持一致,也可以不保持一致。 速率可变,仲裁比特率最高1Mbps,数据比特率最高8Mbps。
2、数据域长度不同
CAN的数据域长度,一帧数据最长8字节。 CAN FD数据域长度,一帧数据最长64字节。
传统CAN报文与CANFD报文的DLC长度区别如下所示:
传统CAN报文与CANFD报文的最大区别有2点,
1、CANFD可以传输更多的数据,
2、CANFD报文在传输中由2种传输速率完成传输,一种是标称的CAN总线速率(用于传输非数据域的字段),另一种是数据域传输速度(用于传输数据域的字段)。
3、帧格式不同
在CAN总线上传输的信息称为报文,当总线空闲时任何连接的单元都可以开始发送新的报文。 CAN通信是通过以下5种类型的帧进行的:数据帧 、遥控帧 、错误帧 、过载帧 、帧间隔。
3.1.CAN Framing 帧格式
-
标准帧
-
标准帧(11 ID + 0~8 bytes data)
-
CAN ID为11bit,如下,可以用scope查看
-
标准远程帧(11 ID + 0 byte data)
-
-
扩展帧
- 扩展帧(29 ID + 0~8 bytes data)
- 扩展远程帧(29 ID + 0 byte data)
- SOF:0(显性电位为 0,隐性电位为 1,总线空闲默认为 1),帧起始,接收节点收到帧起始会和总线时钟进行同步(硬同步、重同步,这里是硬同步)。
- 仲裁字段
ID:高位在前
RTR:远程帧请求,远程帧为 0,表示是数据帧,否则是远程帧。远程帧表明接受该帧的节点即不主动发送数据,当他收到远程帧时,才开始发送数据,减少占用 CAN 的通信。
- 控制字段
IDE:表示是否是扩展帧,IDE 为 1 是扩展帧
r:保留位
DLC:数据长度,合理范围是 0 - 8,超过则表示 8 字节
- 数据字段
- 校验字段
CRC:15位校验位
DEL(delimter):分隔符,无意义,为 1
- 确认字段
ACK:发送节点,该位都为 1,接受节点 CRC 正确则在 ACK 位时,该位置置为 0,否则还是 1。如果发送节点回读 ACK 是 0,继续发送,否则停止发送,下一次发送一个错误帧。(下一次发送错误帧不太理解)
DEL
EOF + ITM:结束字段 + 帧间隔
- EOF + ITM:结束字段 + 帧间隔
- 位填充:
出现了五个相同的位(包括填充位),就在下一个位置填充一个相反的位。
范围从 SOF 开始一直到 CRC。
帧错误检测机制
- 位监控:回读发送出去的位的数据
- ACK 位:发送数据的节点回读 ACK 是 0,继续发送,否则意味着发生错误停止发送
- Stuff Check:填充检测
- CRC 检测
- Form 检测:一些分隔符 del 等
- 发先帧错误后:某一个节点检查到发送或者接受的帧出现错误,会以发送错误帧的方式告知其他参与通信的节点,当前正在发送或者接受的帧是有问题的。
3.2.CAN FD Framing 帧格式
硬件、协议轻微改动。CAN FD 数据段最多 64 字节。CAN FD 最高支持 8MB/s 的传输速率。CAN FD 采用可变速率,数据字段传输快。
CAN FD 没有远程帧,只分为两种:标准帧(标识符 11 位)和扩展帧(标识符 29 位)
CAN FD标准帧中的数据帧
CAN FD标准帧和扩展帧结构
- SOF:帧起始
- 标识符ID
- RRS 代替原来的 CAN 帧的 RTR
- IDE:表示是否是扩展帧
- FDF:表示是否是 CAN 帧还是 CAN FD 帧
- r:保留位
- BRS(Bit Rate Switch): 之后数据段传输是否变换速度,BRS 之前属于仲裁段,会以低速传输;BRS 开始到 CRC 分隔符为止,属于数据段,可以高速传输。CRC 分割符之后,由于需要 ACK 应答,因此又变为低速传输。
BRS=0,保持低速传输,BRS=1,数据段以高速传输
- ESI:用来告知其余节点,发送方的错误状态。ESI=1,Tx Node处于被动错误状态;ESI=0,Tx Node处于主动错误状态
- DLC:0-8 线性表示数据长度,9-15离散的表示数据长度。
- CRC:根据不同的数据长度使用不同长度的 CRC 校验。CAN 使用 15 位的 CRC 校验,且不包含填充位。CAN FD CRC 包含数据填充位。CAN FD 在 CRC 字段的前四位增加了对前面填充位的计数校验,前面的填充同样是 5 个相同位跟一个相反的位。CRC 字段不适用之前的填充,而是使用固定位填充,从 CRC 字段开始位置开始填充,每隔四个位填充一位,每次填充的位都取前一个的相反值。
先统计 SOF 开始到 CRC 字段之前填充位的个数对 8 取模,将数值以格林编码的形式存放在高三位,最后一位偶校验位,校验前三位。
当数据段大于 16 字节,使用 21 位 CRC
当数据段小于等于 16 字节,使用 17 位 CRC
3.3.CAN FD新增了FDF、BRS、ESI位
- FDF:表示CAN报文还是CAN-FD报文。
- BRS:表示位速率转换,该位隐性(1)时,速率可变(即BSR到CRC使用转换速率传输),该位为显性(0)时,以正常的CAN-FD总线速率传输(恒定速率);
- ESI:表示发送节点状态。
3.4、ID长度不同
CAN标准帧ID长度最长11bit,CANFD标准帧ID长度可扩展到12bit。
三、CAN与CANFD的优劣势
1、CAN优势
- 具有实时性强、传输距离较远、抗电磁干扰能力强、成本低等优点;
- 采用双线串行通信方式,检错能力强,可在高噪声干扰环境中工作;
- 具有优先权和仲裁功能,多个控制模块通过CAN 控制器挂到CAN-bus 上,形成多主机局部网络;
- 可根据报文的ID决定接收或屏蔽该报文;
- 可靠的错误处理和检错机制;
- 发送的信息遭到破坏后,可自动重发;
- 节点在错误严重的情况下具有自动退出总线的功能;
- 报文不包含源地址或目标地址,仅用标志符来指示功能信息、优先级信息。
2、CAN缺点
不一致性
CAN总线各节点质量的不一致会引发系统瘫痪、错误、死机等问题,所以CAN一致性测试成为保证CAN网络安全运行的重要手段。
不可预测性
CAN总线将节点状态分为ErrorAcTIve、Error Passive 和Bus Off 三种,这三种状态在一定条件下可以互相转换,不同状态中节点的发送有不同的延迟。 另外,由于CAN 的原子广播特点,其它节点的发送错误或接收错误会开启一个错误帧,从而影响到该节点的接收错误计数器的值,进而影响节点状态。
信道出错堵塞
节点有可能受干扰或其它原因暂时或永久失效,出错的主机会命令CAN 收发器不断发送消息,即所谓的Babbling ldiot 错误。 由于该信息的格式等均合法,因此CAN 没有相应的机制来处理这种情况。
3、CAN FD的优势
CAN FD提高位速率的同时提供更短的CAN帧
- 延迟时间更短.
- 更好的实时性能
- 更高的带宽
CAN FD可以在CAN帧中容纳从8到64字节更多的数据
- 相对更少的系统开销 = 更好的数据吞吐量
- 发送较大数据对象时,软件更简单高效
CAN FD具有更高性能的CRC算法
- 降低未检测到错误的风险
- 但是因为受制于产品的稳定性考验,改造成本等问题,还没办法快速全面普及CAN FD。
四、CAN FD通信 CANoe 配置
如果要两个CAN对发信息,CANoe配置(以VN1640A为例)
VN1640A CH1和CH2配成CAN FD ,发送的数据type配置成 CAN Data 和CAN FD都可以发送
VN1640A CH1和CH2配成CAN ,发送的数据type配置成 CAN Data 和CAN FD都可以发送
五、小结
总的来看,由于现在车辆上需要的通讯数据越来越多,而原有的CAN负载率逐年升高,考虑到传统的CAN通讯的架构已经非常的庞大了,如果将传统的全部推翻更换一个全新的通讯方式所要付出的代价实在太大,所以需要一个既能兼容原有的CAN通讯,又不至于增加太高的成本,CAN FD就是一个折中方案,同时还可以提高数据的传输量。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)