APP下载

基于S32K148 的车辆网关CAN Bootloader开发与实现

2021-12-30丁元章蔡定江

汽车电器 2021年12期
关键词:上位网关字节

袁 锋,丁元章,张 伟,蔡定江

(1.长三角新能源汽车研究院有限公司,江苏 盐城 224000;2.长三角电驱动科技盐城有限公司,江苏 盐城 224000)

车辆网关(GateWay,GW)为纯电动乘用车的重要零部件,在车辆数据协议实现与数据传输上起着关键作用。如果控制数据协议升级,车辆网关则需要相应的程序更新,传统工具下载升级效率差,所以Bootloader的开发就显得尤为重要[1-2]。Bootloader是固化在微处理器内部Flash特定位置的一段程序代码。每次处理器启动都会运行Bootloader,它会检查是否有来自CAN总线的程序下载请求,如果有则进入Bootloader下载模式,进行程序下载,并校验其完整性,最终完成应用程序的更新;如果没有来自总线的程序下载请求,则跳转至原有应用程序执行[3-5]。

本文采用NXP S32DS IDE集成开发环境S32 Design Studio for S32 Platform 3.4完成基于Cortex-M4F内核S32K148处理器CAN Bootloader软件开发,程序调试器采用SUGGER JLlink V6.9。上位机开发采用Visual Studio 2010实现,通信CAN控制器采用USBCAN-E-mini实现。

1 Bootloader系统设计

1.1 Bootloader原理

Bootloader是车辆网关启动时完成加载引导程序执行的代码。Bootloader一般有两种工作模式:①启动加载模式,该模式下Bootloader作用是将之前存储在存储器中的应用程序加载到RAM中去执行;②下载模式,本文研究的重点,主要功能是下载应用程序,将程序先存在RAM中,再刷写至Flash等固态存储器中完成程序的下载。本文Bootloader系统采用的是基于上位机(PC作为上位机)、CAN控制器(USBCAN-E)和基于S32K148处理器的车辆网关(下位机)的结构,上位机发送的数据经CAN控制器传送至车辆网关模块。同样,当网关模块接收到应答后,会通过CAN控制器将数据发送至上位机,其结构如图1所示。

程序进入Bootloader模式一般有以下两种方式。

1)通过判断处理器某个引脚电平的高低,识别电平高低状态,软件判断执行应用程序或进入Bootloader下载模式。

2)通过设置标志位判断,需要PC上位机与CAN控制器总线数据配合,识别特定的CAN数据格式、标识符和字节数据,软件判断执行应用程序或进入Bootloader下载模式。

本文采用方式2实现,该方式虽然在软件处理上稍显复杂,需要PC上位机与下位机之间的数据和时序的配合。但是相较于方式1,不需要引出单独的引脚,可以减少使用一个I/O口,在整车应用上具有一定的便利性,且节省了I/O资源。

图1 Bootloader结构图

1.2 存储器的分配

S32K148微处理器包含各种存储器和内存映射外设,它们位于一个32位连续地址空间中,地址空间统一编址。该芯片具有3×512KB P-Flash空间,分配地址段为0x00000000~0x0017FFFF。Bootloader在此空间实现,分配地址0x00000000~0x00007FFF为Bootloader代码存储空间,大小为32KB,其余的P-Flash空间为应用程序使用。

2 Bootloader软件设计

2.1 CAN模块配置

S32K148处理器具有3个独立的CAN模块,可用来实现Bootloader的数据传输和状态控制功能。其具有3路FlexCAN模块,均可配置为CAN或CAN-FD工作模式。因目前车辆CAN总线大多还处于CAN工作模式,本文基于CAN模式采用CAN0 来实现。主要配置如下。

1)配置时钟寄存器为外部16MHz晶振时钟,并开启时钟门。

2)配置为CAN模式。

3)设置数据帧格式为标准帧,波特率为500kb/s。

4)配置采用中断方式。

2.2 Flash模块配置

Flash模块的配置是Bootloader实现的重要一环,需要对相关寄存器进行配置。对Flash模块编程主要涉及Flash初始化、Flash擦除与编程写入操作,本文选用的S32K148微控制器Flash存储空间为0x00000000~0x00007FFF,主要配置如下。

1)配置Flash时钟源为内部SPLLDIV2时钟,频率为20MHz,并开启时钟门。

2)P-Flash的擦除方式为扇区擦除,芯片采用的是交叉访问方式实现,最小擦除扇区为4KB,需在Flash驱动中进行相应设置,执行擦除指令时,需配置FCCOB0为0x09,擦除完成之后,方可对Flash执行写命令。

3)P-Flash在FTFC->FCCOB寄存器中配置相应命令,实现Flash的编程写入。FCCOB0为命令寄存器,可用来配置编程、擦除等命令。通过配置FCCOB0=0x07实现编程功能。一次编程的字节数为8个字节。编程地址和数据存储在FCCOB1~FCCOB11寄存器中。

2.3 应用程序配置

在前文中提到Bootloader是固化在整车网关等ECU微控制器的内部Flash中某特定位置的一段程序代码,应用程序同样也是存储在内部Flash中,两者共同占据Flash存储空间。所以二者的存储地址要正确分配,避免重叠。

