type
date
slug
category
icon
password
重要概念1. CAN 是什么?1.1 CAN 通信分类1.2 总线拓扑图2. CAN 的特点3. CAN 协议的基本概念4. CAN 协议及标准规格4.1 ISO 标准化的 CAN 协议4.2 ISO11898 和 ISO11519-2 的不同点4.3 CAN 和标准规格5. CAN 协议5.1 帧类型5.2 数据帧5.2.1 帧起始5.2.2 仲裁段5.2.3 控制段5.2.4 数据段(标准、扩展格式相同)5.2.5 CRC 段(标准/扩展格式相同)5.2.6 ACK 段5.2.7 帧结束5.3 遥控帧5.4 错误帧5.5 过载帧5.6 帧间隔5.7 优先级的决定5.8 位填充5.9 错误种类5.10 错误处理5.11 位时序5.12 取得同步的方法5.13 硬件同步5.14 再同步5.15 调整同步的规则6. 发送过程引用
CAN是Controller Area Network 的缩写(以下称为CAN),是 ISO 国际标准化的串行通信协议。由德国电气商博世公司在1986 年率先提出。此后,CAN 通过
ISO11898
及ISO11519
进行了标准化。现在在欧洲已是汽车网络的标准协议。CAN协议经过ISO标准化后有两个标准:
ISO11898
标准:ISO11898
是针对通信速率为 125 Kbps~1 Mbps 的高速通信标准
ISO11519-2
标准:ISO11519-2
是针对通信速率为 125 Kbps以下的低速通信标准。
CAN具有很高的可靠性,广泛应用于:汽车电子、工业自动化、船舶、医疗设备、工业设备等方面。
重要概念
- 主动错误和被动错误
- 显性位和隐性位
- 总线上的电平有显性电平和隐性电平两种。总线上执行逻辑上的线“与”时,显性电平的逻辑值为“0”(CAN_H和CAN_L之差为2V左右),隐性电平为“1”(CAN_H和CAN_L之差为0V)。
- “显性”具有“优先”的意味,只要有一个单元输出显性电平,总线上即为显性电平。
- 并且,“隐性”具有“包容”的意味,只有所有的单元都输出隐性电平,总线上才为隐性电平。(显性电平比隐性电平更强。)

- 终端电阻:在CAN总线的起止端都有一个120Ω的终端电阻,来做阻抗匹配,以减少回波反射。

- 通讯速度和最大长度理论值,主要是经典 CAN,所有节点操作必须在一个 CAN速度下。
- 1Mbps, 40m
- 500Kbps, 100m
- 250Kbps, 200m
- 125Kbps, 500m
- 10Kbps, 6Km
1. CAN 是什么?
1.1 CAN 通信分类
面向汽车的通信协议以通信速度为准进行了分类。


1.2 总线拓扑图

2. CAN 的特点
CAN 协议具有一下特点:
- 多主控制。 在总线空闲时,所有单元都可以发送消息(多主控制),而两个以上的单元同时开始发送消息时,根据标识符(Identifier 以下称为 ID)决定优先级。 ID 并不是表示发送的目的地址,而是表示访问总线的消息的优先级。两个以上的单元同时开始发送消息时,对各消息 ID 的每个位进行逐个仲裁比较。仲裁获胜(被判定为优先级最高)的单元可继续发送消息,仲裁失利的单元则立刻停止发送而进行接收工作。
- 系统的柔软性。 与总线相连的单元没有类似于“地址”的信息。因此在总线上增加单元时,连接在总线上的其它单元的软硬件及应用层都不需要改变。
- 通信速度较快,通信距离远。 最高 1Mbps(距离小于 40 m),最远可达 10km(速率低于 5 Kbps)。
- 具有错误检测、错误通知和错误恢复功能。
- 所有单元都可以检测错误(错误检测功能);
- 检测出错误的单元会立即同时通知其他所有单元(错误通知功能);
- 正在发送消息的单元一旦检测出错误,会强制结束当前的发送。强制结束发送的单元会不断反复地重新发送此消息直到成功发送为止(错误恢复功能)。
- 故障封闭功能。 CAN 可以判断出错误的类型是总线上暂时的数据错误(如外部噪声等)还是持续的数据错误(如单元内部故障、驱动器故障、断线等)。由此功能,当总线上发生持续数据错误时,可将引起此故障的单元从总线上隔离出去。
- 连接节点多。 CAN 总线是可同时连接多个单元的总线。可连接的单元总数理论上是没有限制的。但实际上可连接的单元数受总线上的时间延迟及电气负载的限制。降低通信速度,可连接的单元数增加;提高通信速度,则可连接的单元数减少。
3. CAN 协议的基本概念
CAN 协议如表 3 所示涵盖了 ISO 规定的 OSI 基本参照模型中的传输层、数据链路层及物理层。

