CAN协议--- 总线仲裁机制

一、CAN总线的仲裁机制

        can总线只有一条,当多个ECU节点想同时发送数据时,就需要一种仲裁机制只允许一个ECU发送报文成功。

        结论:多个ECU节点同时发送报文,报文的id(标准数据帧的标识符)越小,优先级越高。 

        CAN总线的总线仲裁机制是一种非破坏性的仲裁机制, 既不会造成已发送数据的延迟,也不会破坏已发送数据的仲裁机制。

二、前置知识

        ECU发送报文(电平)的同时,也在读取总线上的电平。can报文的发送是依靠连接在总线上的CAN收发器。CAN收发器内部有两个端,一个是被标记为Tx标记端,一个是被标记为Rx接收端,它们同时进行工作,也就是说它们一边发一边接收。

        每一个节点通过它们的收发器时时刻刻监视着总线上的电平信号。

        假设当前总线有3个ECU节点,有任意一个节点发送了一个显性的低电平(硬件物理层讲就是接地), 总线上由于开路接地就导致总线上是低电平,呈现出显性的状态。只有当总线上所有的节点都在发送高电平时,总线上才呈现出隐性的状态。

三、仲裁过程

        我们用三个节点A、B、C举例。

        假设A、B、C三个节点想同时发送报文,节点A、B、C发出的CAN报文标识符分别是0x67C、0x65A、0x65D,显然节点B的报文id最小。

        如下图:帧起始时,节点A想发送的是低电平,实际上总线上回读的信号也是显性的,两个信号一致。因此,节点A可以继续发送报文。

       如下图: ID的bit位5,节点A发出的是隐性电平1,节点A发出的高电平,但回读到的是低电平(因为被节点B、C拉低了)。因此,认为节点A仲裁失败。 一旦一个节点仲裁失败,就不会继续发送报文,转为只接收只接听的模式。

        而节点B、C发送的电平和回读的一致,因此可以继续发送报文。

         如下图:bit位为2时,节点C仲裁失败,节点B胜出可以继续发送完报文。

四、总结 

        仲裁看节点发送的电平是否和总线上对应的电平一致,一致就可以继续发送;否则仲裁失败,停止发送。这种仲裁机制的巧妙之处在于不需要额外地发出专门做裁决的报文,既不浪费时间,也不破坏报文数据。

        其中非常根本的一个底层机制是,一旦某一个节点发出显性电平,总线的电平就会呈现出显性的低电平0(这样发出高电平1的节点自然仲裁失败,因为id小的优先级高)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值