电子工程世界|技术文章—节点BusOff恢复过程分析与测试( 二 )


电子工程世界|技术文章—节点BusOff恢复过程分析与测试
文章图片
图3节点状态转换图情形3
MCU如何实现“快恢复”和“慢恢复”?
MCU编程实现总线关闭“快恢复”和“慢恢复”的一般过程可用以下流程图描述:
电子工程世界|技术文章—节点BusOff恢复过程分析与测试
文章图片
图4MCU实现总线关闭恢复流程
节点以正常发送模式发送报文的过程中 , 如果出现了发送错误 , 发送错误计数会增加 , 只要发送错误计数没有超过255 , CAN控制器便会自动重发报文 , 如果出现多次发送错误 , 使发送错误计数累加超过255 , 则节点跳转为总线关闭状态 。 MCU能够第一时间知道节点进入了总线关闭状态(例如在错误中断处理逻辑中查询状态寄存器的相应位) , 这时MCU控制CAN控制器进入“快恢复”过程 , 即控制CAN控制器停止报文收发 , 并进行等待 , 计时达到需要的时间T1(如100ms)后 , MCU重新启动恢复CAN控制器参与总线通信 , 这样便完成了一次“快恢复”过程 。
节点每进入一次“快恢复”过程时 , MCU会对此进行计数 , 当节点“快恢复”计数达到设定的值N(如5次) , 则后续再次进入总线关闭状态时MCU把恢复总线通信的等待时间T2进行延长(如1000ms) , 这样便实现了“慢恢复”过程 。 “快恢复”和“慢恢复”过程的主要区别就在于恢复节点参与总线通信的等待时间的不同 。
通过MCU对于总线关闭后的恢复行为进行编程控制 , 实际上是对CAN控制器的错误管理和恢复机制进行了补充 , 使得总线关闭状态后的恢复过程更加灵活 , 更能适应实际应用的需要 。 对于“快恢复”和“慢恢复”的等待时间 , 以及“快恢复”计数多少次后进入“慢恢复”过程 , 不同厂家可根据具体的需求进行编程实现 。
实测总线关闭恢复过程
通过广州致远电子有限公司的CAN总线分析仪的流量分析功能 , 可以很方便分析总线关闭后节点的恢复过程及测试“快恢复”和“慢恢复”的恢复时间 。
第一步 , 连接DUT但先不要上电 。 按以下配置 , 使能接收干扰功能 , 并开启报文读取功能 。
电子工程世界|技术文章—节点BusOff恢复过程分析与测试
文章图片
图5功能设置
第二步 , 给DUT上电 , 并采集一段时间报文 , 停止采集后使用流量分析功能进行分析 。
电子工程世界|技术文章—节点BusOff恢复过程分析与测试
文章图片
图6采集报文并进行流量分析
第三步 , 鼠标放置于波形“团”(本文把包含多帧密集帧的波形称为波形“团”)之间读取恢复时间 。
电子工程世界|技术文章—节点BusOff恢复过程分析与测试
文章图片
图7读取恢复时间
至此 , 我们便可以得出结论:该DUT对总线关闭的恢复过程进行了编程控制 , 采用了先“快恢复”后“慢恢复”的恢复机制 , 节点进入总线关闭状态后 , 进行一次“快恢复”过程 , 后续进行“慢恢复”过程 , 两个恢复过程的恢复时间分别为27.5ms和209.5ms 。
那么 , 我们该如何根据所得波形理解该DUT进入总线关闭状态及恢复通信的整个过程呢?
把第一个波形“团”放大得到下图:
电子工程世界|技术文章—节点BusOff恢复过程分析与测试
文章图片
图8放大波形“团”观察
可以清晰的看到 , 波形“团”中包含共32帧CAN报文 。 把其余各波形“团”放大后也都是包含32帧 , 这里不再把详细的图片贴出来 。
DUT上电后 , 初始发送和接收错误计数都为0 。 由于在测试时配置了接收干扰功能 , 当DUT开始发送报文后 , 每一帧报文都受到CAN总线分析仪的干扰而出现发送错误 , 第一次发送时发送错误计数加8 , 并自动重发 , 第二次发送时错误计数再加8 , 直到发送了32次后 , 发送错误计数大于255 , 根据图3的错误状态的转换规则 , 这时DUT跳转为总线关闭状态 , MCU控制进入“快恢复”过程同时对“快恢复”次数进行计数 , 并等待约27ms后 , MCU控制DUT从总线关闭状态恢复为错误主动状态 , 由MCU继续启动发送 , 由于仍然受CAN总线分析仪的持续干扰 , 发送32帧后再次进入总线关闭状态 , 再次执行“快恢复”或“慢恢复”过程 , 以此类推 。


推荐阅读