• 567查看
  • 0回复

[芯片硬件] S32K3xx系列MCU软件开发指南之S32K3多核编译优化与HSE-FW安装使能HSE-B后的U-Multi...

[复制链接]


该用户从未签到

发表于 9-3-2024 21:56:19 | 显示全部楼层 |阅读模式

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


内容提要

引言(S32K系列汽车通用MCU功能特性和市场应用概述)1. 支持S32K3xx系列MCU软件开发的S32DS IDE版本和下载及安装2. 支持S32K3xx系列MCU的调试器(debugger)比较3. 使用S32DS v3.4编译S32K3xx多核工程(独立编译设置和多个elf .vs单个elf)
3.1 创建和编译 多核多个elf(Seperate elf for each core)应用工程

3.2 解耦多核多个elf(Seperate elf for each core)应用工程关联编译,缩短编译时间

3.3 创建和编译多核单个elf(Single elf for multi core)应用工程

3.4 多核多个elf(Seperate elf for each core)与多核单个elf(Single efl for multi core)应用工程启动过程对比总结
4. 使用S32DS v3.4调试S32K3xx多核应用工程
4.1 多核多个elf(Seperate elf for each core)应用工程调试

4.2 多核单个elf(Single efl for multi core)应用工程调试
5. HSE-FW安装使能后的Multilink debugger下载调试总结
引言(S32K系列汽车通用MCU功能特性和市场应用概述)
NXP的S32K1xx系列ARM Cortex-M内核汽车通用MCU自2017年推出以来,备受市场青睐,被广泛使用在车身电子ECU(比如门窗控制器、车灯控制器、雨刮控制器、后视镜折叠、BCM),各类车载小功率电机控制器(比如水泵、油泵、冷却风扇等)、T-BOX,低端网关,中控娱乐导航系统辅助MCU,自动驾驶域控制器的低功耗伴随MCU等:
S32K3xx系列MCU软件开发指南之S32K3多核编译优化与HSE-FW安装使能HSE-B后的U-Multilink下载调试w1.jpg

NXP即将(2021年11月)量产下一代的ARM Cortex-M内核汽车通用MCU--S32K3xx系列,配备了CM7多核(1~3/锁步双核)、最多8x CAN-FD, 16x LIN以及百兆(EMAC)甚至千兆(GMAC)汽车以太网(支持AVB和TSN)的汽车通信总线接口、更高功能安全ASIL-D,更强信息安全HSE-B(支持非对称加密算法ECC、RSA和HASH,满足Evital-Full要求),拥有更大的引脚封装(up to 218 user pin with MBAG-289 package)和更大的Flash(up to 8MB P-Flash)和SRAM/TCM(up to 1152KB)存储器。可以满足当下和未来汽车电子电器架构发展的域控制器(Domain Controller)和区域控制器(Zonal Controller)的对内核计算性能和外设种类及数量的要求:
S32K3xx系列MCU软件开发指南之S32K3多核编译优化与HSE-FW安装使能HSE-B后的U-Multilink下载调试w2.jpg

与此同时,还加强了软件生态,通过免费的RTD(含AutoSAR MCAL和SDK/LLD)和免费信息安全HSE-B加密驱动(Crypto Driver)以及功能安全软件(SAF和SPD),以降低客户的应用软件开发成本和缩短产品开发周期:
S32K3xx系列MCU软件开发指南之S32K3多核编译优化与HSE-FW安装使能HSE-B后的U-Multilink下载调试w3.jpg

完整的S32K1和S32K3产品家族汽车通用MCU的发展演进roadmap如下:
S32K3xx系列MCU软件开发指南之S32K3多核编译优化与HSE-FW安装使能HSE-B后的U-Multilink下载调试w4.jpg

Tips:关于NXP S32K系列汽车通用MCU的更多详细信息,请访问如下NXP产品官网:


    S32K汽车通用MCU家族产品官网:www.nxp.com/S32K

    S32K1xx产品官网:www.nxp.com/S32K1

    S32K3xx产品官网:www.nxp.com/S32K3


    本文想要跟大家介绍S32K3系列MCU软件开发初期经常会遇到的几个问题,希望对大家上手S32K3有所帮助。

