CAN总线协议的相关学习

本文详细介绍了CAN总线的物理层,包括通讯节点中的控制器和收发器,以及低速和高速CAN收发器的区别。在协议层,讨论了CAN的通信特性和报文结构,如ID、RTR、DLC等。此外,还阐述了总线同步、总线竞争的处理机制,以及数据保护措施,包括错误检测和错误处理。
摘要由CSDN通过智能技术生成

目录

参考出处

一、CAN物理层

1.1 通讯节点

1.1.1 控制器(Controler)

1.1.2 CAN收发器(Transver)

1.1.2.1 低速can收发器

1.1.2.2 高速can收发器

1.1.2.3 总线逻辑

1.2 CAN 协议中的差分信号

1.2.1 I2C总线的简单特点介绍

二、CAN协议层

2.1 communication(通信)

2.1.1 去中心化,分布式原则

2.1.2 事件驱动(11898-4另外增加了时间触发机制)

2.1.3 通信矩阵

2.2 CAN的报文种类及结构

2.2.1 报文的种类

2.2.2 数据帧的结构

① sof 1bit

② id(identifier) 11bit

③ RTR 1bit

④ SRR位 1bit

⑤ dlc 4bit

⑥ crc场 16bit

⑦ ack场 2bit

⑧ IDE 1bit

⑨ EOF 7bit

⑩ ITM 3bit

⑪ remote frame远程帧

⑫ error frame错误帧

三. 总线同步

四. 总线竞争

五. 数据保护

5.1 物理设计方面

5.1.1 选择NRZ编码的原因

5.1.2 双绞线相关信息

5.1.3 终端电阻相关信息

5.2 总线逻辑错误检测机制 detection

5.2.1 stuffcheck

5.2.2 formcheck

5.2.3 bit monitorint

5.2.4 crc

5.2.5 ack check

5.3 总线逻辑错误处理机制 handling

5.3.1 错误帧相关信息

5.3.2 错误跟踪机制 error tracking

总结


参考出处

CAN控制器的位同步过程_can位同步_DingUXiu的博客-CSDN博客

CAN 总线数据链路层 & 总线同步机制简析_通过中断或者can载波同步_HHHulk的博客-CSDN博客

CAN总线个人知识总结_哔哩哔哩_bilibili

一、CAN物理层


1.1 通讯节点

CAN总线上可以挂载多个通讯节点,节点之间的信号通过总线传输,实现节点间通讯。

CAN协议不对节点进行地址编码,而是对数据内容进行编码,所以节点个数理论上不受限制,只要总线的负载足够即可,而且可以通过中继器增强负载。

CAN通讯节点由一个CAN控制器(Controler)和CAN收发器(Transver)组成。

1.1.1 控制器(Controler)

根据需要接受的message数量,如果数量多,需要object storage,少则不需要。

Object Storage(对象存储)通常指的是用于存储CAN通信相关的配置、状态和数据的内存区域。这些内存区域被组织成一个或多个对象(Object),每个对象包含特定类型的信息。

1.1.2 CAN收发器(Transver)

本文将介绍低速can收发器,高速can收发器,以及它们对应的总线逻辑。

1.1.2.1 低速can收发器

低速CAN收发器是一种专门用于低速CAN(Controller Area Network)通信的收发器。低速CAN通常指的是传输速率较低的CAN网络,例如标准模式(100 kbit/s)和低速模式(10 kbit/s)。这些低速CAN通信通常用于汽车的辅助系统、工业自动化和其他一些对通信速率要求不高的应用。

①传输速率:0-125k。

②不需要终端电阻。

③差分电平:

 11898-3 对应低速can收发器

1.1.2.2 高速can收发器

高速CAN收发器是一种专门用于高速CAN(Controller Area Network)通信的收发器。高速CAN通常指的是传输速率较高的CAN网络,例如快速模式(400 kbit/s)、高速模式(1 Mbit/s)和超高速模式(5 Mbit/s)。这些高速CAN通信通常用于汽车的主要网络(CAN-Bus)、工业控制系统和其他需要高数据传输速率的应用。

① 传输速率:0-1M。

② 需要120Ω终端电阻。

③ 差分电平:

11898-2 对应高速can收发器

④ 抗干扰能力:

8 kV ESD(Electrostatic Discharge)保护。

8 kV ESD(Electrostatic Discharge)保护指的是该收发器具备对静电放电的保护能力,能够抵御高达8千伏的静电放电。

推荐增加共模扼流圈(Common Mode Choke)。

共模扼流圈(Common Mode Choke)是一种被广泛用于高速CAN(Controller Area Network)通信的电子元件,用于滤除共模干扰和提高信号的抗干扰能力。

