学习是一个长期的投资,分享是社会进步的标志。

Can总线


can总线传输速率分为高速can和低速can。依据弱实时性和强实时性选择相应的can总线传输速率,如车窗升降器使用低速can,ABS系统应用高速can:若ABS反应不及时,则会出现轮胎已经抱死了,此时汽车已经失控,无法挽救。

    高速can:发动机控制,ABS/ASR,变速器控制,主动悬架,125-1mbit/s,实时性高。

    低速can:车身控制,车门、车灯、空调、5-125kbit/s;   

52f74c60efa75b64254918342ee1c3da.png

    Can总线采用双绞线:绞距为20mm。信号格式为差分信号,差分传输是一种信号传输的技术,区别于传统的一根信号线一根地线的做法,差分传输在这两根线上都传输信号,这两个信号的振幅相同,相位相反。优点是抗干扰性强,识别小信号能力强。

   Can总线采用双绞线:绞距为20mm。 分别为Can_H,Can_L;

8ed8c68fcdfd13bf518de9dc3c89cd9b.png

电平定义:显性位=逻辑0:3.5-1.5=2v;

隐性位=逻辑1:2.5-2.5=0v;

有些传输编码方式有参考电平信号,即地。而can采用非归零码编码解码方式,即canL、canH两个信号均有信号。

    高速can 1mbit/s  <=40米,传输速率越高,总线长度限制越短;

f976ea02714020e4d1b41c9626053a61.png

Can控制器负责管理消息的发送和接收,它将传输的二进制数据转换成数据传输所需的位电流,并将电流通过控制器发发送引脚TXD传递到can收发器。Can收发器:将信号放大,并将放大的电流信号传输到总线上。80cd2ce5b02575e88b596af5ed8f420a.png

        载波侦听(CSMA):

        总线上的每一个节点在企图发送报文前,必须要监听总线,通过can收发器先在can总线发送一个信号,同时监听读到的信号与发送的是否一致来判断总线上是否有信号在传输,若有,则等待can总线空闲。

    仲裁机制(CD+AMP):

    如果多个节点同时监测到总线空闲,则可以发送报文到总线。但是总线上只能传输一条报文。所以仲裁用来出来多个节点同时发送报文这种情况,以解决总线冲突。大致原理:两个报文同时发起can总线传输,总线将对两个报文进行运算,某一报文上的显性位将覆盖其他报文上的隐性位。    

    简单的判断方式:报文ID值越小 优先级越高;如下,一开始总线空闲,5号报文开始发送,5号报文发送期间,7号和3号都发起传输,仲裁机制将优先发送3号报文,以此类推。可以发现:总线负载率越高,优先级较低的报文需要等待的时间越长,相应地等待该报文的节点的接收时间就越不确定。

471d164fbf5446e50c5c3e61966ae643.png

    Can收发器的滤波器:

        每个节点都可以接收can总线上的信息,但是某个节点并非都会用总线上的所有信息。所以在can收发器之前有一个滤波器。过滤掉直接不想要的信息。

e8d8dae7af6a27ce3bbe306aee67c66c.png

    can收发器设定标识码:(0100 1101 0000)掩码(1110 1000 1100),当从总线读取到报文时候,则对报文ID与掩码进行位与运算(有0则0,同1才1):比如报文为 010x 1xxx 00xx:

(报文)010x 1xxx 00xx & (掩码)1110 1000 1100 = (标识符)0100 1101 0000。 也就是说ID为这种格式的:010x 1xxx 00xx,都可以被接收。x表示该位可以是0,也可以是1.

位填充:

    发送节点发送5个连续的相同极性位后,在为流中自动插入一个机型相反的位电流:这个位被叫做填充。结束帧是由7个连续隐性位组成,不知道位填充与这个是否关系。同理,接收器接收信号时候进行清除填充。

报文帧结构:

can2.0A和Can2.0B有些细微的区别。

6fbe169fcc69add3b05759513353da88.png

dd46c0d8e99b7be7f4b31b1756eb451d.png

e2fab38bbeec29856f69abc2a48d3759.png

SOF:

起始帧,总线处于空闲状态时,该位处于隐性状态:1。相反,位为显性时0,总线处于信息传递状态,同时起到同步各个节点的作用。

ID:

确定唯一的报文,标准帧11位,扩展帧29位。并且用ID来仲裁报文优先级,ID值越小,优先级越高。

RTR:

区别数据帧和远程帧的标志,数据帧位显性0,远程帧为隐性1

