面对初学者的CAN总线入门教程(三)_CAN通信中帧、优先级、位填充、错误、位时序以及同步的介绍

1. 数据链路层中的帧

通信是通过以下五种类型的帧进行的。其中,数据帧和遥控帧有标准格式和扩展格式两种格式。 标准格式有 11 个位的标识符(Identifier: 以下称 ID) ,扩展格式有 29 个位的 ID。
下面配有各个帧的构成图片,图中D表示显性电平,R表示隐形电平。

  • 数据帧
    在这里插入图片描述

  • 遥控帧
    在这里插入图片描述

  • 错误帧
    在这里插入图片描述

  • 过载帧
    在这里插入图片描述

  • 帧间隔
    在这里插入图片描述

下图为各种帧的用途。
在这里插入图片描述
接下来对各种帧分别进行介绍。

1.1 数据帧

数据帧由 7 个段构成。
数据帧的构成如下图所示。
在这里插入图片描述

  1. 帧起始
    表示数据帧开始的段。
  2. 仲裁段
    表示该帧优先级的段。
  3. 控制段
    表示数据的字节数及保留位的段。
  4. 数据段
    数据的内容,可发送 0~8 个字节的数据。
  5. CRC 段
    检查帧的传输错误的段。
  6. ACK 段
    表示确认正常接收的段。
  7. 帧结束
    表示数据帧结束的段。

下面对帧的构成进行说明。

扫描二维码关注公众号,回复: 12225764 查看本文章

1.1.1 帧起始(标准、扩展格式相同)

表示帧开始的段。 1 个位的显性位。
在这里插入图片描述

显性电平和隐性电平

总线上的电平有显性电平和隐性电平两种。
总线上执行逻辑上的线“与”时,显性电平的逻辑值为“0”,隐性电平为“1”。
“显性”具有“优先”的意味,只要有一个单元输出显性电平,总线上即为显性电平。并且,“隐性”具有“包容”的意味,只有所有的单元都输出隐性电平,总线上才为隐性电平。(显性电平比隐性电平更强。)

1.1.2 仲裁段

表示数据的优先级的段。
标准格式和扩展格式在此的构成有所不同。
在这里插入图片描述
在这里插入图片描述
其中 RTR 位用于标识是否是遥控帧(0,数据帧; 1,遥控帧), IDE 位为标识符选择位(0,使用标准标识符; 1,使用扩展标识符), SRR 位为代替远程请求位,为隐性位,它代替了标准帧中的 RTR 位。

1.1.3 控制段

控制段由 6 个位构成,表示数据段的字节数。
标准格式和扩展格式的构成有所不同。
在这里插入图片描述
在这里插入图片描述

下表为数据长度码和字节数的关系。
在这里插入图片描述

1.1.4 数据段(标准、扩展格式相同)

数据段可包含 0~8 个字节的数据。从 MSB(最高位)开始输出。
在这里插入图片描述

1.1.5 CRC 段(标准/扩展格式相同)

CRC 段是检查帧传输错误的帧。由 15 个位的 CRC 顺序和 1 个位的 CRC 界定符(用于分隔的位)构成。
在这里插入图片描述
在这里插入图片描述

1.1.6 ACK 段(标准/扩展格式相同)

ACK 段用来确认是否正常接收。由 ACK 槽(ACK Slot)和 ACK 界定符 2 个位构成。
在这里插入图片描述
在这里插入图片描述

发送ACK

发送 ACK 的是在既不处于总线关闭态也不处于休眠态的所有接收单元中,接收到正常消息的单元(发送单元不发送 ACK)。所谓正常消息是指不含填充错误、格式错误、 CRC 错误的消息。

1.1.7 帧结束(标准/扩展格式相同)

帧结束是表示该该帧的结束的段。由 7 个位的隐性位构成。
在这里插入图片描述

1.2 遥控帧

接收单元向发送单元请求发送数据所用的帧。遥控帧由 6 个段组成。遥控帧没有数据帧的数据段。
遥控帧的构成如下图所示。
在这里插入图片描述

