嵌入式通信协议:CAN简明学习笔记

CAN学习笔记

概述

CAN不同于其他的通信协议,CAN 控制器根据两根线上的电位差来判断总线电平。总线电平分为显性电平和隐性电平,二者必居其一。发送方通过使总线电平发生变化,将消息发送给接收方。

在这里插入图片描述

CAN的特点

CAN协议具有以下特点:

·多主控制: 在总线空闲时,所有的单元都可开始发送消息。最先访问总线的单元可获得发送权。多个单元同时开始发送时,发送高优先级 ID 消息的单元可获得发送权。

·消息的发送: CAN 协议中,所有的消息都以固定的格式发送两个以上的单元同时开始发送消息时,根据标识符(Identifier 以下称为 ID)决定优先级。两个以上的单元同时开始发送消息时,对各消息 ID 的每个位进行逐个仲裁比较。仲裁获胜(被判定为优先级最高)的单元可继续发送消息,仲裁失利的单元则立刻停止发送而进行接收工作。

·系统的柔软性: CAN通信协议没有“地址”的概念,因此在总线上增加器件时,连接在总线上的其它器件的软硬
件及应用层都不需要改变。

·通信速度: 在同一网络,所有器件必须设定成统一的通信速度。

·远程数据请求: 可以通过发送“遥控帧”请求其他单元发送数据。

·错误检测/通知/恢复功能: 所有的单元都可以检测错误(错误检测功能)。检测出错误的单元会立即同时通知其他所有单元(错误通知功能)。正在发送消息的单元一旦检测出错误,会强制结束当前的发送。强制结束发送的单元会不断反复地重新发送此消息直到成功发送为止(错误恢复功能)。

·故障封闭: CAN 可以判断出错误的类型是总线上暂时的数据错误(如外部噪声等)还是持续的数据错误(如单元内部故障、驱动器故障、断线等)。由此功能,当总线上发生持续数据错误时,可将引起此故障的单元从总线上隔离出去。

·连接: CAN 总线是可同时连接多个单元的总线。可连接的单元总数理论上是没有限制的。但实际上可连接的单元
数受总线上的时间延迟及电气负载的限制。降低通信速度,可连接的单元数增加;提高通信速度,则可连接的单元数减少。

错误

错误状态的种类

(1)主动错误状态
主动错误状态是可以正常参加总线通信的状态,处于主动错误状态的单元检测出错误时,输出主动错误标志。

(2)被动错误状态

处于被动错误状态的单元虽能参加总线通信,但为不妨碍其它单元通信,接收时不能积极地发送错误通知。

处于被动错误状态的单元即使检测出错误,而其它处于主动错误状态的单元如果没发现错误,整个总线也被认为是没有错误的。处于被动错误状态的单元检测出错误时,输出被动错误标志。

另外,处于被动错误状态的单元在发送结束后不能马上再次开始发送。在开始下次发送前,在间隔帧期间内必须插入“延迟传送”(8 个位的隐性位)。

(3)总线关闭态

总线关闭态是不能参加总线上通信的状态。信息的接收和发送均被禁止。

这些状态依靠发送错误计数和接收错误计数来管理,根据计数值决定进入何种状态。错误状态和计数值的关系如图:

在这里插入图片描述

错误计数值

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

在这里插入图片描述

CAN协议

在这里插入图片描述

数据链路层分为 MAC 子层和 LLC 子层,MAC 子层是 CAN 协议的核心部分。
数据链路层的功能是将物理层收到的信号组织成有意义的消息,并提供传送错误控制等传输控制的流程。具体地说,就是消息的帧化、仲裁、应答、错误的检测或报告。
数据链路层的功能通常在 CAN 控制器的硬件中执行。

在物理层定义了信号实际的发送方式、位时序、位的编码方式及同步的步骤。但具体地说,信号电平、通信速度、采样点、驱动器和总线的电气特性、连接器的形态等均未定义。这些必须由用户根据系统需求自行确定。

CAN协议标准

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

(1)关于ISO11898
ISO11898 是通信速度为 125kbps-1Mbps 的 CAN 高速通信标准。目前,ISO11898 追加新规约后,成为 ISO11898-1 新标准。

