CAN_FD和CAN2.0的不同点——深入浅出理解CAN协议(二)
直接来看CAN2.0和CANFD,CANFD是在链路层对CAN协议做了升级,物理层并未改变;区别从宏观上来说:帧格式、传输速度和数据长度等上有不同。
本系列是在同公司硬件设计、验证的同事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协议做了升级,物理层并未改变;区别从宏观上来说:帧格式、传输速度和数据长度等上有不同。
- 帧类型上CAN2.0支持远程帧,而CANFD不支持(实际使用下来,bosch、nxp家的CANFD是可以支持远程帧收发的,这里应该是应用层做了限制不让发送远程帧);帧格式会在下面第一节详细说明
- 传输速度:CAN2.0最大传输速率为1Mbps;CANFD仲裁比特率最高1Mbps,数据比特率最高8Mbps
- 传输数据长度:CAN2.0最大DLC=8 bytes;CANFD最大DLC=64 bytes
网上大部分文章都是针对这些的表象和特点在说明,都是软件使用时直接可以看到的,对大部分软件从业人员基本覆盖很全了,我将深入的介绍细节,让软件使用者也有更深的理解;另外对硬件设计也有一点参考。
抛砖引玉,如有更多见解,评论区一起讨论。
1 帧格式Frame structure
- 帧头SOF
- 仲裁域
11bit ID + RTR,canfd不支持remote帧,RTR为reserved - 控制域
除了IDE、r0和dlc字段,canfd还多了EDL、BRS以及ESI
ABBR | 英文全拼 | 作用 |
---|---|---|
EDL | EXTENDED DATA LENGTH | Canfd,区分can和canfd帧 |
BRS | BIT RATE SWITCH | Canfd,指示canfd是否变速 |
ESI | ERROR STATE INDICATOR | Canfd,指示发送canfd的错误状态 |
- 数据域
用户希望发送的数据,经典can支持一次传输0-8bytes的数据,canfd支持一次传输0-64bytes数据 - 检查循环冗余序列(CRC)+ DEL
- 经典can通过15bit的CRC来校验数据,DEL为delimiter,即CRC delimiter
- canfd的crc算法为crc-17,crc-21,其中dlc>=20时,采用crc-21,dlc<20时,采用crc17
- ack域
包含1bit的ack slot和1bit的ack delimiter。 - 帧尾(EOF)
通过连续7bit的隐性位来表示 - 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)
更多推荐
所有评论(0)