本系列是在同公司硬件设计、验证的同事1、在完成了CANFD硬件接口IP开发 2、熟悉ISO-11898系列、ISO16845、CAN2.0协议、CANFD协议等以及大量学习资料 3、深入研究其他家CANFD IP(NXP、BOSCH)4、独立开发了对应底层驱动 5、通过CANoe和周立功CAN分析仪完成前述各协议要求的场景 6、以及对autosar底层接口适配后,基本上对CAN协议有了深入的理解。将过程中整理了一些文档分享出来,希望能给新入门和从业多年的相关工程师提供一点点帮助。
主要包含CAN2.0及CANFD协议,后面对CAN2.0及CANFD的不同点做些说明。

  • 可作为入门CAN协议
  • 另外也有深入硬件的理解,从业多年软件工程师也可以学习一二
  • 亦可作为后续查阅使用,常看常新嘛。

CAN(-FD)协议介绍—— 深入浅出理解CAN协议(一)
CAN_FD和CAN2.0的不同点——深入浅出理解CAN协议(二)
CAN error情况及处理机制——深入浅出理解CAN协议(三)
CAN协议一致性测试——深入浅出理解CAN协议(四)

0 简介

直接来看CAN2.0和CANFD,CANFD是在链路层对CAN协议做了升级,物理层并未改变;区别从宏观上来说:帧格式、传输速度和数据长度等上有不同。

  1. 帧类型上CAN2.0支持远程帧,而CANFD不支持(实际使用下来,bosch、nxp家的CANFD是可以支持远程帧收发的,这里应该是应用层做了限制不让发送远程帧);帧格式会在下面第一节详细说明
  2. 传输速度:CAN2.0最大传输速率为1Mbps;CANFD仲裁比特率最高1Mbps,数据比特率最高8Mbps
  3. 传输数据长度:CAN2.0最大DLC=8 bytes;CANFD最大DLC=64 bytes

网上大部分文章都是针对这些的表象和特点在说明,都是软件使用时直接可以看到的,对大部分软件从业人员基本覆盖很全了,我将深入的介绍细节,让软件使用者也有更深的理解;另外对硬件设计也有一点参考。
抛砖引玉,如有更多见解,评论区一起讨论。

1 帧格式Frame structure

在这里插入图片描述

  1. 帧头SOF
  2. 仲裁域
    11bit ID + RTR,canfd不支持remote帧,RTR为reserved
  3. 控制域
    除了IDE、r0和dlc字段,canfd还多了EDL、BRS以及ESI
ABBR英文全拼作用
EDLEXTENDED DATA LENGTHCanfd,区分can和canfd帧
BRSBIT RATE SWITCHCanfd,指示canfd是否变速
ESIERROR STATE INDICATORCanfd,指示发送canfd的错误状态
  1. 数据域
    用户希望发送的数据,经典can支持一次传输0-8bytes的数据,canfd支持一次传输0-64bytes数据
  2. 检查循环冗余序列(CRC)+ DEL
    • 经典can通过15bit的CRC来校验数据,DEL为delimiter,即CRC delimiter
    • canfd的crc算法为crc-17,crc-21,其中dlc>=20时,采用crc-21,dlc<20时,采用crc17
  3. ack域
    包含1bit的ack slot和1bit的ack delimiter。
  4. 帧尾(EOF)
    通过连续7bit的隐性位来表示
  5. IFS
    inter-frame space

Note:
1、对于29bit的扩展帧,标准can和canfd是类似的。

2 CRC 计算

一般软件人员对这块不用深入,只需简单了解即可
在这里插入图片描述

2.1. crc多项式

  • CRC_15,用于经典CAN格式的所有帧。
    在这里插入图片描述

  • CRC_17,用于CANFD帧,数据字段最多16字字节。
    在这里插入图片描述

  • CRC_21,用于CANFD帧且数据字段大于16的CAN帧字节。在这里插入图片描述

2.2. fix stuff bit

  • 在crc多项式发送时,每隔4bit插入1bit的fix stuff bit(该bit和前面bit相反)
  • crc15不会插入fix stuff bit,crc-17和crc-21会按照上面原则插入
  • fix stuff bit不会参与crc计算

2.3. stuff cnt

crc-17和crc-21的crc字段中包含stuff count字段,该字段是sof-data中包含的stuff bit模8后根据规则生成gray-code(格雷码有兴趣可以自行搜索学习下,标准格雷码参考下图)
例如上图crc-21前面stuff bit共14个,14%8 = 6,所以gray-code为101,根据规则末尾补0
在这里插入图片描述

2.4. stuff bit

在crc-15时,sof-data中stuff bit不参与计算;而crc-17和crc-21需要参与计算

2.5. ISO模式和bosch模式

博世在设计协议时做了一个bosch模式;区别在于:

  • bosch模式stuff count是不参与crc计算的(图示逻辑分析仪解码错误,不用在意)
  • crc初始值(0x00000)和ISO模式(0x10000)不一样,
    crc是由硬件来实现,软件不用关心那么细节,只需要收发时配置一致(见到的大部分的CANFD的硬件都支持配置bosch模式)就可以了。(下图是bosch)
    在这里插入图片描述

3 Ack field

Ack filed包括ACK SLOT and the ACK DELIMITER.
在CAN FD格式中,所有节点应接受2 bit的重叠ACK位主导相位作为有效ACK,以补偿接收器之间的相位差;在CAN格式中,所有节点只能接受一个1bit的ack slot。
这也就是说在CAN格式中如果ack delimiter为显性,则控制器会产生form err,而CANFD格式则正常。

4 变速bit timing

canfd是支持变速的,即在数据段支持以更快的速率传输数据;这里就涉及一个问题,就是什么时间变速,以及变速bit的处理。
如下图:

  • 变速阶段从BRS开始到CRC-delimiter结束
  • BRS bit的bit timing :Sync+seg1(N)+seg2(D)
  • CRC-delimiter的bit timing:Sync+seg1(D)+seg2(N)
    在这里插入图片描述
Logo

获取更多汽车电子技术干货

更多推荐