(2)关于ISO11519
ISO11519 是通信速度为 125kbps 以下的 CAN 低速通信标准。ISO11519-2 是 ISO11519-1 追加新规约后的版本。

ISO11898 和 11519-2 物理层的主要不同点:

在这里插入图片描述

CAN 收发器根据两根总线(CAN_High 和 CAN_Low)的电位差来判断总线电平。总线电平分为显性电平和隐性电平两种。总线必须处于两种电平之一。总线上执行逻辑上的线“与”时,显性电平为“0”,隐性电平为“1”,“显性”具有“优先”的意味,只要有一个单元输出显性电平,总线上即为显性电平。并且,“隐性”具有“包容”的意味,只有所有的单元都输出隐性电平,总线上才为隐性电平。(显性电平比
隐性电平更强。)。

在这里插入图片描述

帧的种类

通信是通过以下 5 种类型的帧进行的,各种帧的用途如表 7所示。

在这里插入图片描述
os_id=img-8Z0VjpZW-1730358446949)

数据帧

数据帧由7个段构成。

在这里插入图片描述

(1)帧起始
表示数据帧开始的段。1 个位的显性位,即“0”。

(2) 仲裁段
表示该帧优先级的段。标准格式和扩展格式在此的构成有所不同。
在这里插入图片描述

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

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

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

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

(5) CRC 段
检查帧的传输错误的段。由 15 个位的 CRC 顺序 和 1 个位的 CRC 界定符(用于分隔的位)构成。CRC 的计算范围包括帧起始、仲裁段、控制段、数据段。
在这里插入图片描述

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

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

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

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

在这里插入图片描述

遥控帧

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

在这里插入图片描述

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

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

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

错误帧

用于在接收和发送消息时检测出错误通知错误的帧。错误帧由错误标志和错误界定符构成。

(1) 错误标志
错误标志包括主动错误标志和被动错误标志两种。
主动错误标志:6 个位的显性位
被动错误标志:6 个位的隐性位

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

在这里插入图片描述

过载帧

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

(1) 过载标志
6 个位的显性位。过载标志的构成与主动错误标志的构成相同。

(2) 过载界定符
8 个位的隐性位。过载界定符的构成与错误界定符的构成相同。
在这里插入图片描述

帧间隔

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

(1) 间隔
3 个位的隐性位。

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

在这里插入图片描述

优先级的决定

在总线空闲态,最先开始发送消息的单元获得发送权。
多个单元同时开始发送时,各发送单元从仲裁段的第一位开始进行仲裁。连续输出显性电平最多的单元可继续发送。

在这里插入图片描述

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

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

位填充

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

在这里插入图片描述

(1) 发送单元的工作
在发送数据帧和遥控帧时,SOF~CRC 段间的数据,相同电平如果持续 5 位,在下一个位(第 6 个位)则要插入 1 位与前 5 位反型的电平。

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

错误的类型

在这里插入图片描述

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

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

错误帧的输出

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

在这里插入图片描述

位时序

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

在这里插入图片描述

采样点
所谓采样点是读取总线电平,并将读到的电平作为位值的点。位置在 PBS1 结束处。

取得同步的方法
CAN 协议的通信方法为 NRZ(Non-Return to Zero)方式。各个位的开头或者结尾都没有附加同步信号。发送单元以与位时序同步的方式开始发送数据。另外,接收单元根据总线上电平的变化进行同步并进行接收工作。

但是,发送单元和接收单元存在的时钟频率误差及传输路径上的(电缆、驱动器等)相位延迟会引起同步偏差。因此接收单元通过硬件同步或者再同步的方法调整时序进行接收。

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

在这里插入图片描述

再同步

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

在这里插入图片描述

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

(1) 1 个位中只进行一次同步调整。

(2) 只有当上次采样点的总线值和边沿后的总线值不同时,该边沿才能用于调整同步。

(3) 在总线空闲且存在隐性电平到显性电平的边沿时,则一定要进行硬件同步。

(4) 在总线非空闲时检测到的隐性电平到显性电平的边沿如果满足条件(1)和(2),将进行再同步。但还要
满足下面条件。

(5) 发送单元观测到自身输出的显性电平有延迟时不进行再同步。

(6) 发送单元在帧起始到仲裁段有多个单元同时发送的情况下,对延迟边沿不进行再同步。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值