- LLC : Logical Link Control (逻辑链路控制)
- MAC : Medium Access Control (媒介访问控制)
数据链路层分为 MAC 子层和 LLC 子层, MAC 子层是 CAN 协议的核心部分。数据链路层的功能是将物理层收到的信号组织成有意义的消息,并提供传送错误控制等传输控制的流程。具体地说,就是消息的帧化、仲裁、应答、错误的检测或报告。数据链路层的功能通常在 CAN 控制器的硬件中执行。
4. CAN 协议及标准规格
4.1 ISO 标准化的 CAN 协议
CAN 协议经 ISO 标准化后有 ISO11898 标准和 ISO11519-2 标准两种。ISO11898 和 ISO11519-2 标准对于数据链路层的定义相同,但物理层不同。

4.2 ISO11898 和 ISO11519-2 的不同点
ISO11898 和 ISO11519-2 在物理层中的 PMA 层和 MDI 层有所不同。


ISO11898 与 ISO11519-2 的物理层的规格不同,每种规格需要有专门的驱动 IC 与之相对应。ISO11898 及ISO11519-2 所对应的主要的驱动 IC 如表 5 所示。

4.3 CAN 和标准规格
不仅是 ISO,SAE 等其它的组织、团体、企业也对 CAN 协议进行了标准化。

5. CAN 协议
5.1 帧类型
CAN 协议是通过以下 5 种类型的帧进行的:
- 数据帧:用于发送单元向接收单元传送数据的帧
- 遥控帧:用于接收单元向具有相同 ID 的发送单元请求数据的帧
- 错误帧:用于当检测出错时向其它单元通知错误的帧
- 过载帧:用于接收单元通知其尚未做好接收准备的帧
- 帧间隔:用于将数据帧及遥控帧与前面的帧分离开来的帧
5.2 数据帧
数据帧一般由 7 个段构成,即:

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

数据帧和遥控帧有标准格式和扩展格式两种格式。标准格式有
11
个位的标识符(ID),扩展格式有 29
个位的 ID。
5.2.1 帧起始
表示帧开始的段。 1 个位的显性位
5.2.2 仲裁段
仲裁段,表示数据优先级的段,标准帧和扩展帧格式在本段有所区别

- 标准格式的 ID 有 11 个位。从 ID28 到 ID18 被依次发送。禁止高 7 位都为隐性(禁止设定: ID=1111111XXXX,避免使用优先级最低的ID,以防止某些节点在总线上无法获得发送机会。);
- 扩展格式的 ID 有 29 个位。基本 ID 从 ID28 到 ID18,扩展 ID 由 ID17 到 ID0 表示。基本 ID 和标准格式的 ID 相同。禁止高 7 位都为隐性(禁止设定:基本 ID=1111111XXXX);
- RTR,远程请求位。0,数据帧;1, 远程帧;
- SRR,替代远程请求位。设置为1(隐性电平);
- IDE,标识符选择位。0,标准标识符;1,扩展标识符;
5.2.3 控制段
控制段由 6 个位构成,表示数据段的字节数。标准格式和扩展格式的构成有所不同。

- 保留位( r0、 r1):保留位必须全部以显性电平发送。但接收方可以接收显性、隐性及其任意组合的电平。
- 数据长度码( DLC):数据的字节数必须为 0~8 字节。但接收方对 DLC = 9~15 的情况并不视为错误。
5.2.4 数据段(标准、扩展格式相同)
数据段可包含 0~8 个字节的数据。从 MSB(最高位)开始输出。

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

CRC 顺序是根据多项式生成的 CRC 值, CRC 的计算范围包括帧起始、仲裁段、控制段、数据段。接收方以同样的算法计算 CRC 值并进行比较,不一致时会通报错误。
5.2.6 ACK 段
ACK 段用来确认是否正常接收。由 ACK 槽(ACK Slot)和 ACK 界定符 2 个位构成。

- 发送单元的 ACK 段:发送单元在 ACK 段发送 2 个位的隐性位;
- 接收单元的 ACK 段:接收到正确消息的单元在 ACK 槽(ACK Slot)发送显性位, 通知发送单元正常接收结束。 这称作“发送 ACK” 或者 “返回 ACK”。
5.2.7 帧结束
帧结束是表示该该帧的结束的段。由 7 个位的隐性位构成。

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

