总线仲裁
- 1.什么是总线仲裁
- 2.为什么要总线仲裁
- 3.怎么进行总线仲裁(总线仲裁机制)
- 3.1 如何确定冲突
- 3.1.1 确定冲突前提
- 3.1.2 同时冲突
- 3.1.3 延时冲突
- 3.2 冲裁逻辑
- 3.2.1 避免延时冲突
- 3.2.1 避免同时冲突
1.什么是总线仲裁
提到总线仲裁的概念,这明显是由两个次合起来产生的一个新词,理解这种词汇我通常就是分开把各自单独的意思理解清楚了,那么合起来的意思也就能大概理解的差不多了。因此我们要把总线仲裁分成“总线”和“仲裁”2个单独的概念来进行理解。
我们首先来说一下什么是总线,通俗意义上来说总线就是在一根通讯传输线上挂载了很多个设备。
由于这些设备共用一根总线,总线上在某一一时刻只允许一个设备进行数据的传输,而总线上挂载的这些设备通常情况下数据发送是随机的。难免不了会有某个时刻有两个设备同时发送数据,这个时候就要引入到仲裁,什么叫仲裁呢?仲裁其实就是判断,也就是说,要决定哪个设备优先发送数据。
这个场景和我们上课那个场景是非常类似的,当老师提出一个问题之后,很多学生举手回答,但是呢,又只允许一个学生回答问题,这时候老师就要承担仲裁的角色,来决定哪个学生回答问题。
2.为什么要总线仲裁
就是要解决总线上两个设备或者多个设备同时发送数据的一个冲突问题,保证这个数据传输的正确性。
3.怎么进行总线仲裁(总线仲裁机制)
同样拿我们刚刚举得例子来进行说明,在课堂上,老师承担了仲裁的角色,那么老师是怎么进行仲裁的呢?也就是说,老师确定这个让这个学生先回答问题的判断标准是什么?有可能是这个学生很优秀,老师比较喜欢,也有可能是这个学生,让老师看到了他眼神中想回答问题的渴望,总而言之呢,就是给了老师一个理由,让这个学生站起来回答问题。
现在的场景是,承担仲裁的角色不再是老师,而是一个叫仲裁控制器的设备,这个设备还好,理解重要的是这个设备,进行仲裁的时候的判断依据是什么?因为我们要让设备自动地完成一个判断,所以说他必须要搞清楚判断依据,也就是说仲裁的机制是什么?
现在请你停下来,自己思考一下,如果是你,你会怎么样?让一个设备去,实现仲裁的逻辑或者说更深入一点,你的这个仲裁逻辑是什么?
3.1 如何确定冲突
那么我们来解决第一个问题,首当其冲的问题是,我怎么知道发生冲突了,就向老师提出来一个问题,那么在老师要判断让哪个学生回答问题之前肯定是有多个学生要回答问题,这个是老师用眼睛看到的,眼睛看到发生冲突了,然后再去执行仲裁逻辑
很明显,如果只有一个学生举手,那我也不需要判断了,只需要让他回答就好了,所以说我们首先要考虑的一个问题是怎么让设备或者说怎么样让机器判断矛盾产生了。然后我们再去想怎么让机器去仲裁。
3.1.1 确定冲突前提
可以基本确定的是,设备是通过检测总线上的逻辑电平来进行冲突检测的,那么这里面有一个隐含的前提就是,在任何情况下,总线上的电瓶都是,逻辑清晰的,也就是说,即使发生了冲突,那么设备也可以明显的检测到总线上的电平是高电平还是低电平,
如果说,同时进行数据发送的两个设备,导致总线上的电瓶逻辑不能被设备准确判断那么,是没办法检测冲突的。
我们以can总线为例,Can总线的通过设置额can h和can l,两根传输线的方式呢,并且在物理层定义了,显性电平和隐性电平,这种方式可以让,总线的电瓶时时刻刻能被设备确切的检测,及时显性电瓶和银杏电瓶,同时发送,到总线上,那么,can总线依然会保持一个显性电平。
大前提满足之后,我们再来探讨冲突发生的时刻, 我在这里根据发冲突发生的时刻分成了两种情况首先是同时产生冲突,这里就是严格意义上的同一时刻产生冲突,是一种比较理想的极限的情况,另外一种是设备a正在往总线上发送数据,但是还没有发完这个时候,设备b盐往走,线上发数据产生的冲突,即他们不是在同一时刻往总线上发数据,产生了冲突。
3.1.2 同时冲突
3.1.3 延时冲突
3.2 冲裁逻辑
CAN总线用了一种机制来避免上述提到的两种冲突的出现。
3.2.1 避免延时冲突
对于can总线而言,处理延时冲突比较简单,Can总线用一个起始位来避免延时冲突,当总线空闲的时候,总线电平为隐性,总线上的某个设备要发送数据的时候,会首先发送一个起始位,这个起始位是显性,其实,为了显性信号会被所有总线上所有设备检测到,检测到之后还没有发送数据的设备停止发送数据直到当前占用总线的设备数据发送完毕,也就是说,通过起始位解决延时冲突,也就是说,上图中a设备先发送起始信号占用总线,B设备监测到起始信号后,认为总线忙碌不会在a设备发送完数据之前发送数据。
3.2.1 避免同时冲突
以上图为例,两个设备同时,往总线上发送数据,在某一时刻,设备A发送隐形电瓶设备b发送的是显性电平,由于CAN总线隐性电瓶会被显现,电瓶覆盖掉的特性,这时候总线电瓶为显性电瓶,看设备在数据发送的同时也进行总线电瓶的监听,由于此时总线电平为显性电平,设备设备a监听到的电瓶与发送的电瓶不相同设备a放器总线控制进行监听不再往总线上发送数据,这就完成了一次设备a和设备b的总线仲裁。
熟悉can总线的人已经清楚了,起始位后面跟的这一系列的隐形隐形电瓶组合,其实就是can总线中的设备ID,那么,总线仲裁过后,哪个设备先发送,哪个设备后发送是可以根据ID来确定的也就是说,不同的ID有不同的优先级。