《工业控制计算机》2023年第36卷第2期CAN总线(即ControllerAreaNetwork,控制器局域网络)CAN总线功能的实现离不开CAN控制器和CAN驱动器[1],以及中央处理模块对发送接收数据的处理。CAN控制器的实现除了采用相关硬件器件以外,还会采用在FPGA内使用IP核(知识产权内核)的方式来实现。IP核即完全实现了CAN控制器功能及CAN2.0B协议的代码内核,采用IP核的方式不但节省了PCB布板空间,更重要的在于,一旦CAN总线发生故障,特别是FPGA内部的故障[2],通过IP核内部的HDL(硬件描述语言)代码能够精确定位到CAN总线错误的状态和位置,能够方便地定位故障原因,对CAN总线错误的研究及仿真有着重要的实际意义。本文采用Verilog语言编写的IP软核[3],在FPGA内部实现了CAN控制器以及CAN总线协议的功能,在FPGA开发软件ISE14.7当中使用Verilog语言编写仿真平台,采用ISIM工具对CAN总线错误进行功能仿真和分析。1CAN总线状态的分类及转换根据CAN2.0B协议,CAN总线节点的错误状态可以分为以下三种[4-5]:1)主动错误状态。处于主动错误状态的节点可以正常参与总线上的通信,而且可以在检测到错误时送出主动错误标志。主动错误标志由连续6个显性位构成。当节点检测到错误时,错误计数器(发送错误计数器TEC或接收错误计数器REC)计数累加。2)被动错误状态。当错误计数器累加到大于127时,节点状态转为被动错误状态。处于被动错误状态的单元也能正常参与总线通信,但是为了不妨碍其他节点通信,在检测出错误时发送被动错误标志,被动错误标志由连续6个隐性位组成。处于被动错误状态的节点即使检测出错误,如果总线上其他节点没有错误,整个总线也被认为是没有错误的。当节点检测到错误时,错误计数器值继续累加。3)总线关闭状态。当发送错误计数器(TEC)累加到大于255时,节点状态转为总线关闭状态。处于总线关闭状态的单元不能参与总线通信,不能发送或接收任何数据帧,相当于从总线上离线出去。其他节点可以正常通信。处于总线关闭状态的节点,当在总线上检测到128次连续11个位的隐性位后,自动转为主动错误状态。CAN总线节点状态转换过程如图1所示。通过CAN总线节点状态的划分,CAN总线能够区分临时故障和永久性故障,处于短期干扰导致的临时故障时,并不妨碍CAN总线的正常通信,而处于永久性故障时,则会自动断开故障节点,以保障其他节点的正常通信。图1CAN总线节点状态转换图2CAN总线错误种类及触发机制在CAN2.0B协议中,对CAN总线错误的种类...