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引脚,通过波形判断发出的数据是否正常。

### 关于S32K144 MCU板调试的方法 对于S32K144微控制器单元(MCU),其调试过程涉及多个方面,包括但不限于硬件连接、软件配置以及具体功能模块的测试。为了有效地进行调试工作,建议遵循官方文档和技术资源中的指导。 #### 使用官方参考手册获取基础信息 S32K144参考手册提供了详尽的产品描述、电气特性说明及编程指南等内容[^1]。这份资料是理解MCU内部结构及其操作模式的关键起点,在遇到任何技术难题时都应该优先查阅该手册来寻找解决方案。 #### 获取开发板原理图辅助分析问题 当涉及到具体的电路设计或信号路径追踪时,s32k144开发板原理图将成为不可或缺的部分工具[^2]。通过研究这些图纸可以更好地了解各个组件之间的关系,并有助于定位可能存在的物理层面上的问题源。 #### 参考开源学习记录加深实践认知 g_s32k144项目包含了大量有关此型号MCU的学习笔记与实验案例,涵盖了诸如FreeRTOS操作系统移植、各种外设接口(UART,CAN,SPI等)的应用实例以及其他高级主题如DMA传输机制等方面的内容[^3]。这些都是非常宝贵的第手经验分享,能够帮助开发者快速上手并解决实际应用过程中所遇挑战。 ```python # Python代码仅作为示例展示如何读取和解析JSON格式的日志文件, # 实际针对S32K144调试更多依赖C/C++环境下的嵌入式编程技巧。 import json def parse_log_file(file_path): with open(file_path, 'r') as f: logs = json.load(f) for log_entry in logs: print(log_entry) parse_log_file('example.log') ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值