CAN协议:恢复管理、帧间隔设置、错误标志等
相信搜到这篇文章的小伙伴已经通过各种途径学习过CAN基础相关的内容了,但是秉持追根的态度对于一些机制还是比较困惑,这里个人就将当初自学的一些见解发表,以供大家学习,错误之处欢迎批评。
1、为什莫主动错误状态的帧间隔是3位,被动错误状态的帧间隔是11位呢?
经过基础学习我们指导,主动错误状态的节点意味着此节点相对可信,被动错误状态的节点相对不可信。基于此CAN总线对于帧间隔提出了不同设置
主动错误—3个隐性位
被动错误—11个隐性位
11位大家联想到是不是总线空闲状态的判断呢。当总线节点监听到有连续的11位隐性时,会认为总线空闲占据总线。所以为了避免错误,需要在被动错误状态下的节点发送数据后把总线让给那些处于主动错误状态的节点,因为人家更可信嘛。因此这就是为啥被动错误状态的帧间隔是11位的原因。
2、错误帧中的重叠部分如何来的呢?
如上图所示,重叠的产生原因就是因为CAN的位填充机制(每五个极性相同位插入一个极性相反位)。某个时刻总线上只有被动错误状态的节点,当其中一个被动错误状态节点发生错误产生错误帧时,其他被动错误状态节点在某位会判断为“位填充错误”,然后发送一个错误帧。两个被动错误状态节点的错误帧经过线与机制重叠后,反馈到总线上就会产生重叠部分。
3、错误状态的恢复管理为啥不用自动恢复,OEM反而要制定先快后慢的恢复机制呢?
自动恢复:128次连续空闲位
快恢复/慢恢复:自定义
下电恢复:重启车辆
我们计算下自动恢复的时间:128x11x位时间,假设总线速率1mbit/s,位时间就是0.0000001ms,一次自动恢复时间就是0.00015ms,各位攻城狮明白这个时间对于硬件来说到底有多短,既然恢复,那肯定这个节点已经相当不可信了,那你这麽快就恢复过来是不是有风险呢?所以oem自定义了快慢恢复,快恢复一般是500ms,进行五次,慢恢复是1000ms左右,进行一次。
快恢复最快恢复时间=自动恢复时间
快恢复最慢恢复时间=128x最长数据帧x位时间-----因为要连续检测11位隐形只有在被动错误的帧间隔才可以,考虑最长的情况就是发送最长数据帧的时候。
4、CRC是如何计算的?–待更新
5、CAN通讯为何有如此多的校验机制呢?
通过学习我们知道CAN的验错方式有:回读机制,位填充机制,CRC循环冗余校验,固定位等。可能初学时我们自己理解这样做就是为了保证通讯质量设置的,验错当然越多越好。但其根本原因在于CSMA载波监听机制的不确定性,如果有涉猎flexray的朋友,知道FR也是CRC校验,但是并没有其他过多的验错,是因为FR采用的为TDMA时分多路访问机制,时分多路机制已经确定了何时何处何人来发送数据(通信调度表),数据传输是确定的可预测的,因此不需要多次对总线上的数据进行校验,只需要在帧头和帧尾就行两次CRC校验即可。网络上对FR的介绍大多只停留表面,作者的其他文章会对flexray做深入介绍,可翻阅相关文章。
本文来自博客园,作者:{张一默},转载请注明原文链接:https://www.cnblogs.com/YiMo9929/p/16533603.html