1. 支持S32K3xx系列MCU软件开发的S32DS IDE版本和下载及安装
与S32K1xx系列MCU一样,NXP也为S32K3xx系列MCU的客户提供了基于GNU工具链(GCC + GDB)的S32DS IDE,其版本为S32 Design Studio for S32 Platform v3.4(基于GCC 9.2版本),下载链接如下(需要登录NXP账号,使用任意有效邮件即可注册):www.nxp.com/S32DS-S32PLATFORM
S32K3xx系列MCU软件开发指南之S32K3多核编译优化与HSE-FW安装使能HSE-B后的U-Multilink下载调试w5.jpg

PS:目前,S32K3xx的开发支持包,还需要联系NXP授权代理商或者原厂FAE/Sales才行获取,11月份量产后,也可以在以上链接下载;
安装指南,我分享到如下百度云盘供大家参考,需要的可以自行下载:
链接: https://pan.baidu.com/s/16xLHIZOnBd_L7Yp_fMau_g提取码: qg5s
2. 支持S32K3xx系列MCU的调试器(debugger)比较
沿用之前S32K1xx的ARM Cortex-M内核调试工具生态链,以下调试器均可以支持S32K3xx系列MCU的程序下载和调试:

调试器

调试软件

版本要求

comments

LauterBach

T32/S32DS v3.4

调试多核需要Multi-Core License,T32 2021.04以上,需联系NXP安装K3 patch

功能最强大,但是价格不菲

J-LINK/Trace

Ozone/S32DS v3.4

JLINK v10/11,上位机驱动软件7.54以上(强烈建议到Segger官网下载安装最新版本上位机软件和驱动)

国内某宝山寨版本价格便宜,但目前阶段,与S32DS IDE兼容性差,只能使用J-Flash下载,Segger Ozone调试(仅支持单核)

P&E U-Multilink/FX

/S32DS v3.4

U-Multilink Rev.C/D

U-Multilink Rev.B

性价比高,兼容性好,NXP官方推荐
Tips:Segger JLINK/Trace相关软件下载链接如下:


    J-Link上位机软件及驱动包:https://www.segger.com/downloads/jlink/

    Ozone独立调试软件:https://www.segger.com/products/development-tools/ozone-j-link-debugger/

Tips:后面iSystem、i-Jet、ULINK等主流第三方调试器工具也会陆续支持S32K3xx系列MCU;
3. 使用S32DS v3.4编译S32K3xx多核工程(独立编译设置和多个elf .vs单个elf)
3.1 创建和编译 多核多个elf(Seperate elf for each core)应用工程
从文章开始的介绍可知,S32K3xx系列MCU中包含双核的S32K32x系列和三核的S32K338系列等多核 part number,在S32DS v3.4中,创建工程时,选择多核part number将为每个CM7应用内核创建一个独立的应用工程(包含自己独立的startup代码、中断向量表、独立的链接文件,存储器分区和应用代码main()函数),编译时也会生成各自独立的elf文件:
S32K3xx系列MCU软件开发指南之S32K3多核编译优化与HSE-FW安装使能HSE-B后的U-Multilink下载调试w6.jpg

S32K3xx系列MCU软件开发指南之S32K3多核编译优化与HSE-FW安装使能HSE-B后的U-Multilink下载调试w7.jpg

编译结果如下:
S32K3xx系列MCU软件开发指南之S32K3多核编译优化与HSE-FW安装使能HSE-B后的U-Multilink下载调试w8.jpg

这样创建的多核应用工程,在编译其中一个CM7内核(比如CM7_0)的应用工程时,也会关联编译其他的CM7内核应用工程。
3.2 解耦多核多个elf(Seperate elf for each core)应用工程关联编译,缩短编译时间
随着应用功能的增加,当每个CM7的代码将会随之增加,若只修改了其中一个CM7内核的代码,其他CM7内核的代码未作任何修改时也会将其一起重新编译,这样就会增加额外不必要的编译时间。
为了避免这个问题,可以通过以下设置解耦多核工程(必须对多核应用工程的每个CM7内核应用工程都进行如下设置,才能起作用):
① double check:去勾选工程属性-->C/C++ General --> Paths and Symbols --> References中的应用工程关联:
S32K3xx系列MCU软件开发指南之S32K3多核编译优化与HSE-FW安装使能HSE-B后的U-Multilink下载调试w9.jpg

