全球最实用的IT互联网信息网站!

AI人工智能P2P分享&下载搜索网页发布信息网站地图

当前位置:诺佳网 > 电子/半导体 > 接口/总线/驱动 >

Full CAN与Basic CAN配置错误导致信号跳变问题剖析

时间:2023-10-01 10:16

人气:

作者:admin

标签: CAN总线  英飞凌  CAN  信号 

导读:工程项目中,大家可能会注意到:不管哪家主机厂的网络拓扑,CAN总线是不可或缺的一种总线。所以,了解CAN总线似乎是一名汽车工程师的基础课,很多时候,我们可能觉得自己很懂,...

工程项目中,大家可能会注意到:不管哪家主机厂的网络拓扑,CAN总线是不可或缺的一种总线。所以,了解CAN总线似乎是一名汽车工程师的基础课,很多时候,我们可能觉得自己很懂,而实际呢?个人观点,最好的方式就是让工程问题去衡量你对CAN总线或者某个知识体系的理解深度。本文,就大家耳熟能详的CAN总线进行一个工程问题剖析:Full CAN与Basic CAN配置错误,导致信号跳变。

提示 :本工程问题对应英飞凌TC3xx芯片,EB配置MCAL

1、问题背景

标定测试中发现,一些信号变化异常,这些异常信号的值在某些时刻跳变成该信号的极限值,如下所示:

图片

显然,如上信号的跳变会给整车带来安全隐患,因此,测试也会将问题严重度设置较高等级,eg:S级或者A级。

2、根因分析

在进行根因分析之前,先补充一些MCAN基础信息。

(一)Message RAM

在英飞凌的芯片中,MCAN模块有一块Message RAM,这块空间主要用来划分过滤空间、接收数据空间以及发送数据空间,至于如何切分Message RAM,由用户或者工具设置。虽然Message RAM区可以按需切割,但是,切割的顺序需要按照手册要求实现,Message RAM如下所示:

图片

解读:

  • Message RAM的总大小为4480 words;
  • 在切割Message RAM时,需要按照上图顺序排布,即:SIDFC.FLSSA->XIDFC.FLESA->RXF0C.F0SA->RXF1C.F0SA->RXBC.RBSA->TXEFC.EFSA->TXBC.TBSA->TMC.TMSA。当然,如果实际没有用到某些区域,则不用切割Message RAM,eg:可以不用Rx FIFO 1。

Message RAM在EB中的配置某个Can Controller示例如下所示:

图片

(二)Standard Message ID Filter Element解读

Message RAM开始区域就是设置ID过滤,具体会对应到StdMsgk_S0 (k=0-127)寄存器。StdMsgk_S0各位域如下所示:

图片

部分内容解释:

  • SFT (Standard Filter Type):00B Range filter from SF1ID to SF2ID (SF2ID≥SF1ID),可以过滤一段ID;01B Dual ID filter for SF1ID or SF2ID,过滤SF1ID或者SF2ID;10B Classic filter: SF1ID = filter, SF2ID = mask;11B Filter element disabled.
  • SFEC (Standard Filter Element Configuration):过滤后的处理方式,111B Store into Rx Buffer or as debug message, configuration of SFT[1:0] ignored,过滤匹配放到Rx Buffer缓存区。
  • SFID2 (Standard Filter ID 2):SFID2[5:0] defines the offset to the Rx Buffer Start Address RXBC.RBSA for storage of a matching message.如果SFT配置成10模式,则SFID2[5:0]表示此报文在Rx Buffer的偏移(offset)。

(三)EB中的MCAL配置错误

检查MCAL配置发现,某个FULL类型的CanHandleType位置放到了BASIC类型后面,如下所示:

图片

经过如上的MCAL配置调整以后,CanHardwareObject33的CanObjectId由原来的26变成了28。如此,会导致什么问题呢?对比生成的配置代码(本文Can_17_McmCan_kSIDFilterConfigCore0,配置文件Can_17_McmCan_PBcfg.c)如下所示(右侧是错误配置):

图片

就是因为如上的配置,导致本应放入Rx dedicated buffer区间的数据错误的放到了Tx Event区间。如何理解呢?分析如上变动,具体解释如下:

1、正确配置分析

0xba00001a进行二进制展开:1011 1010 0000 0000 0000 0000 0001 1010B。对照StdMsgk_S0寄存器各位域解释如下:

图片

如此配置,意味着0x200(CanHardwareObject33)接收的数据会放置到地址:0xF0200294+26*16 = 0xF0200434,此时,不会与Tx Event的起始地址0xF0200444位置重叠,数据可以正确处理。

2、错误配置分析

0xba00001c进行二进制展开:1011 1010 0000 0000 0000 0000 0001 1100B。对照StdMsgk_S0寄存器各位域解释如下:

图片

如此配置,意味着0x200(CanHardwareObject33)接收的数据会放置到地址:0xF0200294+28*16 = 0xF0200454,此时,会与Tx Event的起始地址0xF0200444重叠,进而造成接收数据被发送数据覆盖,这就是信号跳变的原因。

将如上的分析简化示意如下所示:

图片

3、解决措施

既然是MCAL配置异常导致的问题,问题的修复也就明了,修改EB中的MCAL配置,将同一个Controller的Full CAN移动到Basic CAN之前,严格按照EB手册约束配置。关于CanObject配置注意事项,可以参考前文《MCMCAN:CAN hardware object配置规则》。

温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信