CAN总线详解--零基础入门


一、CAN总线是什么?

在早期车上的电控单元较少的时候,ECU采用的是点对点(point-to-point)的连接方式,即需要进行通讯的ECU之间采用硬线进行直接连接,专线专用,如下图所示。
采用这种方式的缺点有如下几点:

  1. 随着ECU的个数增加,线束的数量会大大增加,从而导致成本的增加,重量增加,整车布线的复杂度也会大大增加。
  2. 点对点的通信方式不便于通信进行扩展。
    在这里插入图片描述
    为了解决上述问题,二十世纪八十年代初德国Bosch公司开发了一种多主机局部网络串行通信协议 – CAN(Controller Area Network),并最终成为国际标准(ISO11898-高速CAN标准,ISO11519–低速CAN标准),随之CAN 总线(CAN Bus)应运而生,如下图所示。
    在这里插入图片描述
    从图中可以看出来,所有的Ecu通过一条CAN总线来进行通信,对比图1可以看出,这种方式大大减少了成本也降低了整车布线的复杂度以及整车重量。同时,总线拓扑具有良好的扩展性,有其他需要搭载的节点可以直接接入到总线上,譬如可以接入一个诊断仪来分析总线的通信情况以及错误的侦察。

但是这种方式也有一个缺点,因为所有的数据传输都在一条总线上,所以总线的带宽成为网络通信的一个瓶颈。

普通CAN的通信特点(CAN-FD和CAN-XL分别可以达到2 Mbit/s和10 Mbit/s):

  1. 高速CAN传输速度最高到1Mbps,低速CAN传输速度最高到125Kbps;
  2. 采用差分数据线,抗干扰能力强;
  3. 按照id优先级排序进行仲裁等。

波特率和CAN 总线长度的关系:

波特率(kbps)10005002501251005020105
最大长度(m)4013027053062013003300670010000

二、CAN节点的内部结构组成

实际上CAN网络的拓扑一般为线型。线束最常用的是双绞线,线上传输为对称的差分电平信号。

1.CAN节点的差分电平

总线可以具有两种逻辑状态之一:隐性(recessive )或显性(dominant)。

  • 在隐性状态下,VCAN_H和VCAN_L固定为平均电压电平,由总线终端决定。V_Diff(V_Diff = VCAN_H - VCAN_L ) 小于最大阈值。隐性状态在总线空闲或隐性位期间传输。

  • 显性状态由Vdiff大于最小阈值的差分电压表示。显性状态覆盖隐性状态,并在显性位期间传输。

按照ISO11898标准,隐性状态时,CAN_H与CAN_L相等,幅值范围为2V-3V;显性状态时,CAN_H比CAN_L高2V左右。差分信号V_Diff的电平要求为隐性状态-0.5V-0.05V,显性状态1.5V~3V。
在这里插入图片描述
在这里插入图片描述

2.CAN节点的内部结构

  1. Microcontroller:负责与其他节点应用层的交互,当youECU需要传递数据时,Microcontroller会将数据发送给CAN-Controller;
  2. CAN-Controller:负责进行报文的封装,封装后以二进制码的形式发送给CAN-Transceiver;
  3. CAN-Transceiver:负责将二进制信号转换成电信号,将CAN_H和CAN_L拉到对应的阈值;
  4. 终端电阻Rr:保证信号在传输过程中的阻抗连续性,消除反射波效应;
  5. CAN节点:各个不同的ECU;
  6. CAN_H和CAN_L双绞线。
    在这里插入图片描述
    在这里插入图片描述

三、CAN节点的寻址方式

CAN节点的寻址方式定义了数据从哪里来到哪里去,确定数据发送和接收之间的关系,CAN节点的寻址方式分为两种,分别是物理寻址和广播寻址。

1.物理寻址

物理寻址其实是一种点对点(1:1)的寻址,即有明确的发送方和接收方。发送报文的头部包含目的地址(Destination address)和源地址(Source address)。
在这里插入图片描述

2.广播寻址

