CAN的帧类型分为数据帧、遥控帧、错误帧、过载帧以及帧间空隙,本文将对数据帧的帧结构展开说明:
引言:
- CAN2.0协议分为A版本和B版本,A版本协议为11位标识符(标准帧),B版本在兼容11位ID标识符的同时,向上扩展到29位ID标识符。
-
显性电平和隐性电平:
总线上的电平有显性电平和隐性电平两种,显性电平的逻辑值为“0”,隐性电平为“1”。“显性”具有“优先”的特性,只要有一个单元输出显性电平,总线上即为显性电平,并且,“隐性”具有“包容”的特性,只有所有的单元都输出隐性电平,总线上才为隐性电平。(显性电平比隐性电平更强)
如上图所示,CAN数据帧分为以下7个部分。
- Start of Frame
- Arbitration Field
- Control Field
- Data Field
- CRC Field
- ACK Field
- End of Frame
1. Start of Frame:
它指示一帧的开始,由1bit的显性位组成,必须在Bus Idle状态发出,网络上所有节点在“下降沿”执行一次同步;
2. Arbitration Field
标准帧和扩展帧的仲裁域是不同的:
- 标准帧包含11bit的Identifier以及RTR-Bit,Identifier分布于ID28到ID18,禁止高7bit全都为隐性。
扩展帧包含29bit的Identifier,SRR-Bit,IDE-Bit以及RTR-Bit。Identifier分布于ID28到ID0,同样禁止高7bit全都为隐性。
- RTR-Bit:RemoteTransmission Request BIT,远程请求位,显性表示数据帧,隐性表示远程帧。
- SRR BIT:Substitute Remote Request BIT,替代远程请求位,它在扩展帧中,位于标准帧RTR的位置上,始终处于隐性。因此一旦标准帧与扩展帧发生冲突,将以标准帧的优先级高于扩展帧而结束。
- IDE BIT:Identifier Extension Bit,标识符扩展位,它在标准帧中位于控制场,始终处于显性。在扩展帧中位于仲裁场,始终处于显性。
仲裁域表示数据的优先级别,标识符组成的数值越小优先级越高。
3. Control Field
由6个bit组成,指示要传输信息的数据字节数。包含预留位IDE/r1、r0(2bit),DLC(4bit)。
- r0、r1:保留位必须以显性电平传送,然而,在接收侧可以接收显性、隐性集任意组合的电平。
- DLC:数据的字节数必须是0-8个字节,但接收方对DLC=9-15的情况并不视为错误。
标准帧和扩展帧的控制场是不同的,在标准帧中r1的位置为IDE-Bit,是一个常态显性位。
4. Data Field
由0到8个字节组成,用于负载传输的数据,数据输出开始于MSB。
5. CRC Field
由15bit CRC Sequence和1bit CRC Delimiter组成,用来检查帧是否有传输错误。
CRC Sequence:CRC序列,计算范围是SOF,仲裁域,控制域和数据域。
CRC Delimiter:CRC界定符,是一个常态隐性位。
6. ACK Field
ACK(应答场)长度为2 个bit。包括ACK Slot和ACK Delimiter。
- ACK Slot:应答间隙,发送节点送数据时,会将ACK Slot及ACK Delimiter全部置为隐性,接收节点计算CRC Sequence正确无误后,会在ACK Slot期间向发送方发送一个显性位以示应答。
- ACK Delimiter:ACK界定符,是一个常态隐性位。
如果总线上有2个以上的接收节点,只要它们当中任意一个正常接收到消息,就会有ACK被返回,如果总线上没有节点能够正常接收信息,则NO ACK被返回。另外发送节点不发送ACK。
7. End of Frame
指示帧的结束,由7个隐性位组成。