在本文中,Bootloader存放在0x00000000~0x00007FFF地址空间中。在LinkFiles文件中修改如下。

2.4 S19文件的生成

S19文件是NXP微控制器的程序刷写文件,一般由开发环境自动输出,具有特定的格式[6-7]。在不同的芯片和编译环境中,其生成的文件不同。如MC9S12系列的编译器Code-Warrior 5.2中,其生成文件的后缀为.s19,在MPC56系列编译器CodeWarrior 2.10中,其生成的文件后缀为.mot,本文使用的S32 Design Studio生成的S-format 格式的文件后缀为.srec。虽然后缀名不同,其均具有相同的数据格式,简述如下。

取生成的S19文件的中几行记录加以说明。

1)“S0”它是S文件的第一行数据,主要表示S文件的路径以及文件名信息。

2)“S1”表示该行是一条S1类型的数据,数据13表示该行记录有0x13个字节(包括2字节地址、16字节的数据、1字节校验)。

3)“8000”表示该行记录的地址信息。

4)“00F00120118400007984000079840000”表示该行S1类型数据的数据信息。

5)“CC”是该行数据的最后一个字节,表示该行记录的校验值。

本文采用S32 Design Studio进行开发,下文就在该环境下生成S19文件进行说明和讨论。S32 Design Studio可以经过简单的配置选择,即可以生成S-format输出文件。前文表述,S-format中的程序信息是由S1、S2或S3等行记录组成。S1文件代表行记录中2字节的地址域,S2文件代表行记录中3字节的地址域,S3文件代表行记录中4字节的地址域。通过实践发现,在默认情况下,S32 Design Studio根据程序地址空间以及代码规模自动选择生成S1、S2或S3格式行记录。这样对我们在Bootloader开发中,进行上位机开发中带来了不便。

为解决上述问题,在开发中,根据芯片的地址宽度为32位的特点,实现在将S19代码生成或转换为S3格式。实现方式有以下两种。

1)在S32 Design Studio中设置,强制生成S3格式行记录。

2)在S32 Design Studio中保持默认,通过上位机实现S1、S2向S3格式的转换。

本文采用方式2,在上位机中软件编程实现格式的转换,便于工具的一致性和通用性。

示例如图2与图3所示。

图2 生成S19文件

图3 S3格式上位机转换

3 Bootloader的软件流程(图4)

系统启动后,初始化系统时钟、Flash模块、CAN模块和控制变量。初始化完成后,进入主程序运行,定时接收Bootloader连接数据帧。当接收到特定的数据帧并连接成功后,进入Bootloader下载模式,执行应用程序刷写循环。刷写完成后,跳转到应用程序起始地址执行。本文中的应用程序初始地址位0x00008000。

整个Bootloader流程如图4所示。

图4 Bootloader流程图

下面给出本文上位机与基于S32K148处理器的下位机具体的通信过程,通过CAN通信口将S19记录文件写入网关ECU中。

1)上位机端开启,加载并转换记录文件,点击启动连接,持续发送报文ID=0x64,data0=0xFF至下位机。下位机上电初始化,初始化完成后。进入计时循环,并中断接收上位机报文,与上位机建立通信连接。若连接成功,回复ID=0xC8,data0=0x01至上位机,否则跳转到应用程序起始地址执行。

2)连接成功,下位机执行擦除指令,擦除Bootloader所在地址之外的地址空间。

3)擦除完成,下位机发送当前状态ID=0xC8,data0=0xC1至上位机,上位机开始逐行读取S19文件行记录,并发送至下位机,一行发送完成,上位机发送ID=0x64,data=0xFE。

4)下位机接收到一行完成标识,对接收到的数据进行校验。

5)数据校验成功后,执行Flash写入操作,将S19文件行记录中的数据写入地址。行写入完成,ID=0xC8,data=0xC3至上位机,表示一行数据接收并写入完成。

6)循环执行行记录接收、校验和行编程。

7)上位机发送ID=0x64,data=0xFD,表示整个S19文件发送完成。

刷写过程如图5所示。

图5 刷写过程示例图

4 结论

本文介绍了基于S32K系列微控制器S32K148,采用CAN总线技术,通过NXP S32DS IDE工具进行Bootloader相关的开发与实现。系统通过识别特定的CAN数据格式、标识符和数据字符选择进入下载模式或者执行应用程序[8]。Bootloader与上位机通过固定ID的CAN帧进行交互反馈,可以成功地完成S19文件的下载并将其刷至目标Flash模块中,便于系统升级。此外,本文了基于S32K148芯片的开发过程对于其它基于S32K系列Bootloader的开发也有一定的借鉴作用。当然本文也存在着需要进一步改进的地方,如采用UDS 14229协议传输S19文件和采用基于CAN-FD的Bootloader开发,这是后续开发的方向。

猜你喜欢

上位网关字节
No.11 字节跳动计划自研芯片:仅供内部使用
智能燃气表物联网运行体系网关技术研究
基于FPGA的工业TSN融合网关设计
大规模低轨卫星网络移动性管理方案
No.8 字节跳动将推出独立出口电商APP
一种主从冗余网关的故障模式分析与处理
一场史无前例的乐队真人秀
基础油“上位”
人类进入“泽它时代”
基于VC的PLC数据采集管理系统