广播地址是一种一对多(1:n)的通讯方式,由一个节点发送至所有挂载在总线上的节点。接收的节点可以通过过滤(Filter)的方式决定是否接收此条广播信息。其中Filter存在在CAN-Controller中。
在这里插入图片描述

四、CAN总线访问机制

通过上面的介绍我们可以知道,所有的CAN节点都连在总线上没有主从之分,只要总线空闲,任何节点都可以发送信息,并且同一个时段只允许一个节点发送信息。那要是有好几个节点同时发信息很容易就会发生冲突,那么这种情况又该怎么解决呢?

1.多主控制

在总线空闲时多个单元都可以发送消息,而两个单元以上同时开始发送消息时,根据标识符(identifier 简称ID)决定优先级。在有访问冲突时,根据每个结点ID(类似于人的身份证号一样,且每个ID都是唯一的)的优先级来进行仲裁。优先级高的节点先发送,优先级低的等优先级高的发送完再发送,这样也不会破坏每个节点要发送的信息。

1.1 Wired-AND buslogik

首先我们来看总线上的线与逻辑,1和0与上0都为0,1与上1才等于1。

Node ANode BBus level
000
010
100
111

1.2 Arbitration logic

TransmitterBusInterpretation
00continue
01Error
10Stop
11Continue

1.3 仲裁举例

假设有A,B,C三个节点同时发送信息,他们会通过11bit的ID来进行仲裁,从图中可以看到在第四位的时候出现了不一致,这时候通过线与逻辑,总线上表现出来的为0,这时候节点会有一个回读机制,按照上面第二个表格的仲裁逻辑,Node A在回读时发现自己发送的1,但是总线上为0,所以这时Node A会停止发送,由发送节点变为接收节点,开始接收总线上发送的数据。
在这里插入图片描述
Node B和C回读时发现自己发送0,总线上也是0,所以按照仲裁逻辑继续发送,直到下一位出现不一致。最后只有Node B继续发送。
B节点发送完之后,如果没有别的节点加入,A和C会再次转变为发送模式,进行新一轮的仲裁。如果有别的节点加入,A和C会和新加入的节点再次进行新一轮的仲裁。
在这里插入图片描述

总结:从上面的例子可以看出ID前面的0越多其优先级会更高,把二进制转换成10进制,11bit可以表示的范围为0-2047,所以可以看出ID越小,优先级越高。

五、CAN报文结构

1.帧类型和格式

1.1 数据帧和遥控帧

Frame TypesIdentifierData Field
CAN Data Frame(Standard Format)11 Bit0 up to 8Byte
CAN Data Frame(Extended Format)29 Bit0 up to 8Byte
CAN Remote Frame(Standard Format)11 Bitno existing
CAN Remote Frame(Extended Format)29 Bitno existing

从表中可以看出:
1.数据帧和遥控帧的区别在与遥控帧不携带有效的数据,只是一个远程的发送请求;
2.标准帧和扩展帧的区别在于他们的ID长度不一样,扩展帧可以表示的ID更多。

1.2 过载帧

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

  1. 过载标志
    6个位的显性位(6个0)
    过载标志的构成与主动错误标志的构成相同(详见第六部分错误帧)
  2. 过载界定符
    8个位的隐性位(6个1)
    过载界定符的构成与主动错误界定符的构成相同(详见第六部分错误帧)

1.3 错误帧

详见第六部分错误帧

1.4 帧间隔

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

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

(2)总线空闲(Bus Idle)
隐形电平,无长度限制(0到无穷)。
本状态下,可视为总线空闲,要发送的单元可开始访问总线。
在这里插入图片描述

(3)延迟传送(Suspend transmission ,发送暂时停止)
8个位的隐性位(8个1)。
只在处于被动错误的单元刚发送一个消息后的帧间隔中包含的段。
在这里插入图片描述
在这里插入图片描述

2. 标准格式下的数据帧结构

在这里插入图片描述在这里插入图片描述

(1)SOF – Start Of Frame

  • 表示帧开始的段。
  • 1个位的显性位(固定格式:0)。

