着重介绍帧的五个种类、仲裁机制、错误的种类、位填充与位时序、同步方法;
帧的种类
通信通过 5 帧进行:数据帧、遥控帧、错误帧、过载帧、帧间隔;
数据帧和遥控帧有标准格式和扩展格式;
图 1. 帧的种类及用途
数据帧
数据帧由 7 个段构成:帧起始、仲裁段、 控制段、数据段、CRC 段、ACK 段、帧结束;
图 2. 数据帧的构成
帧起始(标准、扩展格式相同)
表示帧开始的段。1 个位的显性位。
图 3. 数据帧(帧起始)
仲裁段
表示数据的优先级的段。
标准格式和扩展格式在此的构成有所不同。
图 4. 数据帧(仲裁段)
【注】 *1 ID
标准格式的ID有11个位。从ID28到ID18 被依次发送。禁止高7位都为隐性。
(禁止设定:ID=1111111XXXX);
扩展格式的ID有29个位。基本ID从ID28到ID18,扩展ID由ID17到ID0表示。基本ID和
标准格式的ID相同。禁止高7位都为隐性。(禁止设定:基本 ID=1111111XXXX);
控制段
控制段由 6 个位构成,表示数据段的字节数。标准格式和扩展格式的构成有所不同;
图 5. 数据帧(控制段)
【注】 *1 保留位(r0、r1)
保留位必须全部以显性电平发送。但接收方可以接收显性、隐性及其任意组合的电平。
*2 数据长度码(DLC)
数据长度码与数据的字节数的对应关系如表 8 所示。
数据的字节数必须为 0~8 字节。但接收方对 DLC = 9~15 的情况并不视为错误。
图 6. 数据长度码和字节数的关系
数据段(标准、扩展格式相同)
数据段可包含 0~8 个字节的数据。从 MSB(最高位)开始输出。
图 7. 数据帧(数据段)
CRC 段(标准/扩展格式相同)
CRC 段是检查帧传输错误的帧。由 15 个位的 CRC 顺序*1 和 1 个位的 CRC 界定符(用于分隔的位)构成;
图 8. 数据帧(CRC 段)
【注】 *1 CRC 顺序
CRC 顺序是根据多项式生成的 CRC 值,CRC 的计算范围包括帧起始、仲裁段、控制段、数据段。
接收方以同样的算法计算 CRC 值并进行比较,不一致时会通报错误。
ACK 段
ACK 段用来确认是否正常接收。由 ACK 槽(ACK Slot)和 ACK 界定符 2 个位构成。
图 9. 数据帧(ACK 段)
【注】 *1 发送单元的 ACK 段
发送单元在 ACK 段发送 2 个位的隐性位。
*2 接收单元的 ACK 段
接收到正确消息的单元在 ACK 槽(ACK Slot)发送显性位,通知发送单元正常接收结束。这称作“发
送 ACK”或者“返回 ACK”。
帧结束
帧结束是表示该该帧的结束的段。由 7 个位的隐性位构成;
图 10. 数据帧(帧结束)
遥控帧
接收单元向发送单元请求发送数据所用的帧。遥控帧由 6 个段组成。遥控帧没有数据帧的数据段;
帧起始(SOF)、仲裁段、 控制段、CRC 段、ACK 段、帧结束
图 11. 遥控帧的构成
错误帧
用于在接收和发送消息时检测出错误通知错误的帧。错误帧由错误标志和错误界定符构成;
错误标志
错误标志包括主动错误标志和被动错误标志两种。
主动错误标志:6 个位的显性位。
被动错误标志:6 个位的隐性位。
错误界定符
错误界定符由 8 个位的隐性位构成。
图 12. 错误帧
【注】 *1 主动错误标志
处于主动错误状态的单元检测出错误时输出的错误标志。
*2 被动错误标志
处于被动错误状态的单元检测出错误时输出的错误标志。
过载帧
过载标志
6 个位的显性位;
过载标志的构成与主动错误标志的构成相同。
过载界定符
8 个位的隐性位;
过载界定符的构成与错误界定符的构成相同。
图 13. 过载帧的构成
帧间隔
-
帧间隔是用于分隔数据帧和遥控帧的帧;
-
数据帧和遥控帧可通过插入帧间隔将本帧与前面的任何帧(数据帧、遥控帧、错误帧、过载帧)分开;
-
过载帧和错误帧前不能插入帧间隔;
图 14. 帧间隔的构成
间隔
3 个位的隐性位。
总线空闲
隐性电平,无长度限制(0 亦可)。
本状态下,可视为总线空闲,要发送的单元可开始访问总线。
延迟传送(发送暂时停止)
8 个位的隐性位;
只在处于被动错误状态的单元刚发送一个消息后的帧间隔中包含的段。
优先级的决定
在总线空闲态,最先开始发送消息的单元获得发送权;
多个单元同时开始发送时,各发送单元从仲裁段的第一位开始进行仲裁。连续输出显性电平最多的单元可继
续发送;
图 15. 仲裁过程
1>数据帧和遥控帧的优先级
具有相同 ID 的数据帧和遥控帧在总线上竞争时,仲裁段的最后一位(RTR)为显性位的数据帧具有优先权,
可继续发送;
图 16. 数据帧和遥控帧的仲裁过程
2>标准格式和扩展格式的优先级
标准格式 ID 与具有相同 ID 的遥控帧或者扩展格式的数据帧在总线上竞争时,标准格式的 RTR 位为显性位
的具有优先权,可继续发送。
图 17. 标准格式与扩展格式的仲裁过程
位填充
位填充是为防止突发错误而设定的功能。当同样的电平持续 5 位时则添加一个位的反型数据;
图 18. 位填充
发送单元的工作
在发送数据帧和遥控帧时,SOF~CRC 段间的数据,相同电平如果持续 5 位,在下一个位(第 6 个位)则
要插入 1 位与前 5 位反型的电平。
接收单元的工作
在接收数据帧和遥控帧时,SOF~CRC 段间的数据,相同电平如果持续 5 位,需要删除下一个位(第 6 个
位)再接收。如果这个第 6 个位的电平与前 5 位相同,将被视为错误并发送错误帧。
错误的种类
错误共有 5 种。多种错误可能同时发生: 位错误、 填充错误、 CRC 错误、格式错误、ACK 错误
错误的种类、错误的内容、错误检测帧和检测单元如图 19 所示:
图 19. 错误的种类
位错误
-
位错误由向总线上输出数据帧、遥控帧、错误帧、过载帧的单元和输出 ACK 的单元、输出错误的单元来
检测;
-
在仲裁段输出隐性电平,但检测出显性电平时,将被视为仲裁失利,而不是位错误;
-
在仲裁段作为填充位输出隐性电平时,但检测出显性电平时,将不视为位错误,而是填充错误。
-
发送单元在 ACK 段输出隐性电平,但检测到显性电平时,将被判断为其它单元的 ACK 应答,而非位错
误;
- 输出被动错误标志(6 个位隐性位)但检测出显性电平时,将遵从错误标志的结束条件,等待检测出连
续相同 6 个位的值(显性或隐性),并不视为位错误。
格式错误
- 即使接收单元检测出 EOF(7 个位的隐性位)的最后一位(第 8 个位)为显性电平,也不视为格式错误。
- 即使接收单元检测出数据长度码(DLC)中 9∼15 的值时,也不视为格式错误。
错误帧的输出
-
检测出满足错误条件的单元输出错误标志通报错误;
-
处于主动错误状态的单元,输出的错误标志为主动错误标志;
处于被动错误状态的单元输出的错误标志为被动错误标志。
-
发送单元发送完错误帧后,将再次发送数据帧或遥控帧;
图 20. 错误标志输出时序
位时序
-
由发送单元在非同步的情况下发送的每秒钟的位数称为位速率;
-
一个位可分为 4 段:同步段(SS)、传播时间段(PTS)、相位缓冲段 1(PBS1)、相位缓冲段 2(PBS2);
-
段又由可称为 Time Quantum(以下称为 Tq)的最小时间单位构成;
-
1 位分为 4 个段,每个段又由若干个 Tq 构成,这称为位时序;
定义
位由多少个 Tq 构成、每个段又由多少个 Tq 构成等,可以任意设定位时序。通过设定位时序,多个单元可同时采样,也可任意设定采样点;
各段的作用和 Tq 数如图 21 所示,1 个位的构成如图 22 所示。
图 21. 段及其作用
图 22. 1 个位的构成
【注】 *1 采样点
所谓采样点是读取总线电平,并将读到的电平作为位值的点。位置在 PBS1 结束处。
取得同步的方法
-
CAN 协议的通信方法为 NRZ(Non-Return to Zero)方式;
-
各个位的开头或者结尾都没有附加同步信号,发送单元以与位时序同步的方式开始发送数据;
-
另外,接收单元根据总线上电平的变化进行同步并进行接收工作;
但是,发送单元和接收单元存在的时钟频率误差及传输路径上的(电缆、驱动器等)相位延迟会引起同步偏差;
因此接收单元通过硬件同步或者再同步的方法调整时序进行接收。
硬件同步
-
接收单元在总线空闲状态检测出帧起始时进行的同步调整;
-
在检测出边沿的地方不考虑 SJW 的值而认为是 SS 段;
硬件同步的过程如图 23 所示:
图 23. 硬件同步
再同步
-
在接收过程中检测出总线上的电平变化时进行的同步调整;
-
每当检测出边沿时,根据 SJW 值通过加长 PBS1 段,或缩短 PBS2 段,以调整同步;
-
但如果发生了超出 SJW值的误差时,最大调整量不能超过 SJW 值;
再同步如图 24 所示:
图 24. 再同步
调整同步的规则
硬件同步和再同步遵从如下规则:
(1) 1 个位中只进行一次同步调整。
(2) 只有当上次采样点的总线值和边沿后的总线值不同时,该边沿才能用于调整同步。
(3) 在总线空闲且存在隐性电平到显性电平的边沿时,则一定要进行硬件同步。
(4) 在总线非空闲时检测到的隐性电平到显性电平的边沿如果满足条件(1)和(2),将进行再同步。但还要满足下面条件。
(5) 发送单元观测到自身输出的显性电平有延迟时不进行再同步。
(6) 发送单元在帧起始到仲裁段有多个单元同时发送的情况下,对延迟边沿不进行再同步。