② double check:去勾选工程属性-->Project References中的应用工程关联:
S32K3xx系列MCU软件开发指南之S32K3多核编译优化与HSE-FW安装使能HSE-B后的U-Multilink下载调试w10.jpg

为多核MCU创建多个应用工程,编程生成多个elf的方式,应用程序的开发相对简单,但是会占用更多的Flash空间,对共享内存的使用,只能通过指针方式进行访问,不是很方便。
3.3 创建和编译多核单个elf(Single elf for multi core)应用工程
为此,很多多核MCU的用户倾向于为多核MCU创建单个工程,生成单个elf文件,这样多核之间就可以服用startup代码和外设驱动程序了,从而可以减少Flash存储器空间,对共享内存的访问也可以直接使用C语言定义的变量名,十分方便。这样的单个elf多核应用工程,虽然只有一个链接文件,但是在其中必须对多核进行独立的堆栈和中断向量表地址划分,在startup代码中根据读取的内核core ID进行各自的堆栈(MSP)和中断向量偏移地址(VTOR)以及FPU + MPU配置初始化,最后跳转到不同的main函数(比如main_c0()和main_c1()):
以下是基于S32K3x4 RTM Beta 0.9.0创建的一个S32K324的单个elf的多核应用工程,相应的链接文件和startup代码都已经做了相应的修改,测试可以正常工作:
S32K3xx系列MCU软件开发指南之S32K3多核编译优化与HSE-FW安装使能HSE-B后的U-Multilink下载调试w11.jpg

我已将其分享到如下百度云盘,供大家参考学习:
链接: https://pan.baidu.com/s/1Me5qpoDilfp8wYZT4fEeSQ提取码: aai6
3.4 多核多个elf(Seperate elf for each core)与多核单个elf(Single efl for multi core)应用工程启动过程对比总结
最后,将基于S32K3x4 RTD 0.9.0的S32K324的多核多个elf(Seperate elf for each core)与多核单个elf(Single efl for multi core)应用工程启动过程对比总结如下图:
S32K3xx系列MCU软件开发指南之S32K3多核编译优化与HSE-FW安装使能HSE-B后的U-Multilink下载调试w12.jpg

Tips:关于S32K3xx系列MCU的多核开发注意事项,我后面会专门写一篇公众号文章进行介绍,敬请关注。
4. 使用S32DS v3.4调试S32K3xx多核应用工程
4.1 多核多个elf(Seperate elf for each core)应用工程调试
对于多核多个elf(Seperate elf for each core)的应用工程,调试时,只需要选择调试配置(Debug Configuration)的中Launch Group即可:
S32K3xx系列MCU软件开发指南之S32K3多核编译优化与HSE-FW安装使能HSE-B后的U-Multilink下载调试w13.jpg

它会调用两个子调试目标,其中,CM7_0作为主核,其调试目标会启动GDB server,并下载全部elf文件到目标MCU:
S32K3xx系列MCU软件开发指南之S32K3多核编译优化与HSE-FW安装使能HSE-B后的U-Multilink下载调试w14.jpg

而非主核的CM7_1,其调试目标,不启动独立的GDB server,而是配置为attach连接到主核CM7_0的GDB server,当然该调试目标也不是下载任何elf,但是会加载使用自己的elf调试信息:
S32K3xx系列MCU软件开发指南之S32K3多核编译优化与HSE-FW安装使能HSE-B后的U-Multilink下载调试w15.jpg

成功进入调试后,会自动暂停在自己的main()函数第一行代码处,切换不同的调试目标即可查看和调试各自内核的代码和外设:
S32K3xx系列MCU软件开发指南之S32K3多核编译优化与HSE-FW安装使能HSE-B后的U-Multilink下载调试w16.jpg

