干货分享丨浅谈CAN总线的仲裁机制

原创 2020-03-04 16:22:00 CAN总线 CAN仲裁

随着工业技术不断发展,CAN总线已广泛应用于车辆、航空、医疗等高安全要求领域。高频发送CAN报文也成为安全测试的必要组成部分。

在信号正常的网络上高负载率发送测试时,总线上偶然会出现许多意想不到的问题,例如出现大量错误报文、被测设备报文周期出现异常、甚至总线锁死等,这个时候我们则需要考虑一下CAN网络上的仲裁是否发生了异常。

01、什么是总线仲裁

系统中多个设备或模块可能同时申请对总线的使用权,为避免产生总线冲突,需由总线仲裁机构合理地控制和管理系统中需要占用总线的申请者,在多个申请者同时提出总线请求时,以一定的优先算法仲裁哪个应获得对总线的使用权。只有获得了总线控制权的设备,才能开始传送数据。

 

 

02、CAN总线仲裁机制

报文的优先级,是通过对 ID 的仲裁来确定的。CAN总线上有两种电平状态,如果总线上同时出现显性电平和隐性电平,总线的状态会被置为显性电平,CAN正是利用这个特性进行仲裁。

对于CAN来说,0为显性,1为隐性。所以当对不同的ID号来进行仲裁时,ID号越小,优先级越高。对于标准数据帧和扩展数据帧的仲裁,如下图黄色所示,标准帧中的RTR为0,SRR中为1,所以标准帧的优先级更高。

 

 

当总线空闲时,有多个节点同时需要发送报文,那么每个节点的发送器将会对发送位的电平和被监控的总线电平做比较。

如果电平相同,那么该节点可以继续发送;如果发送的为一“隐性”电平(1),但是监控到一“显性”电平(0),那么该节点失去仲裁,必须退出发送状态,只到下一次总线空闲的时候在参与总线的仲裁竞争。

 

 

 

03、关于CAN总线仲裁的疑问

1)什么时候出现CAN仲裁?

当总线上的节点监听到总线空闲时,此时2个及以上的节点同时向总线上发送数据,此时会触发CAN总线仲裁机制,来避免数据发送错误。

2)那么总线仲裁丢失的节点,失去总线控制权后,立即转为接收么?

根据标示符判断帧的优先级,优先级高的继续发送,低的退回,等待高优先级帧发送完成,总线空闲后再进行发送。

需要注意的是在整个过程中两个节点都在监听总线,也就是说接收是不受发送状态限制的,也就没有转为接收这一说,所以也就不会出现数据不完整的帧,所以仲裁期间发送的位也是可以接收的。

(3)如何减少仲裁事件的发生?

CAN总线中的节点在仲裁失败、发送失败或者请求发送时总线被其他节点占用,一般会在下一次空闲到来时请求发送。总线负载率越高,遇到上面的情况概率也就越大,因此仲裁事件的发生常出现在高负载率的总线环境下。如果可以控制总线负载率在合理范围内,可以大大减少仲裁事件的发生。

CAN总线采用载波监测,CSMACA的通信模式。这种总线仲裁方式允许总线上的任何一个设各都有机会取得总线的控制权并向外发送数据。如果在同一时刻有2个或2个以上的设各要求发送数据,就会产生总线冲突,CAN总线能够实时地检测这些冲突并对其进行仲裁,从而使具有高优先级的数据不受任何损坏地传输。

相关产品 >

  • OKT507-C 开发板

    CPU: T507 工业级处理器,超低功耗,10年+生命周期|推荐全志工业级T507开发板系列,飞凌OKT507-C开发板采用全志T507 四核工业级处理器 T507设计开发,Cortex-A53架构,工业级宽温,性能强,低功耗,是一款高性价比的工业级产品,提供丰富的开发设计资料,提供产品规格书,软硬件手册等,全志的T507适用于车载电子、电力、医疗、工业控制、物联网、智能终端等领域。

    了解详情
    OKT507-C 开发板
  • OKMX6ULL-C开发板

    40*29mm,双网双CAN,8路串口| i.MX6ULL开发板是基于NXP i.MX6ULL设计开发的的一款Linux开发板 ,主频800MHz,体积小,其核心板仅40*29mm,采用板对板连接器,适应场景丰富。 了解详情
    OKMX6ULL-C开发板

推荐阅读 换一批 换一批