CAN:SRR位有什么用

  • Post author:
  • Post category:其他



目录


问题来源


问题


答案


思考过程(错误的思路)


详细解答


1. 标准格式的数据帧与遥控帧仲裁


2. 扩展格式的数据帧与遥控帧仲裁


3. 数据帧的标准格式与扩展格式仲裁


4. 遥控帧的标准格式与扩展格式仲裁


参考链接


问题来源

上图是CAN的数据帧的两种格式,在扩展格式中SRR是固定数值,SRR位永远置1,对它的解释 一般是‘代替标准帧中的  RTR 远程请求位,无实际意义’。

于是想到了一个问题,永远保持一个固定数值,真的没有任何意义吗?没有意义的话,为什么寸‘位’寸金的帧结构要专门留一个位置放它呢。

问题

CAN-数据链路层-Data Frame-扩展格式中:SRR位永远置1,为什么还要保留?

答案

最主要的作用是,划分标准帧与扩展帧的优先级。SRR确保竞争时,标准帧优先于扩展帧。SRR之后的IDE也是同样的作用。

其实,如果把问题改成,为什么SRR永远置1而不是置0,这个答案就呼之欲出了。

思考过程(错误的思路)

最初思考时,主要猜测保留SRR位有3个方面的可能性:

1. 使帧结构尽量一致(标准帧与扩展帧) 2. 冗余设计 3. 隔离作用

其中2,3稍微有点是 给它硬掰过去的优点,毕竟要说是隔离作用,SRR后面 还有IDE,要说是荣誉设计,还有r0,r1。

相对来说只有1的意义稍微说得通一点。

因 扩展格式与标准格式的最大区别就是,ID的位数不同,扩展格式的ID有28Byte,标准格式的ID是11Byte 是在原本的11Byte的基础上,增加了18Byte。

一般来说,只是增加18Byte,那么可以设计为 连续的28Byte,然后再增加IDE为r位即可。可是实际却没有这样设计。

实际的设计如上面的图片:

  • 扩展格式:11Byte ID + SRR + IDE + 【18Byte ID + RTR + r1】 + r0 +下一个Field。
  • 标准格式:11Byte ID + RTR + IDE + r0 +【 下一个field】。

如果把增加的18Byte看成是‘下一个field’,那么 两者的帧结构及其相似。而之所以这样是因为

猜测

帧结构尽量一致的话,可以减少帧结构的类型,减轻收发器识别的计算复杂度。

但这个解释也不太能说得通,如果是为了维持帧结构变化少,那么扩展格式中 r0的位置应该在【18Byte ID + RTR + r1】的前面,如下:

  • 扩展格式(实际):11Byte ID + SRR + IDE + 【18Byte ID + RTR + r1】+ r0 +下一Field。
  • 标准格式(实际):11Byte ID + RTR + IDE + r0 +【 下一field】。
  • 扩展格式(假设):11Byte ID + SRR + IDE + r0 +【18Byte ID + RTR 】+ r1 +下一Field。

至此推翻了所有关于保留SRR位的猜测。

也没有思路,准备就此作罢的。然后在记录这个问题到思维导图的时候,突然想搜一搜之前的笔记,有没有关于这个位的记录,合并处理一下。结果发现了意外之喜——看到了一条意义明确的记录:

这条记录来自

CAN总线的特点和帧结构

这篇文章。里面详细介绍了SRR位的作用,以及与RTR、IDE组合使用的几种情况。下面在这里转述一遍。

详细解答

仲裁的最基本情况1是:在ID的前11位就能结束仲裁。

而当在ID的前11位未结束仲裁,即说明前11位ID相同。这时需要进一步分为4种情况来讨论:


1. 标准格式的数据帧与遥控帧仲裁

因为ID18后是RTR位,数据帧的RTR位恒为显性,遥控帧的RTR位恒为隐性。此时数据帧将仲裁胜出,即前11位ID号相同时,标准数据帧的优先级高于标准遥控帧。


2. 扩展格式的数据帧与遥控帧仲裁

当前11位ID和后18位ID全相同时,由于这种情况下的SRR位和IDE位均为隐性,故也是看RTR位。扩展数据帧的RTR位恒为显性,扩展遥控帧的RTR位恒为隐性,此时数据帧将仲裁胜出。即前11位ID号相同时,扩展数据帧的优先级高于扩展遥控帧。

在前11位ID相同,后18位ID不相同时,仲裁过程与情况1一样。

3. 数据帧的标准格式与扩展格式仲裁

因为ID18后,标准格式的是RTR位,扩展格式的是SRR位,仲裁这两位,而标准格式的RTR位恒为显性,扩展格式的SRR位恒为隐性,故此时标准格式的数据帧仲裁胜出。即前11位ID号相同时,标准数据帧优先级高于扩展数据帧。

4. 遥控帧的标准格式与扩展格式仲裁

因为ID18后两者均是IDE位,扩展格式的IDE位恒为隐性,标准格式的IDE位在控制段,恒为显性,故标准格式的遥控帧仲裁胜出。即前11位ID号相同时,标准遥控帧优先级高于扩展遥控帧。

(改天贴图在这里  todo)

通过上述分析,就知道了仲裁段的各种仲裁情况,尤其是在前11位ID号相同时,根据协议设定的RTR, SRR, IDE,就可以保证:


  • RTR

    :保证数据帧优先级高于遥控帧;


  • SRR

    :保证标准数据帧的优先级高于扩展数据帧;


  • IDE

    :保证标准遥控帧的优先级高于扩展遥控帧。

思路

SRR在扩展帧feild划分中属于仲裁场,从这一层来看,也可以理解它的主要作用是用于仲裁。

参考链接


1. CAN总线的特点和帧结构


2. CAN总线学习笔记(2)- CAN协议数据帧与遥控帧_weixin_40528417的博客-CSDN博客_can 数据帧

END



版权声明:本文为lamanchas原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。