MM32F0140 FlexCAN一致性测试 (2)
应用层一致性测试
该测试项主要为了验证 ECU 在网络中通信的完整性,一般还包括上层应用层协议的测试,网络管理功能的测试以及故障诊断等方面。
报文的发送一般分为周期性的、紧急事件触发型的以及软件使能型,周期性的报文需要测验周期时长的偏差是否满足规约,另外 2 种类型的报文需要在干扰条件下进行看是否会造成发送失败情况。一般以固定 ID 发送至 CAN 工具(一个 CAN 网络至少需要有 2 个节点),通过上位机的时间戳功能查验。
报文发送周期测试主要是测试 DUT 期性报文的间隔时间是否小于允许误差。在DS301通讯规范中,要求由测试设备触发 DUT 进入周期性发送状态,测试设备接收 1 分钟报文后,进行统计,查看是否有间隔超过 20% 的误差的报文。
另外,一般需要 CAN 具备自动重发功能,可以通过 CAN_MCR.AEN 位实现,官方库例程中默认不使能 CAN_MCR.AEN位。
在发送时还有一点需要注意,FlexCAN具有接收自己发出的报文功能,且库例程中是默认开启该功能的,具体可参见 CAN_CTRL1.SRXDIS 寄存器描述,视情况决定是否禁止启用该功能。
测试 ECU 在不同错误状态下的容错性能,看错误条件解除后是否能够自动恢复通讯。一般测试时需要使 ECU 处于周期性发送报文的状态,且 CAN_H 或者 CAN_L 对电源/对地短路和自己与总线断路的维持时间要超过 1 min 钟保证错误的积累数致使 ECU 处于被动错误状态。
依据 GMW3122 定义,可分为7 种物理错误类型,包括地线漂移、地线丢失、电源丢失、CAN 线中断、CAN 线各短接到地、CAN 线各短接到电源、CAN 线短路等错误状态。如果恢复后,都可以恢复通讯,则通过测试。
实际测试发现,这几种短路和断路条件只会使 FlexCAN 的 Tx error 计数器增加到超过 127 ,进入被动错误状态而不会发生 Busoff ,期间会一直尝试重发,在恢复总线正常后,计数器的值会逐一递减同时由于能够收到正确的 ACK 响应而恢复正常通讯了,恢复的时长也符合标准。下图展示的是 2s 周期发送报文直到恢复正常通讯的实测图:
CAN_H 与 CAN_L 短接会导致 FlexCAN 进入 Busoff 状态,由于官方库例程中默认设置开启了自动从总线关闭状态中恢复的功能,所以在解除总线短路后的一段时间内,ECU 重新恢复正常通讯,自动恢复时长 = 128 x 11 x 位时间(即检测到 128次11个连续空闲状态位电平则恢复,符合 CAN2.0B 标准)。
当 CAN 通信出现故障时,CAN 控制器会让故障节点从主动错误状态进入被动错误状态,甚至进入总线关闭(BusOff)状态,使故障节点脱离总线的通信,使其不影响正常节点的通信,但该控制方案将导致在系统重新上电之前,进入总线关闭状态的节点会持续无法与其他节点做数据的交互,如若节点只是暂时的故障,那让节点实现自恢复的功能,则是更为上乘的控制方法。所以 CAN 总线设计规范对于 CAN 节点的 BusOff 自恢复方式做了严格的规定,充分考虑了偶发故障与持续故障的处理。
为了避免某个设备因为自身原因(例如硬件损坏)导致无法正常收发数据而不断地破坏数据帧,从而影响其他正常节点通讯,CAN-bus规范中规定每个CAN控制器都有一个发送错误计数器和一个接收错误计数器。根据计数值不同CAN节点会处于不同的设备状态。根据计数值的变化进行状态转换,状态转换如下图所示:
接收、发送错误计数器对应的变动条件及数值变动情况:
- 接收单元检测出错误时,检测到错误标识符或过载标志的“位错误”除外,此时REC+1、TEC不变;
- 接收单元在发送完错误标志后检测到第一位为显性电平,此时REC+8、TEC不变;
- 发送单元输出错误标志,此时REC不变、TEC+8;
- 发送单元发送主动错误标志或过载标志,检测出位错误,REC不变、TEC+8;
- 接收单元发送主动错误标志或过载标志,检测出位错误,REC+8、TEC不变;
- 各单元从主动错误标志、过载标志的开始检测出连续14个显性位,之后每检测出连续8个显性位,发送时REC+8、接收时TEC+8;
- 检测出被动错误标志后追加连续8个位的显性位,发送时REC+8、接收时TEC+8;
- 发送单元正常接收数据结束时(返回ACK且到帧结束位检测到错误),REC不变、TEC-1;
- 接收单元正常接收数据结束时(到CRC未检测出错误且正常返回ACK),REC<127时,rec-1,rec>127时,REC=127;TEC不变;
- 处于总线关闭的单元,检测到128次连续11个位的隐形位,错误计数器归零,REC、TEC=0;CAN总线错误处理功能属于是链路层功能,此功能由CAN控制器决定。
汽车内部挂有很多的 ECU 节点,当其中一个节点发生故障进入总线关闭状态时,会很大程度上影响整车 CAN 网络的通讯。所以一方面需要迅速找到引发节点总线关闭的物理故障,另一方面需要遵循一定准则合理设计恢复策略,主要为了控制节点从总线关闭状态恢复到错误主动状态的等待时间,太快或者太慢地恢复都将可能影响到网络其它节点的正常通讯,快恢复和慢恢复两种策略一般同时应用。
整车厂对其系统供应商的设备也都提出了相应的 BusOff 后恢复时间的控制策略要求,对总线关闭状态的节点需要实现“快恢复”和“慢恢复”策略。
制定策略大致思路是:将默认配置的自动从总线关闭状态中恢复的功能关闭(CAN_CTRL1.BOFFREC = 1),再实时检查 CAN_ESR1.BOFFINT 寄存器的值来判断是否进入 BusOff状态,当检测到总线关闭后,开启快恢复计时,时间到达后进行一次 CAN 控制器的时钟、驱动及相关寄存器进行初始化操作,初始化完成后如果物理条件恢复正常那么即可完成快恢复,反之循环 10 次前面操作,如果仍旧无法消除 d BusOff 状态,那进入慢恢复策略,同样在开启慢恢复计时并且到达后进行复位 FlexCAN操作, 此时 CAN 总线关闭故障如果解除了,为了避免该节点在 CAN 网络中频繁发生总线关闭问题,此时不立即对外发送 CAN 报文。
大致流程图如下:
至于自定义的 BusOff后的恢复时间策略,可以根据 CAN_CTRL1.BOFFREC 的寄存器描述来控制关闭自动恢复机制,然后根据自己需要的时间间隔完成后开启自动恢复,官方例程默认为开启了BusOff 自动恢复功能,自动恢复时长 = 128 x 11 x 位时间(即检测到 128次11个连续空闲状态位电平则恢复,符合 CAN2.0B 标准)。
在BusOff 恢复策略制定时,是需要通过软件流程去实施实现控制时长,IP 层面不能设置恢复的时长。至于如何判断是主动错误还是被动错误,可以根据 CAN_ESR1.FLTCONF 寄存器以及结合CAN_ECR 寄存器来分析。
我们通过CANScope总线综合分析仪对上述的测试项一一进行测试,MM32F0140的FlexCAN 能够满足相关的测试标准,能够满足汽车领域对通信总线的要求,保障整车CAN总线安全稳定。 |