一、CAN总线基础知识
1.显性
表征CAN总线通信中逻辑0状态。
2.隐形
表征CAN总线通信中逻辑1状态,高阻抗状态,可以被显性改写。


3.总线拓扑结构
在微小卫星中,航天器内部采用CAN总线将多台计算机连接起来,形成星载网络。航天器CAN总线采用双冗余总线拓扑结构,或四总线拓扑结构,包括A/B两条CAN总线,或A/B/C/D四条CAN总线(姿轨控系统单机挂在C/D总线上)。

4.电特性参数
CAN节点的隐性状态和显性状态电特性参数如下表。
隐形状态电特性参数
参数名称 | 符号 | 参数要求 | 条件 | ||
最小值 | 标称值 | 最大值 | |||
总线输出电压 | VCAN-H | 2.0V | 2.5V | 3.0V | 无负载 |
VCAN-L | 2.0V | 2.5V | 3.0V | 无负载 | |
总线差分输出电压 | Vdiff-out | -500mV | 0mV | 50mV | 无负载 |
显性状态电特性参数
参数名称 | 符号 | 参数要求 | 条件 | ||
最小值 | 标称值 | 最大值 | |||
总线输出电压 | VCAN-H | 2.75V | 3.5V | 4.5V | 负载RL/2 |
VCAN-L | 0.5V | 1.5V | 2.25V | 负载RL/2 | |
总线差分输出电压 | Vdiff-out | 1.5V | 2V | 3.0V | 负载RL/2 |
RL为终端电阻 |
5.抗干扰措施
每个通信节点针对CAN总线通信采取以下抗干扰措施:
1)分别独立设置A、B总装线的接收数据区、接收指针及其他总线状态量,避免两条总线之间相互干扰的可能;
2)CAN总线接收缓冲区采取防溢出措施,避免总线异常时,对软件造成灾难性影响;
3)通信节点应具备过滤不相关数据的能力;
6.CAN总线SOF帧起始
在 CAN 总线的数据帧和远程帧中,帧起始(SOF)是数据帧的第一个位。它是一个显性位(逻辑 0),用于标志一个数据帧或远程帧的开始。这个起始位的出现,就像是给总线上的所有节点发送了一个信号,告诉它们有一个新的数据帧或远程帧即将到来,让各个节点做好接收和处理的准备。
帧起始在通信中用于:同步接收节点时钟、识别帧的开始、触发接收流程启动。
1)同步接收节点时钟
CAN 总线是一种异步通信方式,不同节点的时钟可能会存在一定的偏差。当接收节点检测到帧起始(SOF)的显性位时,它会利用这个信号来同步自己的内部时钟,使其与发送节点的时钟达到一定程度的同步。这有助于接收节点准确地接收后续的数据位,因为在后续的数据接收过程中,接收节点需要按照正确的时间间隔来采样数据位,以确保正确解析数据帧。
7.CAN总线仲裁
7.1 仲裁域介绍
1)CAN总线仲裁域标准帧和扩展帧中ID前11位均表示ID值(ID28-ID18);
2)标准帧中RTR(远程传输请求)位和SRR(替代远程请求)位对应,扩展帧SRR固定为“隐性”(逻辑1);标准帧中RTR位为“显性”(逻辑0)时,表示这是一个数据帧,为“隐性”(逻辑1)时,表示这是一个远程帧。从位置上看SRR其主要目的是在扩展帧的格式中为了与标准帧的 RTR 位在位置上相对应,保持帧格式结构的一致性。在仲裁过程中,SRR 位的隐性特性会影响扩展帧与标准帧之间的仲裁优先级。由于 SRR 位为隐性,在标准帧和扩展帧同时竞争总线时,标准帧在这一位的比较上(RTR 位为显性)会具有更高的优先级,从而在一定程度上优先占用总线。这也和 CAN 总线系统整体优先处理数据帧的设计理念相符合,保证了实际数据能够更高效地在总线上传输。由此可知优先级排序:标准帧数据帧(RTR显、SRR隐)>标准帧远程帧&扩展帧(RTR隐、SRR隐)
3)扩展帧中IDE(扩展标识符)位,对于标准帧,IDE 位为 “显性”(逻辑 0);对于扩展帧,IDE 位为 “隐性”(逻辑 1)。这样,在 CAN 总线上,当节点接收到一个数据帧时,可以通过查看 IDE 位快速判断该帧是标准帧还是扩展帧。当标准帧和扩展帧同时竞争总线时,标准帧因为 IDE 位为显性(逻辑 0)而在这一位的比较上具有更高的优先级。由此可知优先级:标准帧数据帧(RTR显、SRR隐)>标准帧远程帧(RTR隐、SRR隐、IDE显)>扩展帧(RTR隐、SRR隐、IDE隐)
4)扩展帧中ID-EX表示扩展帧ID值(ID17-ID0);
5)扩展中RTR位含义同标准帧中RTR位。
7.2 CAN总线仲裁方法
1)参与CAN总线仲裁的器件仅为要发送报文的CAN控制器,其他控制器不参与仲裁;且仅有能发送报文器件可以参与仲裁,仅侦听器件无仲裁功能;
2)CAN收发器会实时监测总线是否空闲(空闲时总线电平为隐性),并将总线空闲信息发送至CAN控制器(改变控制器中寄存器状态值),只有当总线为空闲时CAN控制器方可发送报文;
3)CAN 总线采用非破坏性的基于消息优先级的仲裁机制。在多个节点同时试图发送数据时,通过比较仲裁域中的标识符来确定优先级。标识符的值越小,优先级越高。
仲裁过程是逐位进行的,当多个节点同时发送数据时,会进行 “线与” 操作。从标识符的最高位开始,依次比较每个节点发送的位。当一个节点发送显性位,另一个节点发送隐性位时,总线上呈现显性位,发送隐性位的节点会检测到这个差异(CAN 控制器芯片中,有一个专门的状态寄存器来记录仲裁状态。当出现上述情况时,该寄存器的相应位会被置位,通知节点的微控制器或者相关的软件程序,表明有更高优先级的节点在发送数据,本节点的CAN控制器自动执行停止发送自己的数据帧),从而知道有更高优先级的节点在发送数据,它会立刻停止发送自己的数据帧,等待总线空闲后再尝试发送。
7.3 CAN总线仲裁机制和位翻转区别
当在仲裁过程中出现不符合自己发送数据位的情况时,节点首先会按照仲裁规则来判断是否是因为有更高优先级的节点在发送,而不是简单地认为是位翻转错误,因为这是按照协议正常进行的过程。只有在通过仲裁后,数据帧完整发送过程中出现不符合 CRC 等错误检测规则的数据位变化时,才会判断为位翻转等错误情况。这样就保证了在仲裁阶段,节点能够正确区分是由于优先级问题还是真正的错误导致的数据位变化。
8. CRC校验域
8.1 CRC校验
CRC 校验是从仲裁域的最高位开始,到数据域的最后一位。
8.2 CRC界定符
1)CRC 界定符在 CAN 总线协议中被规定为一个隐性位(逻辑 1);
2)接收节点在接收数据帧的过程中,会对接收的数据进行实时的 CRC 计算。当接收到 CRC 界定符时,接收节点会将此时计算得到的 CRC 结果与接收到的 CRC 序列进行比较。如果比较结果一致,且接收到了正确的 CRC 界定符,接收节点就认为 CRC 校验成功结束,数据在传输过程中没有发生错误。如果比较结果不一致,接收节点会根据协议规定采取相应的措施,如标记数据帧错误或请求发送节点重新发送数据帧;
3)接收节点内部通常会有一个计数机制或者状态机来跟踪接收数据帧的进度。状态机处于 “接收 CRC 序列” 状态时,它会对接收的数据进行 CRC 计算相关的操作,当接收节点已经接收到了与 CRC 位数(由协议规定的位数)相同长度的数据后,就会预期下一个位是 CRC 界定符。只有当完成了 CRC 序列的接收并且计算,并且接收到的位符合 CRC 界定符的定义(隐性位)时,状态机才会从 “接收 CRC 序列” 状态转换到 “等待 ACK 位” 状态。这种状态机的严格状态转换机制可以帮助接收节点准确地区分 CRC 序列中的隐性位和真正的 CRC 界定符。
9.ACK应答域
9.1 ACK应答
9.2 应答界定符
10.帧结束和总线空闲
帧结束(EOF)依然是由发送节点发送的,帧结束(EOF)由 7 个连续的隐性位(逻辑 1)组成,发送节点发送帧结束的目的是为了将总线状态恢复到空闲状态,以便为下一次的数据传输或者其他节点的数据发送做好准备。
虽然协议规定了 7 个连续的隐性电平用于表示帧结束和空闲状态,但在实际应用中,为了更可靠地判断总线是否真正空闲,节点可能会在检测到 7 个隐性电平后,再持续观察一小段时间。这是因为在某些特殊情况下,例如信号干扰或者节点故障,可能会出现类似隐性电平的伪信号。
另外,即使检测到 7 个连续的隐性电平后,也需要确保没有新的帧起始(SOF)即将出现。因为如果紧接着有新的帧起始信号,说明总线即将开始新的数据传输,并非处于空闲状态。所以在实际判断时,节点可能会结合对后续电平的短期预测以及对当前 7 个隐性电平的检测来综合判断总线是否处于空闲状态。
11.错误帧
接收节点通过自身CAN 控制器内部专门的错误检测机制来检测CAN总线错误。
11.1 错误帧格式
错误帧由错误标志和错误界定符组成。错误标志分为主动错误标志(6 个连续显性位)和被动错误标志(6 个连续隐性位)。发送错误标志后,紧接着发送错误界定符。错误界定符是 8 个连续的隐性位,用于表示错误帧的结束。
11.2 错误重传机制
利用 ACK 位反馈异常进行判断:正常情况下,发送节点会在 ACK 位阶段监测总线,如果接收到显性电平(逻辑 0),就知道至少有一个接收节点正确接收了数据帧。如果发送节点没有收到正确的 ACK 位反馈(即 ACK 位仍然为隐性电平),并且检测到错误帧(通过错误标志),就会意识到数据传输出现错误,从而可以重新发送数据帧。
二、故障模式
1.CAN_H对GND短路
1)用万用表测量CAN_H和GND之间的阻值为0Ω,电压为0V;
2)用万用表测量CAN_L和GND之间的阻值为RL/2(RL为终端电阻),电压为0V;
3)用万用表啊测量CAN_H和CAN_L之间的阻值为RL/2(RL为终端电阻),电压为0V;
4)用示波器测不到CAN_H对GND的波形,用示波器测不到CAN_L对GND的波形。

通过上图可以知道,当CAN_H对GND短路时,CAN芯片并不会损坏,排除故障后,CAN芯片仍然可以继续工作。
2.通信故障
1)如果A/B总线停止接收(中断关闭或节点处于总线关闭状态),对应A/B总线的CAN总线控制器复位(例如A总线连续停止接收16s,对A总线复位,B总线连续停止接收16s,对B总线复位);
2)如果连续几个正常周期(例如时间是正常通信周期的2倍~8倍)在A、B总线均未接收到符合通信协议的正确数据,对两条总线的CAN总线控制器复位。
3.总线电压过低
1. 首先明确反射系数的含义
反射系数,当
时,说明反射波与入射波是反相的。
2. 考虑反射波和入射波叠加对接收端电压的影响
设入射电压波为,反射电压波为
,在接收端的总电压
。
已知,当
时,
与
反相。
假设入射电压,反射系数
,则反射电压
,在接收端的总电压
,这表明接收端电压值会降低。
因为CAN总线匹配电阻是120Ω,双端并联后阻值变为60Ω,此时若多并联一个120电阻则线路阻抗降为40Ω。此时反射系数不为0,而是。若正常情况下差分电压为2V,则经过负反射后电压值降为1.6V。