(2)仲裁段(场) – Arbitration Field

  • Identifier:标准格式ID有11位(扩展格式的ID有29位)。 从高位msb到低位lsb,依次发送。
  • RTR(Remote Transmission Request):远程发送请求位。数据帧必须为显性0,遥控帧必须为隐性0。
    SRR:替代远程请求位。隐性位为1。通过该位,解决标准帧与扩展帧冲突,标准帧优先于扩展帧 。
  • IDE(Identifier Extension):识别符扩展位。标准格式属于控制场,为显性0。扩展格式属于仲裁场,为隐性1。当IDE为1时,后面还会跟着18Bit的ID扩展位。

(3)控制段 – Control Field

  • r(Reserve Bit):保留位,必须为显性。
  • r0(Reserve Bit):保留位,必须为显性。
  • r1(Reserve Bit):保留位,必须为显性。
  • DLC(Data Length Code):数据长度码4Bit,支持的最大有效字节数量为8个字节。

(4)数据段 – Data Field
由0~8个字节组成,首先发送MSB。

(5)CRC段 – Check Field
由15Bit的CRC顺序和1Bit的界定符组成。

  • CRC:CRC的计算范围包括帧起始、仲裁段、控制段和数据段。
  • DEL:界定符,固定格式,值为1

(6)ACK段 – ACK Field
由ACK槽和ACK界定符2个位组成。

  • ACK:发送单元发送1个位的隐性位1,接收单元接收到正确消息的ACK槽发送显性位0,不正确则为隐形位1。
  • DEL:界定符,固定格式,值为1

(7)EOF – End Of Frame
表示该帧结束,由7个隐性位组成,7个1。

(8)ITM – Intermission
在每个帧结束后有3Bit的ITM代表帧间隔,为3个1。

如果有连续11个1(DEL,EOF,ITM),则总线是空闲的!!!

**思考:**如果发的内容全部都是1,是不是也可能构成连续11个1呢?
实际上,这种情况是不会发生的。在CAN里面有一个位填充机制(Bit Stuffing)。

3.位填充(Bit Stuffing)

3.1 填充规则

  • 只要总线上出现了5个连续相同的位,在下一位插入一个与其相反的位;
  • 填充的范围从SOF到CRC;
  • 如果在SOF到CRC段发现有6个连续相同的位,则总线发送的数据有问题。

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

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

六、CAN传输中的数据保护

1.错误检测机制

1.1发送者

  • Bit Check:发送者在回读时,看发送的数据和在总线上读到的数据是否一致。
  • Stuff Check:填充位检查,如果在SOF到CRC段发现有6个连续相同的位,则总线发送的数据有问题。
  • ACK Check:正确情况是发1读0,读到的是0说明CRC校验通过。读1,则CRC校验失败。

1.2接收者

  • Bit Check:发送者在回读时,看发送的数据和在总线上读到的数据是否一致。
  • Stuff Check:填充位检查,如果在SOF到CRC段发现有6个连续相同的位,则总线发送的数据有问题。
  • Form Check:固定位都为1,例如:r,SOF,DEL,EOF,ITM。
  • CRC Check:CRC算法校验。

2.错误信号

2.1.规则

当节点检测到错误时,需要立即向总线上发送错误帧来告诉其他的节点(除了CRC错误)。

2.2.错误帧

Error Frame = Error Flag(Active / Passive) + Error Delimiter

  • 处于主动错误的节点 – Error-Active Node
    在这里插入图片描述
  • 处于被动错误的节点-- Error-Passive Node
    在这里插入图片描述

3.错误界定

怎么确定某一个节点是属于主动错误的节点还是被动错误节点呢?
状态依靠发送错误计数和接收错误计数来管理,根据计数值决定进入何种状态。

单元错误状态发送错误计数值(TEC)接收错误计数值(REC)
主动错误状态0 ~ 127且 0 ~ 127
被动错误状态128 ~ 255或128 ~ 255
总线关闭态(Bus Off)>=256_

在这里插入图片描述