1.2.1 遥控帧和数据帧的不同

  1. 遥控帧的 RTR 位为隐性位,没有数据段。
  2. 没有数据段的数据帧和遥控帧可通过 RTR 位区别开来。

1.2.2 遥控帧没有数据段,数据长度码该如何表示?

遥控帧的数据长度码以所请求数据帧的数据长度码表示。

1.2.3 没有数据段的数据帧有何用途?

例如,可用于各单元的定期连接确认/应答、或仲裁段本身带有实质性信息的情况下。

1.3 错误帧

用于在接收和发送消息时检测出错误通知错误的帧。错误帧由错误标志和错误界定符构成。
错误帧的构成如下图所示。
在这里插入图片描述
在这里插入图片描述

  • 错误标志
    错误标志包括主动错误标志和被动错误标志两种。
  1. 主动错误标志: 6 个位的显性位。
  2. 被动错误标志: 6 个位的隐性位。
  • 错误界定符
    错误界定符由 8 个位的隐性位构成。

1.4 过载帧

过载帧是用于接收单元通知其尚未完成接收准备的帧。过载帧由过载标志和过载界定符构成。
过载帧的构成如下图所示。
在这里插入图片描述

  • 过载标志
    6 个位的显性位。
    过载标志的构成与主动错误标志的构成相同。
  • 过载界定符
    8 个位的隐性位。
    过载界定符的构成与错误界定符的构成相同。

1.5 帧间隔

帧间隔是用于分隔数据帧和遥控帧的帧。数据帧和遥控帧可通过插入帧间隔将本帧与前面的任何帧(数据帧、遥控帧、错误帧、过载帧)分开。
过载帧和错误帧前不能插入帧间隔。
帧间隔的构成如下图所示。
在这里插入图片描述

  • 间隔
    3 个位的隐性位。
  • 总线空闲
    隐性电平,无长度限制(0 亦可)。
    本状态下,可视为总线空闲,要发送的单元可开始访问总线。
  • 延迟传送(发送暂时停止)
    8 个位的隐性位。
    只在处于被动错误状态的单元刚发送一个消息后的帧间隔中包含的段。

2. 优先级的确定

在总线空闲态,最先开始发送消息的单元获得发送权。
多个单元同时开始发送时,各发送单元从仲裁段的第一位开始进行仲裁。连续输出显性电平最多的单元可继续发送。
仲裁的过程如下图所示。
在这里插入图片描述

2.1 数据帧和遥控帧的优先级

具有相同 ID 的数据帧和遥控帧在总线上竞争时, 仲裁段的最后一位(RTR) 为显性位的数据帧具有优先权,可继续发送。
数据帧和遥控帧的仲裁过程如下图所示。
在这里插入图片描述

2.2 标准格式和扩展格式的优先级

标准格式 ID 与具有相同 ID 的遥控帧或者扩展格式的数据帧在总线上竞争时,标准格式的 RTR 位为显性位的具有优先权,可继续发送。
标准格式和扩展格式的仲裁过程如下图所示。
在这里插入图片描述

3. 位填充

位填充是为防止突发错误而设定的功能。当同样的电平持续 5 位时则添加一个位的反型数据。
位填充的构成如下图所示。
在这里插入图片描述

  • 发送单元的工作
    在发送数据帧和遥控帧时, SOF~CRC 段间的数据,相同电平如果持续 5 位,在下一个位(第 6 个位)则要插入 1 位与前 5 位反型的电平。
  • 接收单元的工作
    在接收数据帧和遥控帧时, SOF~CRC 段间的数据,相同电平如果持续 5 位,需要删除下一个位(第 6 个位)再接收。如果这个第 6 个位的电平与前 5 位相同,将被视为错误并发送错误帧。

4. 错误

4.1 错误的种类

错误共有 5 种。多种错误可能同时发生。

  • 位错误
  • 填充错误
  • CRC 错误
  • 格式错误
  • ACK 错误

错误的种类、错误的内容、错误检测帧和检测单元如下表所示。
在这里插入图片描述

