我知道在CAN控制器中,如果错误计数达到某个阈值(例如255),则会发生总线断开,这意味着特定的CAN节点将从CAN网络中断开。因此,根本不会进行任何通信。但是,如果上述情况发生在汽车行驶且包含ECU(包括CAN控制器)的情况下怎么办?
CAN控制器中是否有任何自动恢复机制可以避免上述任何情况?
即使发动机控制单元失去了CAN通讯,也不会发生任何壮观的事情。汽车将继续运行。
在总线关闭期间,该节点将被隔离。
CAN等待强制时间段,即128 x 11位(对于250 kbit / s系统为1408位-5.6毫秒),然后尝试重新初始化节点。
发生总线断开时,CAN网络隔离该节点,然后重置该节点,该节点可以开始通信。
恢复机制取决于所使用的软件堆栈。大多数新车都具有符合AUTOSAR的软件实现。在AUTOSAR通信堆栈中,CanSM(状态管理器)模块具有可配置的BusOff监视和恢复。您可以在http://autosar.org中阅读更多内容。
但是,在行驶中的车辆中,BusOff是一种严重的情况。在车辆级别如何处理这是非常特定于系统设计的。但是,在大多数情况下,系统将进入安全操作模式,并且所有参数都将采用预设的故障值,以使车辆以降低的功能运行。您会看到仪表板上的警告灯熄灭以警告驾驶员。 ECU通常符合某种级别的ASIL(https://en.wikipedia.org/wiki/Automotive_Safety_Integrity_Level)标准。这样可以确保在设计和开发过程中考虑并照顾到这种情况。
如您所述,达到特定的错误计数后,该节点将断开连接/禁止在总线上传输任何内容。这是对总线端的描述。
在控制器侧,每个CAN控制器都会在BUS_OFF上产生一个中断。控制器有责任重置CAN控制器并将其恢复到正常状态。
任何汽车中的每个CAN控制器都必须严格遵守。而且这一切都在几毫秒内发生...因此对于驱动程序而言,什么也没有发生!
汽车有一种称为Li行模式,这是汽车网络中所有ecu都失效的情况。然后初始化一组用于ECU的默认参数,然后初始化系统,即在OEM正确维修之前,您的汽车只能继续运行一段时间。
是,如果CAN Tx错误计数达到255,则节点将关闭并可能自行复位。如果问题仍然存在,一个好的实现将不会继续重置节点。
除了此安全机制之外,ECU(电气控制单元)还对它们希望接收的消息的有效传输之间的持续时间进行计时。因此,如果引擎控制器离线,则车辆中几乎每个ECU都会报告“与引擎控制器的通讯丢失”。
通常,此类CAN问题由以U开头的DTC(诊断故障代码)标识,例如:http://www.obd-codes.com/u0115
根据问题的严重性,车辆可能会进入“ lim行回家”模式,或者可能被完全禁用。除非有一些篡改,否则车辆上的CAN总线出现的问题极为罕见。
当ECU检测到BUS_OFF故障时,ECU应该停止排放,因此这是一个很好的问题。
具有自动恢复机制: