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 关闭