1.1.2.3 总线逻辑

关于电平,逻辑1是隐性,逻辑0是显性,而多节点同时发送时,遵行线and逻辑。

例如下图,全1(隐)则1,有0(显)就0。


1.2 CAN 协议中的差分信号

 在 CAN 总线中,必须使它处于隐性电平 (逻辑 1) 或显性电平 (逻辑 0) 中的其中一个状态。假如有两个 CAN 通讯节点,在同一时间,一个输出隐性电平,另一个输出显性电平,类似 I2C 总线的“线与”特性将使它处于显性电平状态,显性电平的名字就是这样来的,即可以认为显性具有优先的意味。

1.2.1 I2C总线的简单特点介绍

I2C总线的特点包括以下几点:

  1. 双线制:I2C总线由两根线组成,分别为数据线(SDA)和时钟线(SCL)。SDA负责传输数据,而SCL用于传输时钟信号,控制数据的传输速率。

  2. 主从设备结构:I2C总线采用主从结构。在一个I2C通信中,通常有一个主设备(Master)和一个或多个从设备(Slave)。主设备负责控制整个通信过程,而从设备则根据主设备的指令来响应。

  3. 多设备共享总线:I2C总线允许多个设备共享同一组数据线和时钟线。每个设备都有一个唯一的地址,主设备通过这个地址来选择要与哪个从设备通信。

  4. 支持多种传输速率:I2C总线可以以不同的传输速率进行通信,通常有标准模式(100 kbit/s)、快速模式(400 kbit/s)、高速模式(3.4 Mbit/s)和超高速模式(5 Mbit/s)等。

  5. 起始和停止条件:数据传输始于主设备发送起始条件(Start),而在通信结束时,主设备发送停止条件(Stop)。在传输数据过程中,数据变化都在时钟信号的上升沿或下降沿进行。

  6. 应答机制:每个数据字节的传输都由接收设备(主设备或从设备)发送应答信号来确认是否正确接收了数据。

  7. 多主设备:I2C总线允许存在多个主设备,但在同一时刻只能有一个主设备控制总线。如果需要多主设备竞争总线控制权,则需要使用冲突检测和仲裁机制。

[10-1] I2C通信协议_哔哩哔哩_bilibili

我觉得上面链接的up主关于I2C协议的介绍非常好,推荐大家去观看一下~


二、CAN协议层

2.1 communication(通信)

在CAN(Controller Area Network)通信协议中,"communication"(通信)指的是数据帧的传输和交换过程,以及通过CAN总线进行的设备之间的信息传递。

2.1.1 去中心化,分布式原则

总线空闲时间任一节点均可竞争发送消息,消息将被广播,由节点自己决定是否过滤。

2.1.2 事件驱动(11898-4另外增加了时间触发机制)

节点的发送和接收动作是由特定事件触发的,而不是基于固定的时间触发机制。

这种事件驱动的设计使得CAN通信非常适用于实时数据传输和控制应用,因为节点只在需要发送或接收数据时才会进行相关操作,而不会浪费时间和资源在空闲期间的通信上。

ISO 11898-4,全名为ISO 11898-4:2015,是国际标准化组织(ISO)发布的一项标准,定义了在控制器区域网络(CAN)通信中使用的物理层规范之一。

2.1.3 通信矩阵

在CAN(Controller Area Network)通信中,通信矩阵是一种表示不同CAN节点之间通信关系的概念。通信矩阵描述了各个CAN节点之间能够进行数据通信的情况,它是一种图表或矩阵形式,用于显示CAN网络中节点之间的通信连接。

观察上图,你会发现,同一时刻,某一个节点并不能又是接收方又是发送方。

2.2 CAN的报文种类及结构

CAN 使用的是两条差分信号线,只能表达一个信号,简洁的物理层决定了 CAN 必然要配上一套更复杂的协议,如何用一个信号通道实现同样、甚至更强大的功能呢?CAN 协议给出的解决方案是对数据、操作命令 (如读/写) 以及同步信号进行打包,打包后的这些内容称为报文。

2.2.1 报文的种类

原视数据段的前面加上传输起始标签、片选(识别)标签和控制标签,在数据的尾端加上CRC校验标签,应答标签和传输结束标签,把这些内容按照特定的格式打包好,就可以用一个通道表达各种信号了。

2.2.2 数据帧的结构

数据帧是在 CAN 通讯中最主要、最复杂的报文,用于主动传输数据。

接下来,我将按照顺序一一介绍这些帧的定义:

① sof 1bit

SOF段(Start OfFrame),译为帧起始,帧起始信号只有一个数据位,是一个显性电平,用于通知各个节点将会有数据传输,其他节点通过帧起始信号的电平跳变来进行硬同步。