Can2.0A没有SRR,IDE。2.0B中SRR IDE均为隐性1。

如果节点A发送一个数据帧,同时节点B发送远程帧以请求该数据帧,则由于标识符相同,总线冲突机制不起作用(因为ID相同),优先级由RTR位决定。节点A凭借显性RTR位获得优先权,发送该数据帧。节点B失去发送优先权,转而接收总线,从而获得并读取节点A发送的数据帧。(用来提高can传输效率)

R0,R1位

R0位为保留位,用于将来辅助扩展。

Can2.0a中ide属于控制域,can2.0b中ide属于仲裁域名,所以2.0b中加入,r1预留辅助扩展。

IDE:

标准帧 =0;扩展帧=1;

DLC

四位数据。表示数据场包含的字节数。通过数据的字节数,接收节点可以判断接收到的数据是否完整。

数据域(场)

数据域(场):64位=8字节组成,包含数据帧包含的内容,内容长度由DLC确定。一个数据域可以包含多个内容(如发动机温度和转速)。

CRC域

CRC域:包含15位的校验码和一位隐性的界定符,界定符之前按照规则进行位填充。为了识别传输过程中的干扰。

CRC校验的原理这里不讲:主要发送节点根据发送的报文算出一个CRC校验码,接收节点依据接收到的数据再算出一个校验码。比较两个是否一致即可得知数据是否被干扰。

879da876006b0923ce274b2263f8d137.png

ACK:

发送节点将该位设置位隐性位,1;接收节点接收报文后,CRC校验通过,则置ACK位显性0。所以,若接收节点接收的报文中ACK位为显性位,则说明至少有一位节点接收到了正确的报文。

EOF:

结束帧。7位隐性位1;

ITM:

固定格式,3个连续的隐性位。用于分开各个报文帧。帧结束EOF和ITM加起来10位隐性位后,can总线允许新的报文被发起,若没有报文发起,则进入空闲状态。只有数据帧和远程帧必须加上ITM(帧空间),错误帧和远程帧在上一帧结束后直接发送。

错误监测:

CRC错误。即检验错误。接收节点计算的CRC和报文中的CRC不一致则产生错误。

格式错误:有些帧有固定的格式,如CRC界定符,结束帧等。若监测到这些位非法格式,则报告错误。

ACK错误:发送节点会置ACK位位隐性1。接收节点若错误校验通过会置该位为显性0。

节点错误状态

   每个节点都有一个:REC接收错误计数器;TEC:发送错误计数器;当接收错误产生时,REC增加,正确接收到数据帧时,REC减少;TEC同理。

    为了尽量减小网络上故障节点的负面影响,进而提供故障界定,CAN 定义了一个故障界定状态机制。一个节点可能处于下列三种错误状态之一:

fdbb5c86a8060fbf4ab3b45d7c4b4582.png

     1、错误主动(ErrorActive)

    当一个错误主动节点检测到错误时,它将发送一个错误主动帧,该帧由6 个连续的显性位组成。这一发送将覆盖其他任何同时生成的发送,并导致其他所有节点都检测到一个填充错误,并依次放弃当前帧。

    当处于错误主动状态的节点检测到一个发送问题时,它将发出一个活动错误帧,以避免所有其他节点接收信息包。无论检测到错误的节点是否要接收这个数据都要执行这个过程。

    2、错误被动(Error Passive)

    当一个错误被动节点检测到错误时,它将发出一个错误被动帧。该帧由6 个连续的隐性位组成,这个帧可能会被同时出现的其他发送所覆盖,如果其它站点没有检测到这一错误将不会引起丢弃当前帧。

    3、 离线 (BusOff)

处于离线状态下的节点不允许对总线有任何影响它在逻辑上与网络断开。

成文说明:本文图片部分来自《bosch汽车电气与电子》;部分来自网络上一篇文章《can基础教程》。最后,希望本文能给各位的工作和学习带来灵感。本文位经验之谈,省略很多细节。若要深究,需要查阅微机、电子电气、传输协议相关的书籍和论文。为巩固知识,推荐用matlab-vehicle Network ToolBox、CANoe进行仿真学习。
从can总线上得知了报文的ID和数据,但是我们还无法得知ID和数据代表什么意义。所以,接下来需要学习J1939协议。在车辆行业中,需要对CAN总线上的每个报文ID和数据做出标准的解释,并形成文件,这个文件为DBC文件。
Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