336_S32K144 CAN总线错误诊断

64 篇文章 165 订阅
36 篇文章 18 订阅

完整的S32K144的学习汇总如下:

https://github.com/GreyZhang/g_s32k144

    继续S32K144的学习,今天来看看CAN的错误诊断。关于这部分,如果要做到产品化的一些指标其实需要一些其他的东西。比如,BUSOFF的快慢恢复模式等。我这里看的仅仅是驱动实现的可能性,因此仅仅是看看使用这个芯片的时候这个如何提供基础的功能信息而不去做这部分的实现。

    需要注意的是,有其他的MCU SDK不同,我用的官网SDK其实很多故障没有做一个明确的区分。也就是说,其实这个SDK仅仅是给我们提供了一个寄存器读取的功能而已,具体的信息提取还是需要自己来做的。

    上面是SDK的源代码,非常简单,其实就是一个寄存器的读取。因此,要想实现相关错误的识别,需要我们结合用户手册继续分析。

    这是用户手册中一部分信息,比如从上面能够找到bit1和bit2分别是BUS ERROR和BUSOFF的信息提示。具体每一bit究竟是什么含义,这个在用户手册中有明确的说明。

    接下来,针对这个功能做一个简单的测试。在软件中增加如下代码:

    这样,就可以通过串口打印出现在的错误状态信息。为了能够制造错误,我把CAN总线的CAN H和CAN L进行短接。之后,观察信息提取的变化。

    从上面的信息看,bit1和bit2置位了,这说明BUS ERROR和BUSOFF两个故障发生了。

    调试的过程中离开了一会儿,现在回来继续查看。从上面的监控信息可以看得出,这个故障并不是自动恢复的。如何去清除掉这些故障信息?通过SDK的代码的分析,我找到了这个接口,其实不在于用户最常用的接口文件中,而是直接设计到了CAN 的硬件访问模块中。具体的函数功能设计如下:

    这里面,用到了一个宏,一个数字,FLEXCAN_ALL_INT。从上面的代码中看,其实更完整的一个错误的判断应该是按照这个数字中的置位来判断。然而,我这里调试过程中制造出来的故障其实只是针对BUSOFF以及BUSERROR两个状态,因此我的判断要简单一点。但是,这个接口的故障清除方式确是直接尝试进行全部故障的清除。

    以上是故障状态的定义,数值的二进制为0b1110110000000000000110。从数值上看,最后的三位其实是跟我的判断重合的。为了能够验证我的状态,我进行了最后三位的判断。同时,为了能够看出这个操作的过程,我把故障保持了1秒钟。如此,我的代码设计如下:

    之后,进行软件的测试,结果如下:

    制造出来的故障,1秒钟之后被清除掉了,同时也有清除操作的一个打印提示。

    这只是简单的一个故障的调试,至于其他的故障应该也是类似的套路。只是增加一些其他的信息判断而已,我在此不再进行展开的尝试。

    或许是最近自己内心的压力比较重,昨晚上做梦梦见了一些很不好的事情。有一些不是很好公开的想法,不能够一一说明。不过,感谢那些困难中给我们支持陪同的人们。虽然我的学习笔记通篇中文,但是我收到了印度朋友的咨询。抱歉,我没时间为国际友人们提供一份英文的说明,毕竟我也在学习。技术没有国界,希望全世界的人能够在这个层面上有更好的认识,有更深的合作。我期待我们的世界变得更加美好!

完整的S32K144的学习汇总如下:

https://github.com/GreyZhang/g_s32k144

  • 6
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值