通讯协议(CAN)

时间:2024-05-21 13:08:26

(参考野火、正点原子教程)

CAN物理层分类:

1. 闭环总线网络

 闭环总线CAN通讯网络是一种遵循 ISO11898标准的高速、短距离“闭环网络”,它的总线最大长度为 40m,通信速度最高为 1Mbps,总线的两端各要求有一个“120 欧”的电阻,如下图所示。

通讯协议(CAN)

 2. 开环总线网络

开环总线CAN是遵循 ISO11519-2 标准的低速、远距离“开环网络”,它的最大传输距离为 1km,最高通讯速率为 125kbps,两根总线是独立的、不形成闭环,要求每根总线上各串联有一个“2.2 千欧”的电阻,如下图所示。

通讯协议(CAN)

 以下以CAN闭环网络进行分析:

通讯协议(CAN)

 从上图特性可以看出,显性电平对应逻辑 0,CAN_H 和 CAN_L 之差为 2.5V 左右。而隐性电平对应逻辑 1,CAN_H 和 CAN_L 之差为 0V。在总线上显性电平具有优先权,只要有一个单元输出显性电平,总线上即为显性电平。而隐形电平则具有包容的意味,只有所有的单元都输出隐性电平,总线上才为隐性电平(显性电平比隐性电平更强)。另外,在 CAN 总线的起止端都有一个 120Ω的终端电阻,来做阻抗匹配,以减少回波反射。

CAN 协议是通过以下 5 种类型的帧进行的:
  数据帧
  遥控帧
  错误帧
  过载帧
  间隔帧

另外,数据帧和遥控帧有标准格式和扩展格式两种格式。标准格式有 11 个位的标识符(ID),扩展格式有 29 个位的 ID。各种帧的用途如下表所示:

通讯协议(CAN)

 以下对数据帧进行详细介绍,数据帧一般由 7 个段构成,即:
(1) 帧起始:表示数据帧开始的段;
(2) 仲裁段:表示该帧优先级的段;
(3) 控制段:表示数据的字节数及保留位的段;
(4) 数据段:数据的内容,一帧可发送 0~8 个字节的数据;
(5) CRC 段:检查帧的传输错误的段;
(6) ACK 段:表示确认正常接收的段;
(7) 帧结束:表示数据帧结束的段。

通讯协议(CAN)

帧起始:这个比较简单,标准帧和扩展帧都是由 1 个位的显性电平表示帧起始。
仲裁段:表示数据优先级的段,标准帧和扩展帧格式在本段有所区别,如图 34.1.3 所示:

通讯协议(CAN)

标准格式的 ID 有 11 个位。从 ID28 到 ID18 被依次发送。禁止高 7 位都为隐性(禁止设定:ID=1111111XXXX)。

扩展格式的 ID 有 29 个位。基本 ID 从 ID28 到 ID18,扩展 ID 由ID17 到 ID0 表示。基本 ID 和标准格式的 ID 相同。禁止高 7 位都为隐性(禁止设定:基本ID=1111111XXXX)。

其中 RTR 位用于标识是否是远程帧(即遥控帧)(0,数据帧;1,远程帧),IDE 位为标识符选择位(0,使用标准标识符;1,使用扩展标识符),SRR 位为代替远程请求位,为隐性位,它代替了标准帧中的 RTR 位。

控制段:由 6 个位构成,表示数据段的字节数。标准帧和扩展帧的控制段稍有不同,如图34.1.4 所示:

通讯协议(CAN)

上图中,r0 和 r1 为保留位,必须全部以显性电平发送,但是接收端可以接收显性、隐性及任意组合的电平。DLC 段为数据长度表示段,高位在前,DLC 段有效值为 0~8,但是接收方接收到 9~15 的时候并不认为是错误。 

数据段:该段可包含 0~8 个字节的数据。从最高位(MSB)开始输出,标准帧和扩展帧在这个段的定义都是一样的。如图 34.1.5 所示:

通讯协议(CAN)

 CRC 段:该段用于检查帧传输错误。由 15 个位的 CRC 顺序和 1 个位的 CRC 界定符(用于分隔的位)组成,标准帧和扩展帧在这个段的格式也是相同的。如图 34.1.6 所示:

通讯协议(CAN)

此段 CRC 的值计算范围包括:帧起始、仲裁段、控制段、数据段。接收方以同样的算法计算 CRC 值并进行比较,不一致时会通报错误。

ACK 段:此段用来确认是否正常接收。由 ACK 槽(ACK Slot)和 ACK 界定符 2 个位组成。标准帧和扩展帧在这个段的格式也是相同的。如图 34.1.7 所示:

通讯协议(CAN)

发送单元的 ACK,发送 2 个位的隐性位,而接收到正确消息的单元在 ACK 槽(ACK Slot)发送显性位,通知发送单元正常接收结束,这个过程叫发送 ACK/返回 ACK。发送 ACK 的是在既不处于总线关闭态也不处于休眠态的所有接收单元中,接收到正常消息的单元(发送单元不发送 ACK)。所谓正常消息是指不含填充错误、格式错误、CRC 错误的消息。

帧结束:这个段也比较简单,标准帧和扩展帧在这个段格式一样,由 7 个位的隐性位组成。