CAN总线基础知识

最近在调试机器人控制器的CAN接口来实现和焊机进行通讯,之前对于CAN也没有深入的了解,所以花了一些时间来学习,现在我汇总了一下,方便以后查阅,同时也给想了解CAN相关知识的朋友们提供一个参考。

1.CAN 协议的基本概念
 

CAN 协议如表 1 所示涵盖了 ISO 规定的 OSI*1 基本参照模型中的传输层、数据链路层及物理层。
CAN 协议中关于 ISO/OSI 基本参照模型中的传输层、数据链路层及物理层,具体有哪些定义如图 1 所示。


                                                                          表 1. ISO/OSI 基本参照模型

【注】 *1 OSI: Open Systems Interconnection (开放式系统间互联)

                                                         图 1. ISO/OSI 基本参照模型和 CAN 协议

【注】 *1 LLC : Logical Link Control (逻辑链路控制)
            *2 MAC : Medium Access Control (媒介访问控制)

数据链路层分为 MAC 子层和 LLC 子层, MAC 子层是 CAN 协议的核心部分。数据链路层的功能是将物理层
收到的信号组织成有意义的消息,并提供传送错误控制等传输控制的流程。具体地说,就是消息的帧化、仲裁、
应答、错误的检测或报告。数据链路层的功能通常在 CAN 控制器的硬件中执行。
在物理层定义了信号实际的发送方式、位时序、位的编码方式及同步的步骤。但具体地说,信号电平、通信
速度、采样点、驱动器和总线的电气特性、连接器的形态等均未定义*1。这些必须由用户根据系统需求自行确定。

 

2.CAN 协议标准规格

CAN 协议经 ISO 标准化后有 ISO11898 标准和 ISO11519-2 标准两种。 ISO11898 和 ISO11519-2 标准对于数据
链路层的定义相同,但物理层不同。


ISO11898 是通信速度为 125kbps-1Mbps 的 CAN 高速通信标准。
ISO11519 是通信速度为 125kbps 以下的 CAN 低速通信标准。


 图 2 表示 CAN 协议和 ISO11898 及 ISO11519-2 标准的范围。

                                                        图 2. ISO 标准化的 CAN 协议

在物理层, ISO11898 和 ISO11519-2 的主要不同点如表 2 所示:

                                                 表 2. ISO11898 和 11519-2 物理层的主要不同点
【注】 *1 通信速度
                通信速度根据系统设定。
            *2 总线长度
                总线的长度根据系统设定。
                通信速度和最大总线长度的关系如图 3 所示。

                                                                    图 3. 通信速度和最大总线长度

            *3 总线拓扑
                CAN 收发器根据两根总线( CAN_High 和 CAN_Low)的电位差来判断总线电平。
                总线电平分为显性电平和隐性电平两种。 总线必须处于两种电平之一。 总线上执行逻辑上的线“与”时,
                显性电平为“0”,隐性电平为“1”。物理层的特征如图 4 所示。

                                                                      图 4. ISO11898、 ISO11519-2 的物理层特征

针对图4,做进一步说明:

当CAN_H和CAN_L电平很接近甚至相等的时候,总线表现为隐性;当CAN_H和CAN_L电平差异较大时,表现为显性。下面将差分信号和显隐性之间的对应关系总结如下:

状态

逻辑信号

电压范围

显性Dominant

0

CAN_H-CAN_L > 0.9

隐性recessive

1

CAN_H-CAN_L < 0.5

 CAN_H和CAN_L两个信号电平和逻辑电平之间的转换由CAN收发器来完成:

CAN控制芯片输出逻辑电平到CAN收发器,然后经过CAN收发器内部转换将逻辑电平转换为差分信号输出到CAN总线上。

具体的管脚定义如下:

3.CAN 协议详解

3.1帧的种类

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

另外, 数据帧和遥控帧有标准格式和扩展格式两种格式。 标准格式有 11 个位的标识符(Identifier: 以下称 ID) ,
扩展格式有 29 个位的 ID。
各种帧的用途如表 3 所示,各种帧的构成如图 5~图 9 所示。注:“D”:显性电平 “R”:隐性电平

 


                                                       表 3. 帧的种类及用途

 


                                                                            图 5. 数据帧的构成

 


                                                                           图 6. 遥控帧的构成

 


                                                                           图 7. 错误帧

 


                                                                                 图 8. 过载帧

 


 

                                                                                   图 9. 帧间隔