- 数据帧和遥控帧的不同
- 遥控帧的 RTR 位为隐性位,没有数据段。
- 没有数据段的数据帧和遥控帧可通过 RTR 位区别开来。
- 遥控帧没有数据段,数据长度码该如何表示?
- 遥控帧的数据长度码以所请求数据帧的数据长度码表示。
- 没有数据段的数据帧有何用途?
- 例如,可用于各单元的定期连接确认/应答、或仲裁段本身带有实质性信息的情况下。
5.4 错误帧
用于在接收和发送消息时检测出错误通知错误的帧。错误帧由错误标志和错误界定符构成。
- 错误标志:错误标志包括主动错误标志和被动错误标志两种。
- 主动错误标志: 6 个位的显性位。
- 被动错误标志: 6 个位的隐性位。
- 错误界定符:错误界定符由 8 个位的隐性位构成。

5.5 过载帧
过载帧是用于接收单元通知其尚未完成接收准备的帧。过载帧由过载标志和过载界定符构成。
过载帧的构成如下图所示。

- 过载标志
6 个位的显性位。
过载标志的构成与主动错误标志的构成相同。
- 过载界定符
8 个位的隐性位。
过载界定符的构成与错误界定符的构成相同。
5.6 帧间隔
帧间隔是用于分隔数据帧和遥控帧的帧。数据帧和遥控帧可通过插入帧间隔将本帧与前面的任何帧(数据帧、遥控帧、错误帧、过载帧)分开。过载帧和错误帧前不能插入帧间隔。
帧间隔的构成如下图所示。

- 间隔:3 个位的隐性位。
- 总线空闲
- 隐性电平,无长度限制(0 亦可)。
- 本状态下,可视为总线空闲,要发送的单元可开始访问总线。
- 延迟传送(发送暂时停止)
- 8 个位的隐性位。
- 只在处于被动错误状态的单元刚发送一个消息后的帧间隔中包含的段。
5.7 优先级的决定
规律1:在总线空闲态,最先开始发送消息的单元获得发送权。
规律2:多个单元同时开始发送时,各发送单元从仲裁段的第一位开始进行仲裁。连续输出显性电平最多的单元可继续发送。
仲裁的过程如下图所示。

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

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

5.8 位填充
在CAN总线接口协议中经常使用到位填充,位填充是为防止突发错误而设定的功能。

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

(1) 位错误
- 位错误由向总线上输出数据帧、遥控帧、错误帧、过载帧的单元和输出 ACK 的单元、输出错误的单元来检测。
- 在仲裁段输出隐性电平,但检测出显性电平时,将被视为仲裁失利,而不是位错误。
- 在仲裁段作为填充位输出隐性电平时,但检测出显性电平时,将不视为位错误,而是填充错误。
- 发送单元在 ACK 段输出隐性电平,但检测到显性电平时,将被判断为其它单元的 ACK 应答,而非位错误。
- 输出被动错误标志( 6 个位隐性位)但检测出显性电平时,将遵从错误标志的结束条件,等待检测出连续相同 6 个位的值(显性或隐性),并不视为位错误。
(2) 格式错误
- 即使接收单元检测出 EOF( 7 个位的隐性位)的最后一位(第 8 个位)为显性电平,也不视为格式错误。
- 即使接收单元检测出数据长度码( DLC)中 9∼15 的值时,也不视为格式错误。
5.10 错误处理
错误状态的种类有:主动错误状态,被动错误状态和总线关闭态3种状态。单元始终处于3种状态之一。
- 主动错误状态:可以正常参加总线通信的状态,处于主动错误状态的单元检测出错误时,输出主动错误标志。
- 被动错误状态:是易引起错误的状态。
- 处于被动错误状态的单元虽能参加总线通信,但为不妨碍其他单元通信,接收时不能积极地发送错误通知;
- 处于被动错误状态的单元即使检测出错误,而其它处于主动错误状态的单元如果没发现错误,整个总线也被认为是没有错误的。
- 处于被动错误状态的单元检测出错误时,输出被动错误标志。
- 处于被动错误状态的单元在不能马上再次开始发送。在开始下次发送前,在间隔帧期间内必须插入“延迟传送”(8个位的隐性位)。
- 总线关闭态是不能参加总线上通信的状态。信息的接收和发送均被禁止。
以上这些状态依靠
摘自 CAN入门书 表1 错误状态和计数值 
摘自 CAN入门书 图4 单元的错误状态
发送错误计数和接收错误计数
来管理,根据计数值
决定进入何种状态。错误状态和计数值的关系如下表:

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

1 个位的构成如图 32 所示。

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

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



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



引用
CANopenNode
CANopenNode • Updated Dec 31, 2024
- Author:felixfixit
- URL:http://www.felixmicrospace.top/article/port_can_intro
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!