什么是仲裁,它如何与CAN合作?

28 7月 2024 在 23:00
Ixxat
CAN仲裁通过逐位比较解决总线接入冲突,确保保留具有最低标识符的消息,从而实现高效无损的通信。

使用CAN,根据分散总线访问的原则,通过总线参与者进行总线访问,完全不协调。由于对于分布在网络上的应用程序进程来说,发送消息的请求通常是异步的,因此多个参与者可以同时开始发送消息。然而,一般来说,参与者只有在以前是免费的情况下才能乘坐公共汽车。 

每当多个参与者同时开始发送消息时,选择阶段(仲裁阶段)将决定哪个参与者可以在选择阶段结束时留在总线上。像这样的总线访问冲突是通过逐位连接消息仲裁字段的位来解决的。CAN报文的仲裁字段由报文标识符和RTR位(远程传输请求位)组成,用于区分数据帧和远程帧。

在CAN标准格式中,报文标识符的长度为11位。在扩展格式中,消息标识符的长度为 29 位。首先传输标识符的最高有效位。

逐位仲裁的基础是区分两个物理总线电平,即显性(覆盖)和隐性(让动)电平。这种电平比可以很容易地描述,例如通过集电极开路激活(“有线和”连接)。 

 

Realization of dominant/recessive level based on a wired-and connection

基于有线和连接的显性/隐性电平的实现。在本例中,总线电平 0 (0 V) 是显性的,而电平 1 (5 V) 是隐性的。

 

在示例中,如果没有参与者将总线拉到 L 电平,则总线仅处于 H 级 (5 V)。因此,H 水平对应于隐性水平,而 L 水平对应于显性水平。隐性/显性电平比也可以使用光学介质表示。在这种情况下,隐性水平由“暗”状态表示,显性水平由“亮”状态表示。 

只要公共汽车是免费的,它就处于隐性水平。占用总线的参与者通过打开主位(帧开始,SOF)来发出信号。 

在仲裁阶段,每个发送参与者将其打开的总线电平与总线上的实际电平进行比较。每个发送了隐性位并观察到显性位的参与者立即停止其仲裁尝试,并成为另一个参与者发送的消息的使用者。在仅将标识符分配给一条消息并且逻辑零由主总线级别表示的前提下,在仲裁过程结束时,只有消息具有最低标识符值的参与者仍保留在总线上。因此,消息优先级越高,分配给此消息的标识符值越低。

 

CAN协议中的仲裁过程示例。参与者 1、2 和 3 同时开始仲裁尝试 (1)。参与者 2 在时间 (2) 失去总线访问权,而参与者 1 在时间 (3) 失去总线访问权。因此,两个参与者都进入接收状态;在仲裁阶段 (4) 结束时,只有参与者 3 具有总线访问权并将其消息切换到总线。

 

因此,CAN协议中基于报文标识符的底层逐位仲裁确保了在多个参与者同时占用总线的情况下,总线上始终只有一个参与者。该参与者发送的消息不会在此处销毁,因此这需要“无损失”总线仲裁。 

如果某个消息的传输同时由生产者作为数据帧发起,而消费者作为远程帧发起,则仅基于消息标识符无法解决仲裁冲突。在这种情况下,标识符后面的RTR位(远程传输请求位)决定总线访问权限。 

逐位仲裁的原理是基于仲裁参与者将其打开的位值与总线上存在的实际值进行比较。 因此,在确定接通位后最早可能的采样时间(比较时间)时,必须考虑参与者之间的最大可能信号传播时间和参与者内部信号延迟。因此,逐位仲裁过程限制了给定数据速率(即比特持续时间)下可能的最大网络扩展。 但是,我们将在另一篇博文中讨论此主题。