Tips:若CM7_1内核进入调试界面后出现跑飞的情况(即没有自动暂停到main() 函数第一行代码),可以将PEMicro软件安装目录下相应part nuber的调试启动控制脚本mac文件删除或者重命名,以避免调用解决:
S32K3xx系列MCU软件开发指南之S32K3多核编译优化与HSE-FW安装使能HSE-B后的U-Multilink下载调试w17.jpg

Note:PEMicro软件的安装目录可以在调试界面的pegdbserver_console窗口中查看,删除或者重命名的mac文件必须是这个目录下的才起作用:
S32K3xx系列MCU软件开发指南之S32K3多核编译优化与HSE-FW安装使能HSE-B后的U-Multilink下载调试w18.jpg

4.2 多核单个elf(Single efl for multi core)应用工程调试
相对而言,在S32DS v3.4 IDE中, 多核单个elf(Single elf for multi core)的应用工程,调试方法与多核多个elf(Seperate elf for each core)的应用工程类似,也是通过选择调试配置(Debug Configuration)的中Launch Group启动:


也需要先创建两个调试目标,分别选择S32K324的CM7_0和CM7_1作为调试目标core,只是在主核CM7_0和非主核CM7_1的调试目标中都使用同一个elf文件的调试信息,默认断点分别设置为main_c0()和main_c1():
主核CM7_0调试目标配置:
CM7_0 is the main core, its debug target will launch the GDB server and download the elf at first
S32K3xx系列MCU软件开发指南之S32K3多核编译优化与HSE-FW安装使能HSE-B后的U-Multilink下载调试w20.jpg

Target device select: S32K324 → M7_0:
S32K3xx系列MCU软件开发指南之S32K3多核编译优化与HSE-FW安装使能HSE-B后的U-Multilink下载调试w21.jpg

Default breakpoint is set at main_c0():
S32K3xx系列MCU软件开发指南之S32K3多核编译优化与HSE-FW安装使能HSE-B后的U-Multilink下载调试w22.jpg

非主核CM7_1调试目标配置:
CM7_1 is the application code, which uses the same elf, but does not need to launch a separate GDB server, just attach to the running CM7_1 core:
S32K3xx系列MCU软件开发指南之S32K3多核编译优化与HSE-FW安装使能HSE-B后的U-Multilink下载调试w23.jpg

Target device select: S32K324 → M7_1:
S32K3xx系列MCU软件开发指南之S32K3多核编译优化与HSE-FW安装使能HSE-B后的U-Multilink下载调试w24.jpg

Default breakpoint is set at main_c1():
S32K3xx系列MCU软件开发指南之S32K3多核编译优化与HSE-FW安装使能HSE-B后的U-Multilink下载调试w25.jpg

启动调试成功后,进入调试界面结果如下:
① 主核CM7_0调试目标自动暂停到mian_c0()函数第一行代码,但非主核CM7_1未启动:
S32K3xx系列MCU软件开发指南之S32K3多核编译优化与HSE-FW安装使能HSE-B后的U-Multilink下载调试w26.jpg

② 运行主核CM7_0调试到使能非主核CM7_1代码(MultiCore_Enable(1))之后,非主核CM7_1才会被启动,并暂停在其复位函数_start()处:
S32K3xx系列MCU软件开发指南之S32K3多核编译优化与HSE-FW安装使能HSE-B后的U-Multilink下载调试w27.jpg

③ 全速运行非主核CM7_1,将暂停到其调试目标设置的默认断点--mian_c1()函数第一行代码
S32K3xx系列MCU软件开发指南之S32K3多核编译优化与HSE-FW安装使能HSE-B后的U-Multilink下载调试w28.jpg

5. HSE-FW安装使能后的Multilink debugger下载调试
S32K3xx系列MCU集成了一个基于ARM Cortex-M0+内核的HSE-B硬件信息安全加密模块,默认出厂的芯片只安装了安全辅助启动固件(sBAF),并未安装HSE-FW(HSE-B加密算法固件)因此,无法使用HSE-B进行信息安全加密操作。此时,使用创建S32DS应用工程时默认配置的U-Multilink/FX S32K3xx MCU Flash算法即可下载和调试:
S32K3xx系列MCU软件开发指南之S32K3多核编译优化与HSE-FW安装使能HSE-B后的U-Multilink下载调试w29.jpg