② id(identifier) 11bit

定义消息优先级/总线竞争力,数字越低优先级越高。

当有两个报文被发送时,总线会根据仲裁段的内容决定哪个数据包能被传输。

仲裁段的内容主要为:

①本数据帧的ID信息(标识符)

②数据帧具有标准格式和扩展格式两种,区别在于ID信息的长度。标准格式的ID为11位,扩展格式的ID为29位,它在标准ID的基础上多出18位。

在CAN协议中,ID起着重要的作用——决定数据帧发送的优先级,也决定着其他节点是否会接收这个数据帧。CAN协议不对挂载它之上的节点分配优先级和地址,对总线的占有权也是由信息的重要性决定的。即对于重要的信息,会打包上一个优先级高的ID。如果总线上同时出现显性电平和隐形电平,总线的状态会被置为显性电平,CAN正是利用这个特性进行仲裁。

若两个节点同时竞争CAN总线的占有权,当它们发送报文时,若首先出现隐形电平,则会失去对总线的占有权,进入接收状态。

在开始阶段,两个设备发送的电平一样,所以它们一直继续发送数据。到了图中箭头所指的时序处,节点单元 1 发送的为隐性电平,而此时节点单元 2 发送的为显性电平,由于总线的“线与”特性使它表达出显示电平,因此单元 2 竞争总线成功,这个报文得以被继续发送出去。

仲裁段ID的优先级也影响着接收设备对报文的反映。因为在CAN总线上数据是以广播的形式发送的,所有连接在CAN总线的节点都会接收到其他节点发出的有效数据,因此,CAN控制器大多具有根据ID过滤报文的共嗯,他可以控制自己只接受某些ID的报文。

仲裁段除了报文ID外,还有RTR,IDE和SRR位。

③ RTR 1bit

RTR位(Remote Transmission Request Bit),译作远程传输请求位,它是**用于区分数据帧和遥控帧**的,当它为显性电平时表示数据帧,隐形电平时表示遥控帧。

④ SRR位 1bit

SRR位(Substitute Remote Request Bit),只存在于扩展格式,它用于替代标准格式中的RTR位。由于扩展帧中的SRR位为隐形位,RTR在数据帧为显性位,所以在两个ID相同的标准格式报文与扩展格式报文中,标准格式的优先级较高。

⑤ dlc 4bit

表示数据场的字节长度,数据段为数据帧的核心内容,它是节点要发送的原始信息。

⑥ crc场 16bit

为了保证报文的正确传输,CAN的报文包含了一段15位的CRC校验码,含1bit隐性位的界定符,从sof到数据场的所有数据进行encode,且又由发送方计算并添加到数据帧中。

一旦接收节点算出的CRC码与收到的CRC码不同,则他会发送反馈出错信息,利用错误帧请求它重新发送。

CRC部分的计算一般由CAN控制器硬件完成,出错时的处理由软件控制最大重发数。在CRC校验码滞后,有一个CRC界定符,它为隐形位,主要作用是把CRC校验码与后面的ACK段间隔起来。

⑦ ack场 2bit

ACK段包含一个ACK槽位,和ACK界定符位。类似12C总线,在ACK槽位中,发送节点发送的是隐形位,而接收节点在这一位中发送显性位以示应答。在ACK槽和帧结束之间由ACK界定符间隔开,

接收方进行确认,收到消息给出一个显性位。

如果一个节点都没有确认收到消息,发送方监听此位为隐形位(1bit)就会报错。

⑧ IDE 1bit

IDE位(Identifier Extension Bit),译作标识符扩展位,它是用于区分标准格式与扩展格式,当它为显性电平时为标准格式,隐形电平时为扩展格式,扩展帧的id可以有29位。

 扩展帧和标准帧格式不同,不能存在于同一can网络内。

⑨ EOF 7bit

EOF段(End Of Frame),帧结束段由发送节点发送的7个隐形位(7bit)表示结束 。

⑩ ITM 3bit

帧间隔,实际不属于帧内的区域,先列出来,必须等待帧间隔才能发送消息。

⑪ remote frame远程帧

用于请求数据,很少用,格式如下:

⑫ error frame错误帧

CAN数据帧中的错误帧(Error Frame)是指在CAN(Controller Area Network)通信过程中发生了错误而被发送出来的一种特殊数据帧,格式如下:

三. 总线同步

首先,首次同步由sof发起。

为什么要同步?因为没有单独的时钟线,且因为是NRZ编码,不是曼侧斯特编码(自带时钟同步)。

