CAN总线由博世公司于1987年开发,1993年成为标准,在近23年的时间里获得了巨大的成功,逐渐替代了其它相近的总线,2001年的节点采用量已超过1亿。但是,曾经力推CAN总线的厂商,如宝马、博世、飞利浦等,目前都开始支持新的总线。对于推动新总线研究的原因,X-By-Wire的发展是一方面,但从根本上讲,消费者的安全需求才是最重要的原因。根据新闻报道:在CAN的发源地德国,2005年汽车抛锚事故中有35%是电子装置引起的。因此,电子控制系统及其通信系统的可靠性是一个敏感的问题,即使没有采用X-By-Wire,仍然使用常规的液压气动机构,也需要一种更为可靠的新总线来代替CAN。
车内通信有两个最基本的要求:一是数据内容正确;二是通信及时,序列一致。对这两点,CAN总线中均有所设计,但仍存在着不一致性、不可预测性、信道出错堵塞等漏洞。
1)不一致性
CAN总线中有一个著名的Last-But-One-Bit错误。CAN总线2.0A在信息认证(Message Validation)中规定:发送器验错的范围可覆盖到帧结束,如果发现错误,以后就按优先权和状态的规定重发;接收器验错的范围覆盖到帧结束的前一位。因此,如果由于空间干扰、电源波动等原因,对于帧的倒数第二位,一部分节点A认为无错,一部分节点B认为有错,即出现了所谓的Byzantine错误。这时,根据EOF应该是7个隐性位,节点B认为这是一种形式错误,所以就会启动错误帧,通知发送器重发,同时丢弃收到的帧。而认为没错的节点A由于只查到倒数第二位,因此就会接收此帧。如果在发送器例行的下一次发送前B通知的重发成功,A就会收到重复帧;如果重发不成功,B就丢了一帧。在转向和制动系统中,4个轮子对命令的不同理解,可能造成性能的下降或其他更严重的后果。
2)不可预测性
CAN总线将节点状态分为Error Active、Error Passive和Bus Off三种,这三种状态在一定条件下可以互相转换。不同状态中节点的发送有不同的延迟。最高优先权的信息发送延迟有几种可能:当节点状态为Error Active时,若总线空闲,则立即发送;当节点状态为Error Active时,如果其它帧正在发送,则需等正在发送的报文结束后,再过3位后发送;当节点状态为Error Passive时,它有一个出错重发的要求,若没有其它帧要发送,等3位传送(Intermission)和8位挂起传送(Suspend Transmission)后重发;当节点状态为Error Passive时,若总线空闲,出错后等别的信息发送完后再发,等待时间与其它帧的长度有关;当节点状态为Bus Off时,需等状态恢复到Error Passive或Error Active再发。
当确认某节点的状态时,还有几个因素需要考虑:首先,节点由最高优先权的信息和其他信息共用,因此,其他信息在传送过程中出现的错误也会影响到节点状态;其次,进入Error Passive或 Bus Off状态的条件是发送错误计数器与/或接收错误计数器的值,由于CAN的原子广播特点,其它节点的发送错误或接收错误会开启一个错误帧,从而影响到该节点的接收错误计数器的值,进而影响节点状态。
对于优先权较低的信息来说,发送时间的离散程度更大。在反馈控制系统中,采样调节周期的大范围抖动相当于信号延迟后的变化,它有可能使系统性能下降或不稳定。在与安全相关的开环系统中,抖动可能造成动作顺序的混乱。
3)信道出错堵塞
节点有可能受干扰或其它原因暂时或永久失效,出错的主机会命令CAN收发器不断发送消息,即所谓的Babbling Idiot错误。由于该信息的格式等均合法,因此CAN没有相应的机制来处理这种情况。根据CAN的优先权机制,比它优先权低的信息就被暂时或永久堵塞。
由于CAN总线存在上述几种根本的缺陷,因此,在更为严格的控制系统中,它将会造成巨大的风险,无法满足安全、环保、节能的要求。
CAN的事件触发协议特点限制了ECU的应用、开发与生产,不仅用过的ECU难于重用,而且还不利于改善和开发新的ECU。
一个成功的CAN应用仅在一定的条件下是有效的,簇内所有信息的优先权配置、波特率、通信负荷(所有信息的出现频率和长度)都较为固定,任何一个参数的改变都会使通信的时域分布改变。因此,当需要改变车型时,如果添加了新的功能,或是修改了闭环控制方案,ECU的所有基本功能就必须重新验证,这使工作量大大增加,延迟了新车型的上市时间。同样,对于提供零部件的厂商,同一ECU在不同汽车厂商的汽车上应用时,可能不得不对某些参数进行修改,这需要进行重新的验证和认证,增加了管理的复杂性,也增加了成本。
在事件触发通信系统中,所有的应用都因优先权规则而深深地耦合在一起。这一特点使得由不同的工作组对个别应用同时进行设计、测试和认证的工作无法实现,这一点对期望成为质量与技术进步的汽车厂商来说是难以容忍的。
另外,对CAN的各种改进都难以实现向下的兼容性。自CAN总线问世以来,随着对CAN局限性的认识不断加深,业界提出了各种改进方案,这些方案采用标准的芯片,在底层协议上添加新的规定,使其具有分时通信的功能。如TTCAN、FTT_CAN ( Flexibly Time-Triggered CAN)、ServerCAN、TCAN (Timely CAN)、FlexCAN/SafeCAN 等。其中,TTCAN正在成为业界标准ISO11898-4。但是,这些改进都要对原有的CAN协议进行修改,例如出错时不立即重发,要将事件触发的应用程序改为时间触发的应用程序等。这些改动都是新协议必备而老协议不具备的,因此,原有的带CAN通信协议的ECU如果想要在新系统中应用,也就必须进行修改。
CAN总线的另一个局限因素是传送波特率,十多年前确定的1M波特率由于应用的飞速增加而变成瓶颈。从低速CAN总线、高速CAN总线,以致将来不得不配置第二条高速CAN总线,虽然这或许可以缓解速率问题,但从全局看,总线数量的增加使布线、网关、系统复杂性都随之增加。从技术角度上看,重新设计CAN收发器,提高传送波特率是有一定可能的;但从技术经济角度上看,无法与现有产品相兼容就使这种局部改进失去了意义
CAN总线的缺陷
转载![](https://ucenter.51cto.com/images/noavatar_middle.gif)
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
详解CAN总线:高速CAN总线和低速CAN总线的特性
在ISO 11898-2和ISO 11898-3中分别规定了两种CAN总线结构:高速
ISO 11898-2 ISO 11898-3 CAN总线 汽车电子 嵌入式开发 -
详解CAN总线:CAN总线故障界定与管理
CAN总线故障界定的目标是实现数据传输系统即使在节点发生故障的情况下也能维持很高的可用性。
CAN总线 CAN总线故障界定与管理 CAN错误类型 汽车电子 通信协议 -
can总线介绍
can 协议报文;硬件信号,读写 ;过滤。
can 知乎 Acceptance linux -
can总线资料
应知识星球的同学要求,整理了一些can总线资料。在公众号后台回复 【can总线】获取资料截图推荐阅读:专辑|Linux文章汇总专辑|程序人生专辑|C语言我的知识小密圈 ...
portlet https 软件开发 ssl vim -
浅谈CAN总线
在前面的《浅谈I2C总线》和《
CAN 总线 协议 数据帧 数据 -
详解CAN总线:CAN总线报文格式—错误帧
错误帧由错误标志(Error Flag)和错误界定符(Error Delimiter)组成。
详解CAN总线 CAN总线 汽车电子 CAN总线报文格式 CAN错误帧 -
详解CAN总线:CAN总线报文格式—过载帧
过载帧是用于接收单元通知其尚未完成接收准备的帧,过载帧
CAN总线 CAN总线报文格式 CAN过载帧 汽车电子 通信协议