3.2数据帧

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


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


                                                                              图 10. 数据帧的构成

(1) 帧起始(标准、扩展格式相同)
表示帧开始的段。 1 个位的显性位

 

 (2) 仲裁段

表示数据的优先级的段。
标准格式和扩展格式在此的构成有所不同。
 

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

 

(3) 控制段
控制段由 6 个位构成,表示数据段的字节数。标准格式和扩展格式的构成有所不同。



 【注】 *1 保留位( r0、 r1)
              保留位必须全部以显性电平发送。但接收方可以接收显性、隐性及其任意组合的电平。
             *2 数据长度码( DLC)
              数据长度码与数据的字节数的对应关系如表 8 所示。
              数据的字节数必须为 0~8 字节。但接收方对 DLC = 9~15 的情况并不视为错误。
 

                                                                                   数据长度码和字节数的关系

 

(4) 数据段(标准、扩展格式相同)
数据段可包含 0~8 个字节的数据。从 MSB(最高位)开始输出。
 

 

(5) CRC 段(标准/扩展格式相同)
CRC 段是检查帧传输错误的帧。由 15 个位的 CRC 顺序*1 和 1 个位的 CRC 界定符(用于分隔的位)构成。
 

 【注】 *1 CRC 顺序
               CRC 顺序是根据多项式生成的 CRC 值, CRC 的计算范围包括帧起始、仲裁段、控制段、数据段。
               接收方以同样的算法计算 CRC 值并进行比较,不一致时会通报错误。
 

(6) ACK 段
ACK 段用来确认是否正常接收。由 ACK 槽(ACK Slot)和 ACK 界定符 2 个位构成。
 

【注】 *1 发送单元的 ACK 段
             发送单元在 ACK 段发送 2 个位的隐性位。
            *2 接收单元的 ACK 段
             接收到正确消息的单元在 ACK 槽(ACK Slot)发送显性位, 通知发送单元正常接收结束。 这称作“发
             送 ACK”或者“返回 ACK”。

 

(7) 帧结束
帧结束是表示该该帧的结束的段。由 7 个位的隐性位构成。
 

 

3.3遥控帧

接收单元向发送单元请求发送数据所用的帧。遥控帧由 6 个段组成。遥控帧没有数据帧的数据段。
 

• 数据帧和遥控帧的不同:
遥控帧的 RTR 位为隐性位,没有数据段。
没有数据段的数据帧和遥控帧可通过 RTR 位区别开来。

 

3.4错误帧

用于在接收和发送消息时检测出错误通知错误的帧。错误帧由错误标志和错误界定符构成。
(1) 错误标志
错误标志包括主动错误标志和被动错误标志两种。
主动错误标志: 6 个位的显性位。
被动错误标志: 6 个位的隐性位

(2) 错误界定符
错误界定符由 8 个位的隐性位构成。
 

 

3.5过载帧

过载帧是用于接收单元通知其尚未完成接收准备的帧。过载帧由过载标志和过载界定符构成。
(1) 过载标志
6 个位的显性位。
过载标志的构成与主动错误标志的构成相同。
(2) 过载界定符
8 个位的隐性位。
过载界定符的构成与错误界定符的构成相同。


 

 

3.6帧间隔

帧间隔是用于分隔数据帧和遥控帧的帧。数据帧和遥控帧可通过插入帧间隔将本帧与前面的任何帧(数据帧、
遥控帧、错误帧、过载帧)分开。
过载帧和错误帧前不能插入帧间隔。
 

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


3.7优先级的判断

1.在总线空闲态,最先开始发送消息的单元获得发送权。
2.多个单元同时开始发送时,各发送单元从仲裁段的第一位开始进行仲裁。连续输出显性电平最多的单元可继
续发送。(帧ID越小,优先级越高)
 

 

(1) 数据帧和遥控帧的优先级
具有相同 ID 的数据帧和遥控帧在总线上竞争时, 仲裁段的最后一位(RTR) 为显性位的数据帧具有优先权,
可继续发送。

 

(2) 标准格式和扩展格式的优先级
标准格式 ID 与具有相同 ID 的遥控帧或者扩展格式的数据帧在总线上竞争时,标准格式的 RTR 位为显性位
的具有优先权,可继续发送。
 

 