为了使用HSE-B,用户需要安装HSE-FW,此时,还使用默认的Flash算法文件就会卡死在下载过程的Flash擦除阶段,最后提示timeout而terminate调试:
S32K3xx系列MCU软件开发指南之S32K3多核编译优化与HSE-FW安装使能HSE-B后的U-Multilink下载调试w30.jpg

原因是:安装的HSE-FW会占用额外的P-Flash和D-Flash存储器空间,且这些地址在芯片boot阶段执行sBAF后会被XRDC保护起来,从而CM7应用内核和调试器都无法访问(读写/擦除和编程):

HSE-B使能(安装HSE-FW)

需要保留P-Flash size

需要保留D-Flash size

未使能(出厂默认设置)

最后48KB for sBAF

-

使能(Full-Memory)

最后176KB(增加128KB for HSE-FW)

最后168KB(for Secure NVM和sBAF备份)

使能(A/B swap for OTA)

最后176KB(增加128KB for HSE-FW)

最后128KB(for Secure NVM)
而在默认的Flash算法中只预留了最后的128KB P-Flash和最后的128KB D-Flash:
S32K3xx系列MCU软件开发指南之S32K3多核编译优化与HSE-FW安装使能HSE-B后的U-Multilink下载调试w31.jpg

虽然,应用程序通常不会占用这些P-Flash和D-Flash地址空间,但是U-Multilink提供的Flash算法并不是按需擦除Flash sector的,而是将预留地址之外的所有P-Flash和D-Flash都进行擦除,从而导致了芯片擦除失败。
解决的办法是,安装PEMicro提供的最新5.11-20210908的U-Multilink驱动和Flash算法支持包:
我已将其分享到如下百度云盘链接,需要的朋友可以自己下载安装:
链接: https://pan.baidu.com/s/1dpkHtZItYFaZ_tqpoDS_-A提取码: vbk4
也可以直接从以下PEMicro的官网链接下载:
https://www.pemicro.com/fixedlinks/com.pemicro.debug.gdbjtag.pne.updatesite.base-5.1.1-SNAPSHOT.zip
其中,为HSE-FW安装和HSE-B使能后的不同的Flash Memory配置提供了不同的.arp Flash算法文件:


    A/B swap for OTA: nxp_s32k3xx_xxx_ab_swap.arp

    Full-Memory: nxp_s32k3xx_xxx_hse_enabled.arp

另外两个.arp Flash算法文件作用如下:


    默认出厂配置: nxp_s32k3xx_xxx_ab_swap.arp

    未使能HSE和安装HSE-FW: nxp_s32k3xx_xxx_hse_disabled.arp

    S32K3xx系列MCU软件开发指南之S32K3多核编译优化与HSE-FW安装使能HSE-B后的U-Multilink下载调试w32.jpg

在应用工程的调试目标的PEMicro Debugger选项栏中,进入Advanced Options配置,勾选“Use Alternative Algorithm” -->"Browse.."选择使用正确的Flash .arp算法文件即可:
S32K3xx系列MCU软件开发指南之S32K3多核编译优化与HSE-FW安装使能HSE-B后的U-Multilink下载调试w33.jpg

总结
本文介绍了NXP的S32K3xx系列MCU的功能特性和其应用软件开发所需的S32DS v3.4 IDE下载安装和调试器支持情况、S32K3xx多核应用工程创建和调试方法、以及HSE-FW安装之后的无法下载和调试的解决等常见技术问题总结。
后期,本公众号将为大家带来更多S32K3xx系列MCU的软件和硬件开发原创技术分享文章,欢迎大家转发分享,让更多人从我的公众号文章中受益。

快速发帖

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

本版积分规则

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

GMT+8, 1-2-2025 08:01 , Processed in 0.290372 second(s), 31 queries .

Powered by Discuz! X3.5

© 2001-2013 Comsenz Inc.