S32K144调试记录(一)

最近在开发S32K144的CAN/LIN模块,调试的时候断断续续遇到不少问题,在这里记录下。

调试CAN/LIN收发过程中出现的问题

1 现象

1.1 CAN

CANoe一直报Tx stuff error/overload frames,如下图所示。
在这里插入图片描述

1.2 LIN

LIN报文的时隙一直与调度表中设定的报文时隙对不上,调度表中报文A设定10ms的时隙,A的报文实际发送需要7ms,按照调度表定义A报文发完之后TX需要空闲3ms,等到10ms完全过去后下一个报文才会开始发送。

2 解决过程

2.1 CAN

刚开始测试CAN的时候,S32K144作为接收端,CANoe作为发送端,用的是S32DS自带的demo例程。CANoe报出来的错误码stuff error一直不知道怎么解决,百度也没法找到好的办法。所以打算换一下,用S32K144发CAN报文,CANoe来接收,这样对程序的要求不高,不需要对接收mb进行配置。
调换收发端之后,再次测试发现CANoe仍然收不到报文,就开始一步一步测试。
首先检查硬件,
S32K144、TJA1042的供电没问题,TJA1042的CANH/L引脚至CANoe的7/2引脚连接也OK;
然后是软件配置,
S32DS里引脚配置,TJA1042的配置引脚输出信号,都OK
都没问题,接下来只能用最原始的方法,测试TJA1042的TX引脚,观察波形是否正常。波形见下图。

100us波形图

20us波形图

20us波形图

10us波形图

10us波形图

2us波形图

2us波形图

到2us波形图里就可以看出波形确实有问题了,程序里设置的波特率是500kb/s,那么每个bit所占的时间长度为2us,即每个完整的高/低电平须占完整的一格,从波形图中可以看到,实际上一个高/低电平占了不到一格,3个bit占用两个2us多一点点,到这里就想到了应该是CAN模块的时钟配置有问题。打开pe看了下,果然是有问题。CAN模块使用的时钟源是晶振时钟,也就是外部时钟源,在这里插入图片描述
我们的板子上的晶振是12MHz,而demo里默认的晶振时钟是8MHz,所以CAN模块频率由8M/16=500kb升到了12M/16=750k,因此一个bit占用4/3us,3个bit占用4us,这个结果也与波形能对应起来。
知道问题之后,立马修改了芯片的晶振时钟为12MHz,CAN的收发就OK了

2.2 LIN

LIN的现象与CAN类似,LIN报文可以发出来,也可以用示波器读到,但是时隙间隔不对。由于LIN模块配置波特率时不需要配置时钟模块,所以在出现问题时没有考虑排查时钟。
问题的排查过程与CAN类似,首先是硬件;
S32K144、TJA1021的供电没问题,
然后是软件配置,
S32DS里引脚配置,TJA1021的配置引脚输出信号,都OK;
接下来只能像CAN一样测TX引脚的波形,观察异常。程序里设置的报文时隙为50ms,但是测下来时隙只有36ms左右在这里插入图片描述
然后,调整时隙至40ms/20ms,发现实测波形的时隙也相应下降到28ms/15ms,发现设定时隙与实测波形时隙之间接近1.5倍的关系,猜测应该是时钟的关系。
LIN模块的波特率是可以由用户自行配置的,时钟源没有开放,猜测是使用了内部时钟,这里就不管了。
LIN模块里跟时钟相关的模块就是定时器,定时器用于基时的实现,基时设置是5ms,定时器中断任务也是5ms进一次,在中断里进行时间检测,若上一帧报文的时隙到了,那么就发下一帧。
打开定时器,发现时钟果然不对劲,PCC configured clock是由外部晶振分频得到的,就带来了跟CAN同样的问题,外部晶振是12MHz,但是软件里默认是8MHz,因此实际的定时器比预想的快1.5倍,那么实际的报文时隙比设置里的时隙慢1.5倍也是正常的。到这里,修改时钟源为内部的SIRC DIV2 clock,再尝试发LIN报文,时序果然没有问题了。
在这里插入图片描述

3 总结

调试是一个很讲究的工作,出了问题需要考虑软/硬件多方面的因素。
通讯模块有问题,硬件须考虑芯片供电、芯片有没有贴反、收发器和调试器的接线等因素,软件须考虑时钟、引脚输出/输入配置、收发器工作模式配置等因素,这些保证没问题之后可以通过示波器观察MCU的TXD引脚,通过波形判断发出的数据是否正常。

  • 2
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值