• 390查看
  • 0回复

[应用层软件] S32K324 CANFD报文接收超限分析

[复制链接]


该用户从未签到

发表于 19-4-2024 22:28:16 | 显示全部楼层 |阅读模式

汽车零部件采购、销售通信录       填写你的培训需求,我们帮你找      招募汽车专业培训老师




    前言

    问题描述

    原因分析

    问题处理

    总结

前言

随着汽车软件复杂度越来越高,传输的数据越来越多,CAN总线到CANFD总线已经是发展的必然了。CANFD总线中单个报文ID可以传递至多64byte数据,对CAN Driver来说,所需的MCU资源也将变多,对于NXP S32K3的CAN模块,如果是CANFD报文,能够接收的ID数量将大大减少。本文就基于开发中遇到的问题,来进行分析,并给出一个可行的解决方案。
问题描述

将MCAL中的CAN升级为CANFD后,Control需要配置CanRamBlock,将RamBlock全配置为64byte之后,再配置mailbox时,会报RamBlock溢出
报错示例如下:
S32K324 CANFD报文接收超限分析w1.jpg
报错之后无法生成代码,报错意思是RAM_BLOCK_1超了
原因分析

要弄清原因,需要搞清楚S32K324的FLEXCAN Canfd的关系。
如下图所示:

S32K324 CANFD报文接收超限分析w2.jpg
每个FlexCAN支持的buffer不一样,只有CAN0支持的最大,在CANFD的模式下,可以到21个mailbox
然后看下Ram block的定义
简单解释下:对于S32K324,有三个Ramblock,每个ramblock可以配置payload,不同的payload即表示能支持的最大mailbox,同时,payload越大,canfd支持传输的数据越多
S32K324 CANFD报文接收超限分析w3.jpg
通过FDCTRL为每个Block分配payload

S32K324 CANFD报文接收超限分析w4.jpg
payload只支持4种配置,8,16,32,64
S32K324 CANFD报文接收超限分析w5.jpg
•选择8字节payload时:−Block R0: 0x0080~0x027F, 512bytes,分配给MB0 ~ MB31。
−Block R1: 0x0280~0x047F, 512bytes,分配给MB32 ~ MB63。
−Block R2: 0x0480~0x067F, 512bytes,分配给MB64 ~ MB95。
•当选择64字节的payload时:
−Block R0: 0x0080~0x0277, 504bytes,分配给MB0 ~ MB6。
−Block R1: 0x0280~0x0477, 504bytes,分配给MB7 ~ MB13。
−Block R2: 0x0480~0x0677, 504bytes,分配给MB14 ~ MB20。
由上面的定义,可以知道之前报错的具体原因:
Ramblock1配置了payload为64,导致mailbox最大只有7个,而我们配置了8个,所以超了。

问题处理

知道了Ramblock的原理,如果全部配置为64byte,则最多只能配置21个mailbox(包括Tx和Rx),但OEM给的通信矩阵中超过了这个数量。如何解决这个问题呢?
换芯片估计很难了。
我的思路是从需求出发,将通信矩阵中的每个报文的DLC统计(实际除了Nm报文,Xcp报文,其他应用报文和诊断报文,都是64byte),同时将实际使用的信号所在的位置记录,统计所需的最大报文长度。
统计完后,就可以分配Block了,示例:
分配2个64byte的Ramblock,1ge 16byte的Ramblock,可以装载14个64byte的报文,21个16byte的报文。
这样,我们最大可以处理35个Canfd报文。
S32K324 CANFD报文接收超限分析w6.jpg
然后按照统计好的数据,给对应的Mailbox分配Ramblock即可,此处示例分配给RAM_BLOCK_1
S32K324 CANFD报文接收超限分析w7.jpg

总结

这种方案不是完全解决的方案,如果需求的CAN报文数量更多的话,可能也无法满足。所以在最开始MCU选型的时候,最好将CAN的报文容量也考虑进去,而不是简单的只看CAN通道和是否支持CANFD,包括各路CAN的容量是不是一致的。(S32K3就只有CAN0能支持payload64到21byte).如果在原理图设计阶段,没有选择CAN0,也是可能导致问题的原因。
参考:
17_S32K3xx_Communication_Modules_FlexCAN_Training.pdf



该用户从未签到

发表于 12-3-2025 08:53:00 | 显示全部楼层
前言:

随着汽车技术的不断进步,CANFD总线在汽车中的应用越来越广泛。NXP S32K3系列MCU的CAN模块在升级至CANFD后,面临一些新的挑战。本文将针对开发过程中遇到的报文接收超限问题进行分析,并给出相应的解决方案。

问题描述:

在将MCAL中的CAN升级为CANFD后,由于CANFD报文可以传输更多的数据,对MCU资源的需求增加,导致在某些情况下,S32K3系列MCU的CAN模块在接收CANFD报文时,会出现接收ID数量减少或接收超时的问题。

原因分析:

这主要是由于在升级至CANFD后,需要配置CanRamBlock以存储更多的数据。如果配置不当,会导致MCU资源分配不均,从而影响CANFD报文的接收性能。

问题处理:

针对这一问题,建议对CanRamBlock进行合理配置,确保足够的资源用于CANFD报文的接收和处理。同时,优化CANFD报文的接收处理逻辑,提高报文的接收效率。此外,还可以通过调整CAN总线的相关参数,如接收缓冲区大小、波特率等,以适应CANFD总线的要求。

总结:

本文分析了NXP S32K3系列MCU在升级至CANFD后面临的报文接收超限问题,并给出了相应的解决方案。通过合理配置CanRamBlock和优化处理逻辑,可以有效解决这一问题,提高CANFD报文的接收性能。

[内容由汽车工程师之家人工智能总结,欢迎免费使用,见贴尾]
回复 支持 反对

使用道具 举报



该用户从未签到

发表于 12-3-2025 08:53:00 | 显示全部楼层
前言:

随着汽车技术的不断进步,CANFD总线在汽车中的应用越来越广泛。NXP S32K3系列MCU的CAN模块在接收CANFD报文时,面临接收ID数量减少的问题。本文将针对这一问题进行分析和处理。

问题描述:

在将MCAL中的CAN升级为CANFD后,Control需要配置CanRamBlock,但在实际使用过程中出现了报文接收超限的问题。

原因分析:

CANFD报文相比CAN报文具有更高的数据传输效率,但也需要更多的MCU资源。因此,当配置CanRamBlock不当或超出其处理能力时,可能导致报文接收超限。

问题处理:

1. 优化CanRamBlock配置,合理分配资源,确保能够处理更多的CANFD报文。
2. 对MCU资源进行整合和优化,释放部分资源以供CAN模块使用。
3. 根据实际传输需求,合理设置报文优先级,确保关键报文的接收。

总结:

本文分析了NXP S32K3系列MCU在接收CANFD报文时出现接收超限的问题,并给出了相应的解决方案。在实际开发中,需要根据硬件资源和实际需求进行合理配置,确保系统稳定、高效地运行。

[内容由汽车工程师之家人工智能总结,欢迎免费使用,见贴尾]
回复 支持 反对

使用道具 举报

快速发帖

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|小黑屋|Archiver|汽车工程师之家 ( 渝ICP备18012993号-1 )

GMT+8, 19-8-2025 02:21 , Processed in 0.370577 second(s), 36 queries .

Powered by Discuz! X3.5

© 2001-2013 Comsenz Inc.