错误计数规则:

  1. 当接收方检测到错误时,REC+1,除非
    检测到的错误是发送活动错误标志或过载标志期间的位错误。
  2. 当接收方在发送错误标志后检测到显性位作为第一个位时,REC+8。
  3. 当发送方发送错误标志时,TEC+8。
  4. 如果发送方在发送活动错误标志或过载标志时检测到位错误,则TEC+8。
  5. 如果接收方在发送活动错误标志或过载标志时检测到位错误,则REC+8。

注意:更多错误计数规则见ISO-11898

七、位时序和同步

由于CAN上的各个节点都连接在同一个总线上,根据其拓扑结构可以发现其通讯的方式属于异步通讯。那怎样实现对总线电平信号的正确采样以确保通讯正常呢?想必了解了位时序和位同步,大家会有答案。

1.位时序

1.1 波特率和比特率

波特率( Baudrate):在信息传输通道中,携带数据信息的信号单元叫码元,单位时间内通过信道传输的码元数称为码元传输速率,是衡量数据传送速率的指标,简称波特率。单位:波特,b/s(Baud per second)。

比特率:是指每秒传送的比特(bit)数。单位为 bps (Bit per second),比特率越高,每秒传送数据就越多。

比特率 = 波特率 * 单个调制状态对应的二进制位数
I=S*log2(N)
其中I为传信率,S为波特率,N为每个符号负载的信息量,以比特为单位。
2进制时,比特率和波特率是一样的。
8进制时,波特率就是比特率的3倍。
16进制时,波特率是比特率的4倍。

1.2 位组成

位时间:由发送单元在非同步的情况下发送1bit所需要的时间。
位时间(tBit) = 1 /波特率

根据CAN规范,每个位的时间内又可细分成4段:

  • 同步段(SS)
  • 传播时间段(PTS)
  • 相位缓冲段1(PBS1)
  • 相位缓冲段2(PBS2)

每个段又由最小的时间单位Time Quantum(Tq)组成。
1 位分为4 个段,每个段又由若干个Tq 构成,这称为位时序,1bit大约在8~25个时间量子(Tq)。

1 位由多少个Tq 构成、每个段又由多少个Tq 构成等,可以任意设定位时序。通过设定位时序,多个单元可同时采样,也可任意设定采样点。

段名作用Tq数
同步段(SS:Synchronization Segment)同步段用于同步总线上的各个CAN节点。固定1Tq
传播时间段(PTS:Propagation Time Segment)用于补偿网络内的物理延迟时间。这些延迟时间包括总线上的信号传播时间和CAN节点的内部延迟时间1~8Tq
相位缓冲段1(PBS1: Phase Buffer Segment 1)相位缓冲段1和2用于补偿边沿相位误差。这些段可以通过重新同步来延长或缩短。1~8Tq
相位缓冲段2(PBS2: Phase Buffer Segment 2)同上2~8Tq

在这里插入图片描述

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

tBit(位时间) = tSS(同步段时间)+tPS(传播段时间)+tPBS1(相位缓冲段时间1)+tPBS2(相位缓冲段时间2)

则上图中的 tBit = tSS(1Tq)+tPS(3Tq)+tPBS1(5Tq)+tPBS2(4Tq)= 13Tq

2.CAN的同步机制

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

2.1 同步规则

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

2.2 硬同步

接收单元在总线空闲状态检测出帧起始时(SOF)进行的同步调整。

当检测到隐性到显性的边沿时(SOF)视为起始(SS)
在这里插入图片描述

2.3 再同步

再同步补偿宽度(SJW:reSynchronization Jump Width):由于重新同步,PBS1可能会延长或PBS2可能会缩短。SJW给定了相位缓冲段的加长和缩短量的上限(1~4Tq)。

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

(1)隐性电平到显性电平的边沿出现在PTS和PBS1之间(SJW = 2)

隐性电平到显性电平的边沿有2Tq的延迟时,在PBS1后插入SJW的长度以调整同步。
在这里插入图片描述
(2)隐性电平到显性电平的边沿出现在PBS 2中时(SJW = 2)

检测出隐性电平到显性电平的边沿有2Tq的提前时,在PBS2中减小SJW的长度以调整同步。
在这里插入图片描述

评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值