CAN总线仲裁原理

时间 : 2023-06-21 15:33:58 来源 : 个人图书馆-新用户3849ayns

CanID作用1CanID作用目前,CAN(Controller Area Network)总线是车辆中使用最为广泛的一种总线类型。但是,在上个世纪80年代初期,CAN总线未被发明之前,汽车工程师们对当时的整车网络拓扑吐槽不已。笨重的线束连接使得整车质量不断增加,不仅增加了车辆油耗,而且使得车辆维修变得更加复杂。为改变此现状,1986年2月,Bosch 公司在SAE(汽车工程协会)大会上,提出了一种新型的

CanID为什么要参与总线仲裁呢?什么样的报文需要参与总线仲裁呢?

先不着急回答,我们先看如下一个CAN网络拓扑,此拓扑中,存在三个ECU:ECU1、ECU2、ECU3。其中ECU1包含两路CAN(CAN1、CAN2),ECU2包含一路CAN1,ECU3包含一路CAN1,4个CAN节点均通过双绞线挂接在一条CAN BUS上,如下所示:

整车中,每个CAN节点都带有各种各样的报文,比如:应用报文、诊断报文、网络管理报文、标定报文等。根据每个节点功能,节点需要外发的应用报文从几个到几十个不等。如果在某一时刻,比如:下图中的t1时刻,4个节点都有报文需要外发,谁先发送呢?谁应该先获取CAN BUS的使用权限呢?


(资料图片仅供参考)

至此,本节开始的两个问题,我们应该有了答案:

将如上的仲裁过程总结成一句话:CanID越小,优先级越高。

工程项目中,相比其他类型报文(诊断报文、标定报文、网络管理报文),往往应用报文的优先级高,为什么呢?由于应用报文所携带的功能信号(Signal),主要给算法使用,算法的处理时效关系到整车的功能,因而应用报文CanID一般都比较小(优先级高),以便于其优先获得总线的使用权。

4CanID在CAN报文中位置

了解了CanID如何利用“线与”进行仲裁还远远不够,我们还需要清楚CanID在CAN帧的位置以及CAN帧结构。

每一个CAN报文的CanID由唯一标识的11bit/29bit构成。以经典CAN帧为例,11bit CanID在Can帧中的位置如下所示:

CanID的仲裁就是第一小节中提到的仲裁规则。

SOF(Start of Frame)由一个Bit组成,且常显性(“0”),SOF是CAN报文的第一个Bit,标识着一帧报文的开始,CAN总线上的所有节点都可以在此时参与竞争,发送各自的报文。

SOF之后就是Identifier(仲裁域),即各个节点要外发的CanID,通过CanID的仲裁,优先级高的报文被优先发送。同时,对应节点优先获得CAN总线的使用权,该节点可以继续发送后续的数据,而仲裁失败的节点则停止数据的发送,转而进行数据的接收,只能等待下一个SOF时刻再去仲裁。

5CanID仲裁示例

假设:t0时刻,ECU1::CAN1要发送CanID为0x367的报文,ECU2::CAN1要发送CanID为0x301的报文,ECU3::CAN1要发送CanID为0x405的报文。分析一下0x301报文如何赢得总线使用权。

Step1:t0时刻,SOF之后,三个节点各自开始发送对应报文的CanID;

Step2:t1时刻,由于ECU3::CAN1对应的bit10值为1(隐性位),被ECU1::CAN1和ECU2::CAN1的显性位(数值为0)覆盖,ECU3::CAN1仲裁失败,失去总线使用权,进而进入监听模式,即:只能接收数据;

Step3:t2时刻,由于ECU1::CAN1对应的bit值为1(隐性位),被ECU2::CAN1的显性位(数值为0)覆盖,ECU1::CAN1仲裁失败,失去总线使用权,进入监听模式。至此,ECU2::CAN1独占总线使用权,继续发送后续数据。

标签:

X 关闭

X 关闭

热门文章