4.1.1 位错误

  • 位错误由向总线上输出数据帧、遥控帧、错误帧、过载帧的单元和输出 ACK 的单元、输出错误的单元来检测。
  • 在仲裁段输出隐性电平,但检测出显性电平时,将被视为仲裁失利,而不是位错误。
  • 在仲裁段作为填充位输出隐性电平时,但检测出显性电平时,将不视为位错误,而是填充错误。
  • 发送单元在 ACK 段输出隐性电平,但检测到显性电平时,将被判断为其它单元的 ACK 应答,而非位错误。
  • 输出被动错误标志( 6 个位隐性位)但检测出显性电平时,将遵从错误标志的结束条件,等待检测出连续相同 6 个位的值(显性或隐性),并不视为位错误。

4.1.2 格式错误

  • 即使接收单元检测出 EOF( 7 个位的隐性位)的最后一位(第 8 个位)为显性电平,也不视为格式错误。
  • 即使接收单元检测出数据长度码( DLC)中 9∼15 的值时,也不视为格式错误。

4.2 错误帧的输出

检测出满足错误条件的单元输出错误标志通报错误。
处于主动错误状态的单元输出的错误标志为主动错误标志;处于被动错误状态的单元输出的错误标志为被动错误标志。
发送单元发送完错误帧后,将再次发送数据帧或遥控帧。
错误标志输出时序如下表所示。
在这里插入图片描述

5. 位时序

由发送单元在非同步的情况下发送的每秒钟的位数称为位速率。一个位可分为 4 段。

  • 同步段( SS)
  • 传播时间段( PTS)
  • 相位缓冲段 1( PBS1)
  • 相位缓冲段 2( PBS2)

这些段又由可称为 Time Quantum(以下称为 Tq)的最小时间单位构成。
1 位分为 4 个段,每个段又由若干个 Tq 构成,这称为位时序。
1 位由多少个 Tq 构成、每个段又由多少个 Tq 构成等,可以任意设定位时序。通过设定位时序,多个单元可同时采样,也可任意设定采样点。
各段的作用和 Tq 数如下表所示。
在这里插入图片描述

1 个位的构成如下图所示。
在这里插入图片描述
在这里插入图片描述

根据这个位时序,我们就可以计算 CAN 通信的波特率了。

6. 同步

6.1 取得同步的方法

CAN 协议的通信方法为 NRZ(Non-Return to Zero)方式。各个位的开头或者结尾都没有附加同步信号。发送单元以与位时序同步的方式开始发送数据。另外,接收单元根据总线上电平的变化进行同步并进行接收工作。
但是,发送单元和接收单元存在的时钟频率误差及传输路径上的(电缆、驱动器等)相位延迟会引起同步偏差。因此接收单元通过硬件同步或者再同步的方法调整时序进行接收。

6.1.1 硬件同步

接收单元在总线空闲状态检测出帧起始时进行的同步调整。
在检测出边沿的地方不考虑 SJW 的值而认为是 SS 段。
硬件同步的过程如下图所示。
在这里插入图片描述

6.1.2 再同步

在接收过程中检测出总线上的电平变化时进行的同步调整。
每当检测出边沿时,根据 SJW 值通过加长 PBS1 段,或缩短 PBS2 段,以调整同步。但如果发生了超出 SJW值的误差时,最大调整量不能超过 SJW 值。
再同步如下图所示。
在这里插入图片描述

6.2 调整同步的规则

硬件同步和再同步遵从如下规则。

  1. 1 个位中只进行一次同步调整。
  2. 只有当上次采样点的总线值和边沿后的总线值不同时,该边沿才能用于调整同步。
  3. 在总线空闲且存在隐性电平到显性电平的边沿时,则一定要进行硬件同步。
  4. 在总线非空闲时检测到的隐性电平到显性电平的边沿如果满足条件1和条件2,将进行再同步。但还要满足下面条件。
    1. 发送单元观测到自身输出的显性电平有延迟时不进行再同步。
    2. 发送单元在帧起始到仲裁段有多个单元同时发送的情况下,对延迟边沿不进行再同步。

猜你喜欢

转载自blog.csdn.net/mahoon411/article/details/109779325
今日推荐