是时候聊一下CAN总线了(尾声)——还有一些没说的

文/Edward

 1  错误帧和过载帧
1.1  错误帧
CAN总线的差分传输和传输特性可以最大程度地保证它传输的可靠性,但是即使这样,还是有一些情况下的错误很难通过传输规则来避免,因此CAN总线针对这些错误规定了一种错误机制,这就是CAN总线的错误帧。
一般来说,常见的CAN总线错误有5种,这5种错误分别为:
  • CRC错误:接收节点计算出来的CRC值与发送节点输出的不一样,此时CAN Bus抛出CRC错误。

  • 格式错误:传输的数据帧格式与CAN总线规定的数据帧格式不一致,此时CAN Bus抛出格式错误。

  • 应答错误:发送节点在ACK期间没有收到CAN Bus上面节点的回复响应,此时抛出ACK错误。

  • 位发送错误:发送节点在发送时发现总线上面电平的状态与发送电平不相同,此时抛出位发送错误。

  • 位填充错误:CAN总线通讯电缆上传输的信号,违反位填充规则时,此时CAN Bus抛出位填充错误。

一旦上述5种错误中的任意一种发生时,CAN总线的接收节点或者发送节点将会发送出错误帧。错误帧的结构由“错误标志”和“错误界定符”两部分所构成,如图1所示。
图1 错误帧格式
CAN总线上的任意节点一旦发生错误时,它就会按照上述的方式发送错误帧,但是发送错误帧的时候,这根总线就被这些错误帧占据了。因此,为了防止由于某些原因导致某一节点无法正常接收而一直发送错误帧,CAN总线规定了每个节点的三种状态,以及采取的相应措施。如图2所示。
图2 CAN总线节点错误状态迁移
1.2  过载帧
当CAN总线上一个节点向另一个节点发送一帧CAN报文,而此时接收节点还没有做好接收下一帧的准备,那么此时接收节点就会发出一帧过载帧来通知发送节点。说直白点就是某一节点接收到的前后两帧CAN消息的时间间隔,超出了它自己的处理能力。
CAN总线过载帧的格式如图3所示。
图3 过载帧格式
细心的你可能会发现,这个过载帧的格式和错误帧一模一样。没错,它们就是一模一样的格式。那么问题来了,究竟我们该如何来分别错误帧和过载帧呢?答案是过载帧只能在帧间间隔产生,因此可通过这种方式区分过载帧和错误帧(错误帧是在帧传输时发出的)。
节点在两种情况下会产生过载帧:
  • 节点在帧间间隔检测到非法显性位。在IFS 的第三位期间检测到显性位除外。这种情况下,接收器会把它看作一个SOF 信号。

  • 由于内部原因,节点尚无法开始接收下一条报文。节点最多可产生两条连续的过载帧来延迟下一条报文的发送。

 2  CAN总线的思考
以上就是CAN总线的全部内容,CAN总线以其稳定的传输性能,被看作是20世纪80年代至今最优秀的串行实时总线之一。它极大地推动了现代汽车工业的发展,各大车企纷纷迈向模块化造车的领域。
但是CAN总线发展至今已经多少有些疲惫了,有点满足不了时代的发展了。CAN总线的应用就连它诞生的汽车行业也越来越少了。各大汽车厂家极大地减少了CAN的应用。现在家用汽车上面一些实时性不高的控制,全面使用了LIN。而且汽车目前ECU的控制对象越来越多,速度要求越来越高,因此在ECU控制方面,FlexRay也早已替代了CAN总线,因为在传输速度方面,1M的CAN 远远不是10M的FlexRay的对手。另外一方面,现在家用汽车多媒体应用,早已是MOST总线的天下。
我们前面说过CAN总线只规定了链路层及以下的收发规则,因此在实际应用中,出现了很多针对CAN总线应用层的协议,其中最著名的莫非是CAN Open莫属。目前,虽然CAN总线的发展已经多少有些跟不上时代了,但是它的应用层协议却还引领着一个邻域的潮流,这就是实时以太网领域。
现在,用的最多的实时以太网有Ethernet PowerLink、PROFINET、SERCOS III、EtherCAT和Ethernet/IP。其中Ethernet PowerLink就是在普通以太网的链路层上面部署了一套CAN Open协议。
而虽然汽车行业使用CAN总线的比例在减少,但是仍然不得不承认CAN总线是一种最优秀的通讯总线之一,我们在需要一些实时控制的时候,使用CAN总线仍然是一个最方便,最省心的选择。
这几篇文章都是在说CAN总线,那么今天给大家推荐个车用产品,冬天了,大家防冻液什么的可能都已经更换,但是最容易被忽视的就是玻璃水,其实玻璃水也有冬夏之分,要是没有选对,冬天可能会冻住甚至冻裂玻璃水水壶。
车仆冬季玻璃水,零下25℃防冻,大品牌,现在¥88即可购买6瓶2L装,购买点击以下链接👇👇👇
今天提到了一个词,即实时以太网,工业控制行业的小伙伴们一定要速速去了解,5G时代到来之前,很多智能工厂的实时控制都会用到。而Ether CAT是德国倍福公司退出的一种成熟的实时以太网。
(0)

相关推荐