3.8位填充

位填充是为防止突发错误而设定的功能。当同样的电平持续 5 位时则添加一个位的反型数据。


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

实际应用波形:(来自逻辑分析仪的采样,信号为CAN_H)

图中打了红色×的就是填充位 。

 

3.9错误

1.错误状态的种类

单元始终处于 3 种状态之一:
(1) 主动错误状态
主动错误状态是可以正常参加总线通信的状态。
处于主动错误状态的单元检测出错误时,输出主动错误标志。
(2) 被动错误状态
被动错误状态是易引起错误的状态。
处于被动错误状态的单元虽能参加总线通信,但为不妨碍其它单元通信,接收时不能积极地发送错误通知。
处于被动错误状态的单元即使检测出错误,而其它处于主动错误状态的单元如果没发现错误,整个总线也被
认为是没有错误的。
处于被动错误状态的单元检测出错误时,输出被动错误标志。
另外,处于被动错误状态的单元在发送结束后不能马上再次开始发送。在开始下次发送前,在间隔帧期间内
必须插入“延迟传送”(8 个位的隐性位)。
(3) 总线关闭态
总线关闭态是不能参加总线上通信的状态。
信息的接收和发送均被禁止。
这些状态依靠发送错误计数和接收错误计数来管理,根据计数值决定进入何种状态。
 

                                                                                         错误状态和计数值

                                                                                         单元的错误状态
 

2.错误计数值

发送错误计数值和接收错误计数值根据一定的条件发生变化。
一次数据的接收和发送可能同时满足多个条件。
错误计数器在错误标志的第一个位出现的时间点上开始计数
 

                                                                                         错误计数值的变动条件
 

3.10错误的种类

错误共有 5 种。多种错误可能同时发生。
• 位错误
• 填充错误
• CRC 错误
• 格式错误
• ACK 错误
错误的种类、错误的内容、错误检测帧和检测单元如表 4 所示。
 

                                                                                表 4. 错误的种类

(1) 位错误
位错误由向总线上输出数据帧、遥控帧、错误帧、过载帧的单元和输出 ACK 的单元、输出错误的单元来
检测。
在仲裁段输出隐性电平,但检测出显性电平时,将被视为仲裁失利,而不是位错误。
在仲裁段作为填充位输出隐性电平时,但检测出显性电平时,将不视为位错误,而是填充错误。
发送单元在 ACK 段输出隐性电平,但检测到显性电平时,将被判断为其它单元的 ACK 应答,而非位错
误。
输出被动错误标志( 6 个位隐性位)但检测出显性电平时,将遵从错误标志的结束条件,等待检测出连
续相同 6 个位的值(显性或隐性),并不视为位错误。
(2) 格式错误
即使接收单元检测出 EOF( 7 个位的隐性位)的最后一位(第 8 个位)为显性电平,也不视为格式错误。
即使接收单元检测出数据长度码( DLC)中 9∼15 的值时,也不视为格式错误。

 

3.11错误帧的输出

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

                                                                                 表 5. 错误标志输出时序

3.12位时序

由发送单元在非同步的情况下发送的每秒钟的位数称为位速率。一个位可分为 4 段。
• 同步段( SS)
• 传播时间段( PTS)
• 相位缓冲段 1( PBS1)
• 相位缓冲段 2( PBS2)
这些段又由可称为 Time Quantum(以下称为 Tq)的最小时间单位构成。
1 位分为 4 个段,每个段又由若干个 Tq 构成,这称为位时序。
1 位由多少个 Tq 构成、每个段又由多少个 Tq 构成等,可以任意设定位时序。通过设定位时序,多个单元可
同时采样,也可任意设定采样点。
各段的作用和 Tq 数如表 6所示。 1 个位的构成如图 11 所示。

 

                                                                                          表 6. 段及其作用

 

                                                                                   图 11. 1 个位的构成
【注】 *1 采样点
              所谓采样点是读取总线电平,并将读到的电平作为位值的点。位置在 PBS1 结束处。

 

3.13同步

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

1.硬件同步

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

                                                                                     图 12. 硬件同步

 

2.再同步


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

                                                                                        图 13. 再同步

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







 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值