NRZ编码的优点是简单且易于实现,因为它不需要时钟恢复,仅需要对信号的电平进行解码即可。然而,NRZ编码的一个缺点是当连续传输相同的二进制位时,会导致直流分量的存在,这可能会对信号传输的可靠性产生影响。

那什么是重同步呢?

重同步利用位填充机制(bit stuffing),它的原理是每五个同样极性的位后面会被插入一个反极性位,确保接收节点采集到足够的边沿进行重同步:                        

 tips:利用隐形位到显性位的边沿进行重同步

新插入的反极性位也会被用于下一次插入计算,且位填充机制作用范围为(sof-crc)。


四. 总线竞争

总线竞争是为了解决多个节点在同一时间点发消息的问题,其中,在CAN通信协议是通过id来竞争优先权的。

每个节点在进行发送时都会对总线电平进行监控,以下是一个例子:

send 0 出现 1 :报错

send 0 出现 0 :继续

send 1 出现 1:继续

send 1 出现 0:竞争失败,转为接收方

那么,能够实现通过id来进行竞争的原因是什么呢?是因为总线遵循线与逻辑【0为显性,1位隐性】,且节点在发送时会监听总线电平,进行判断。

竞争失败者将会进行什么操作呢?

首先,针对行为上来说,竞争失败的节点会自动在检测到总线空闲的第一时间再次尝试发送,但这样也存在一定的风险,在网络负载率很高,也就是消息很多的时候,低优先级的消息可能会延迟很久才能发送成功。

以下是竞争流程图的图例:


五. 数据保护

5.1 物理设计方面

在物理设计上就要加强emc(是指电子产品或电气设备在规定的电磁环境中,按设计要求正常工作的能力。)

5.1.1 选择NRZ编码的原因

NRZ编码可以减小干扰发射,例如图示:

5.1.2 双绞线相关信息

双绞线canh canl差分信号消除共模干扰,且建议每米扭转30次

5.1.3 终端电阻相关信息

终端电阻消除电缆线高频传输时传输末端的反射,以下是tja1042的接线推荐:

 把120的电阻拆开成两个,配合电容可以形成两路低通滤波器(允许低频通,高频被电容导入地)

5.2 总线逻辑错误检测机制 detection

总线逻辑包含五种检测机制,他们分别是:

5.2.1 stuffcheck

接收节点检测,检测是否有位填充错误,出现6个同极性位就报错。

5.2.2 formcheck

接受节点检测,检测crc界定符和ack界定符以及eof区域是否出现显性位。

5.2.3 bit monitorint

发送节点检测,发送显性位,但总线是隐性位就报错。

5.2.4 crc

接收节点检测,接收方会快速生成一个值,与发送方的crc段进行比对,不一致就报错。

5.2.5 ack check

发送方检测,接收方会在收到消息后在ack应答位给出一个显性电平,如果发送方检测到该位为隐性,则报错。

从区域上看如下:

5.3 总线逻辑错误处理机制 handling

data consistency,也就是数据一致性。

根据此特性,检测到错误的节点会让所有人都知道此刻有一个错误。

5.3.1 错误帧相关信息

 关于errorflag段:

① 六个显性电平(制造一种位填充错误)。

② 第一个errorflag是由发现错误的节点发送的,他发送完后就继续发送错误界定符,直到总线出现连续的8个隐性位则错误帧完毕。

③ 第二个errorflag是有第一个errorflag引起,由其他节点发送,该区域可能会和第一个errorflag区域重叠,原因是第一个errorflag还没发完,总线就已经形成六个显性位,从未触发那些节点发送errorflag。

④ 错误界定符由8bit的隐性位构成。

5.3.2 错误跟踪机制 error tracking

为了避免总线被永久错误节点卡死,比如,这个节点由于本身的原因一直在报错,导致总线没法正常发送了,需要一种机制来进行鉴别并限制其功能,于是,我们便有了error tracking这样的错误跟踪机制。

它在每个controller里都会实现:

Error Active:默认初始状态,发现错误后会很积极主动地上报错误。

Error Passive:TEC or REC 计数超过127就进入此状态,此时,该节点发现错误后只会发送6个隐性位,不会把错误广播出去,并且,发送连续帧时,中间必须间隔8bit的延缓时间。

Fus Off:controller挂了,或者TEC大于255,就会进入这个状态,需要重启,或者等待128个11位隐性位电平。

如上图所示,发送错误计数器的情况如下:

① 成功发送一条消息 -1

② 检测到错误,如果是该节点是发送方,+8

接收错误计数器的情况如下:

① 检测到错误,如果该节点是接收方+1,如果是引起错误的接收方 +8

② 成功发送一条消息 -1


总结

这是我根据这些网址所整理的自己的笔记,如果有一些理解错误的地方请大佬们指点!!!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值