文章目录
- 1.前言
- 2.资料获取
- 2.1 MCU例程
- 2.2 开发环境
- 2.3 上位机
- 2.4 硬件
- 3.工程修改
- 3.1 boot工程修改
- 3.2 app工程修改
- 4.测试情况
- 5.例程分享
1.前言
最近很多客户在开发S32K系列MCU时咨询是否可以提供基于UDS协议的bootloader。本文以S32K144为例,介绍如何使用NXP官方提供的UDS bootloader例程。
如果客户有S32K3的uds bootloader需求,可以查看NXP社区提供的资料,链接如下:
- Unified bootloader Demo - NXP Community
2.资料获取
2.1 MCU例程
- 打开NXP的S32K1 MCU的官网,如下链接:
- S32K1 General-Purpose MCUs | NXP Semiconductors
- 按下图方式找到
unified Bootloader Framework.zip
并下载,然后执行压缩包里的S32K1xx_unified_bootloader_demo_V1.0.exe
,将例程安装到客户常用的文件夹。
也可以复制下面的链接到浏览器直接下载:
https://www.nxp.com/downloads/en/snippets-boot-code-headers-monitors/unified_bootloader_framework.zip
3.最终安装好的文件夹内容如下:
2.2 开发环境
开发环境使用的是S32DS2.2,安装使用说明参考如下链接:
- S32 Design Studio for ARM 2.2 快速入门 (qq.com)
2.3 上位机
- 上位机为github上面的ECUBUS,打包好的可执行文件地址如下:
- Releases · frankie-zeng/ECUBus · GitHub
- 选择最新的0.2.24版本进行下载。
也可以复制下面的链接到浏览器直接下载:
https://github.com/frankie-zeng/ECUBus/releases/download/v0.2.24/ECUBus.exe
2.4 硬件
硬件需要准备如下这些:
- PEAK厂家的CAN卡
- S32K144EVB-Q100
- 12V电源以及若干杜邦线
笔者这次测试使用的是PEAK厂家的PCAN-USB(IPEH-002021)
,推荐下载对应的CAN卡软件PCAN-View
,用于测试MCU升级时,跟踪总线上面的数据,可以复制下面的链接到浏览器直接下载:
https://peak-system.com.cn/wp-content/uploads/2022/06/pcanview.zip
3.工程修改
本次使用的是S32K144的CAN UDS bootloader工程,按如下路径找到相关的bootloader工程和app工程
3.1 boot工程修改
-
首先打开
S32K144_CAN_bootloader
工程,先将原先的备份文件删除,防止和后面切换SDK保留的备份文件混合。
-
然后打开
Sources
文件夹,将S32K144_CAN
和unified_stack
两个文件删除。
-
以管理员身份运行脚本
build_test.bat
,会发现Sources
文件夹内新增了两个文件夹,
-
打开S32DS 2.2 ,导入boot工程,步骤如下图。
-
随后会弹出警告,版本SDK不对,点击
Skip loading
。因为原始工程使用的是SDK2.0,而S32DS 2.2默认安装的是SDK3.0,所以需要进行SDK的更换。
-
将原本工程的pe组件全部删除。
-
右击工程名字,点击属性,然后在弹出的界面选择SDK选项。
-
在弹出detach SDK V2.0.0的时候,选择Yes,然后将SDK3.0.0 Attach。
-
点击SDK选项界面的OK,会弹出一个对话框,main.c选择不要替换,点击OK。
-
然后删除SDK替换之后,工程出现的PE组件。
-
然后导入原始工程的pe配置,步骤如下图。
-
删除boot工程原本的SDK代码。
-
接下来需要将老的linker file的一些配置移到新版的linker file,可以先按下图方式,了、将两个文件进行对比。
-
总的来说,下图这些地方需要修改。
-
点击pe界面的生成代码按钮,
SDK
和Generated Code
文件夹内的文件都重新生成了。
-
因为SDK是灰色的,代表不会参与工程编译,需要添加到工程编译目录中,操作如下图。
-
因为这个工程用到了EWC库,所以还需要打开工程属性界面,增加这个库,操作如下图。
-
最后点击Debug按钮进行编译,无报错。
3.2 app工程修改
app工程的修改和boot方式差不多,但是有两个注意点。
-
需要修改下
driver/clock
里面的clock.h
和clock.c
文件名称,因为SDK文件夹里也有一个clock.h
。
-
第二个最终升级需要使用app工程生成的bin文件,所以需要在工程属性里面设置一下,如下图:
4.测试情况
最后进行升级测试,详细步骤如下:
-
给S32K144EVB-Q100开发板供电12V,将boot工程下载到开发板中,会看到开发板RGB灯闪烁蓝色。
-
在桌面新建一个文件夹,将第三节开始介绍的
S32K144_CAN_user_config
文件中的flash_api.bin
复制过去,里面的json文件因为是旧版本的,所以本次用不上。 -
将app工程生成的bin文件也复制到桌面新建的文件夹内。
-
打开ECUBUS软件,点击Powerful UDS Tester框内的go按钮。
-
点击Open UDS Project,选择之前准备的好的ECUBUS工程(文末会分享出来)。
-
点击 DoCAN框内的go按钮。
-
点击第一个
Group:DownloadFile1
的编辑按钮。
-
在弹出的界面点击
Choose File
按钮,选择之前放到桌面的flash_api.bin
文件,然后点击Change Group按钮完成更改。
-
同样的方法修改第二个
Group:DownloadFile1
,选择的文件是app工程的bin文件。 -
连接上
PCAN-USB
,点击设置按钮,然后点击Connect按钮。如果提示没有识别到硬件,需要去peak官网下载驱动安装一下。
-
其它配置如下图,点击
ADD
按钮添加即可。
-
接着打开PCAN-View,配置好波特率。
-
跳转到Trace窗口,并点击开始录制的按钮。
-
最后点击ECUBUS的start按钮。
-
当下载成功后,会有提示成功的logo出来,并且在PCAN-View的Trace窗口也能看到交互的报文信息。此时,开发板的RGB灯也变成闪烁红色。
-
如果客户想要做压力测试,可以将Cycle的参数设置到需要测试升级的次数,进行自动测试。
5.例程分享
关于本文提到的ECUBUS软件、ECUBUS工程、修改后的boot和app工程,笔者整理之后放在gitee上面了,链接如下。
https://gitee.com/Yingming_Cai/S32K144EVB_UDS_Bootloader_Example.git
如果觉得本文有用,不妨给个一键三连!!!