汽车电子ECU BootLoader开发之基于CAN总线通信的MPC574xP系列MCU bootloader开发详解
执行摘要
介绍
1.与申请内存地址分配
1.1 系列MCU的SRAM资源
1.2 系列MCU的Flash资源
1.3 CAN总线及应用内存地址分配
2. Flash驱动开发(下载、安装和使用C55 Flash SSD)
3. 驱动开发
3. 1-CAN总线硬件设计
3.2 系列MCU模块功能介绍
系列MCU采用模块进行CAN总线通信,具有以下特点:
3.3 模块通讯波特率配置
3.4 模块RX ID过滤器设置、中断设置及驱动API介绍
4、上位机软件及CAN总线通讯协议介绍
5、程序流程介绍(解析S19文件、调用Flash SSD编程应用程序及跳转方法)
6.使用本文介绍的方法
6.1 基础测试硬件连接
6.2 测试此示例 -
总结
介绍
该系列汽车级MCU于2015年底开始量产,已广泛应用于各类汽车电子ECU产品中。在汽车电子ECU中,越来越多的要求开发基于CAN总线通信的功能以实现在线升级应用。功能,或者连接未来基于车联网的FOTA——Over-The-Air功能。
相对而言,该系列汽车级MCU的外围功能模块更为复杂。片上集成存储器-SRAM 和 Flas 模块比之前的 S12(X) 系列 MCU 更大、更复杂。另外,其软件开发环境——S32DS for Power V1.0/1/2也是推出不到两年的新环境,用户对其还比较陌生。这些因素导致该系列汽车级MCU面临一定的挑战。
基于以上考虑,笔者针对Power V1.2基于C55 Flash SSD和S32DS系列开发了CAN总线,并在-上测试OK。
本文旨在以一系列MCU为例介绍开发流程和注意事项。希望对大家有所帮助。
温馨提示:汽车电子ECU开发的一般原理和注意事项,请参考本公众号之前的文章《》(点击跳转直接阅读);
1.与申请内存地址分配
1.1 系列MCU的SRAM资源
该系列MCU的SRAM包括系统RAM(RAM)和核心本地存储器(Local)。 CPU核寻址地址空间中的地址映射分配如下:
RAM:地址~,最大384KB。不同的零件尺寸不同;
Local:地址~,各部分均为64KB;
尖端:
A. 同系列MCU的不同部分,RAM大小不同。该系列MCU具体SRAM地址映射如下:
B. CPU 核访问本地内存(Local)的效率比系统 RAM 更高,而在多核 MCU 中,每个核的本地内存(Local)只能由自己访问,因此运行在 CPU 上的应用项目的堆栈core 一般会分配到其本地内存(Local),这样不仅提高了内核的运行效率,避免了多核内存资源的访问冲突,当然也可以分配到应用项目的其他数据段,例如 .data 段或.bss 部分等;
以下是多核MCU--系列的SRAM地址映射,其中多核CPU的Local地址是分开且独立的:
1.2 系列MCU的Flash资源
该系列MCU的片上Flash包括16KB UTest Flash、96KB Data Flash以及最多Code Flash及对应Flash:
UTest Flash:地址~,共16KB,系统保留区域,用户存储Flash和芯片配置信息,如UDF记录、ADC微调参数和IRC微调值等;
Data Flash:地址~,共96KB,4个Block,占用3个RWW分区,一般用于模拟。当然,不用于仿真时,也可以用来存储用户应用代码和数据;
代码闪存:包括416KB小型闪存块、地址~和高达2MB大型闪存块、地址~,默认用于存储用户应用程序代码和数据,如果需要也可用于仿真。
Flash:该区域由~地址处的384KB Small和代码Flash的镜像Flash块以及地址~处的Large Flash的镜像Flash块组成,最大可达2MB。为系统保留区,用户不能编程;
片上Flash存储器总计2.5MB,包括4个16KB Low Flash (4*16KB =64KB)、2个32KB Mid Flash (2*32KB =64KB)和6个64KB High Flash (6*64KB) =384KB)和8个256KB闪存块(8*256KB =2MB):
64KB+64KB+384KB+2MB=2.5MB
具体映射地址和Flash Block分配以及RWW分区和Block size如下:
属于不同RWW分区的Flash Block支持Read-While-Read操作,允许A Flash Block中的Flash驱动程序操作B Flash Block;地址~处的96KB Flash空间包含~1和Mid Flash~1,总共4个Flash ,分配给模拟使用。在整个 2.5MB Flash 地址空间中,只有 Low Flash ~3、High Flash ~1 和 256KB Flash ~3 四个 Flash Block 可以用作引导位置(boot ~7)。
所谓引导区就是MCU复位后每次运行BAM时找到合法启动半字和复位向量的区域。复位后,CPU会从boot~7开始依次查找正取指令--0x5A组成的合法复位配置半字(RCHW)(高16位为RCHW,低16位保留,位于起始地址) Flash 块的起始地址)和应用程序起始地址(32 位复位向量,位于距 Flash 块起始地址偏移 0x4 的地址处):
提示:该系列CPU核与S08、S12(X)、ARM-M核等其他MCU核不同。复位后应用程序首次运行的地址通常称为复位向量,不放置在中断或异常向量表中。 ,但保持Flash在boot中的Block地址偏移0x4。因此,当我们开发基于内核的一系列MCU时,为了保证每次上电后首先运行,我们必须将启动函数地址和正确的与应用程序启动函数地址放在一起。正确的驻留闪存块位于前面/较小的引导闪存块中。
温馨提示:该系列MCU的Flash模块功能介绍,请参考本公众号《》之前的文章(点击跳转直接阅读);
1.3 CAN总线及应用内存地址分配
鉴于上述介绍,本文介绍的设计分配boot 0和1所在的两个16KB Small Flash Block作为存储空间,并将启动配置半字和启动函数地址分配到其起始~地址。
具体来说,是通过修改项目的链接文件来实现的,如下:
默认的S3DS for Power v1.2新应用工程的链接文件如下,分配了上述Flash Block和4个用于仿真的Flash Block(共96KB):
因此,本文介绍工程及应用工程的内存地址分配如下:
2. Flash驱动开发(下载、安装和使用C55 Flash SSD)
本文介绍NXP官网提供的C55FG Flash SSD(REV 1.1.0)的使用。您可以在NXP官网搜索栏中输入“.exe”进行下载安装:
该SSD中提供了以下Flash驱动函数,其对应的功能如下:
尖端:
A、关于该系列MCU的C55 Flash模块及其SSD驱动的使用,请参考本公众号《》之前的文章(点击跳转直接阅读),这里不再介绍。
B、基于上述1.3节-CAN总线及应用内存地址分配简介,本例中使用RWW分区1(RWW分区唯一的32KB地址空间)作为存储空间,其余分配给应用程序的 Flash 地址空间都属于不同的 RWW 分区,因此可以将 SDD 保存在 Flash 空间中,并可以直接在其上运行 Flash 驱动函数,对 Flash 空间进行擦除和编程。
在SSD配置文件.h中,分配给项目的低Flash块2和3被定义为锁保护眼,其余Flash块(和)为0-不受保护,以防止它们被意外擦除,并将被定位在 0x2(2 个块):
并将.c中的[]数组成员定义为0x2和0x3,这样就可以完成除去保护和擦除之外的所有分配给应用程序的Flash块:
C、如果你想开发同样可以更新的双启动模式,并且想在SRAM中运行Flash SSD,可以参考本公众号之前的文章《》(点击跳转阅读)介绍如何将Flash SSD放入SRAM中。保护将自定义代码段中的重定向函数自动复制到RAM的方法和步骤。
3. 驱动开发
3. 1-CAN总线硬件设计
本设计采用——与上位机软件通信获取应用程序,连接板载CAN收发器(默认使能),源自P5。
3.2 系列MCU模块功能介绍
系列MCU采用模块进行CAN总线通信,具有以下特点:
兼容-1标准;
0~8字节灵活消息邮箱(MB-);
每个消息邮箱(MB)均可配置发送或接收,均支持标准帧和扩展帧消息;
每个消息邮箱(MB)都有自己独立的RX掩码寄存器,用于ID过滤;
全功能RX FIFO存储能力,最多可支持6帧数据接收和自动内部指针处理;
支持发送终止功能;
可编程时钟源选择,可选择总线时钟或外部晶振时钟;
未使用的RAM空间可以作为通用RAM空间使用;
兼容监控模式;
可编程辉煌模式,支持自检运行;
可编程发送优先级调度策略:ID最小优先、缓冲区最小优先或缓冲区最高优先;
仅 16 位运行时间戳;
特定消息的全球网络时间同步;
可屏蔽中断;
传输介质独立(外接收发器);
高优先级的消息仲裁会有较短的延迟;
支持低功耗模式;
还提供了一些重要的新功能:
远程请求帧可以自动处理或通过软件处理;
CAN 位时间设置和配置位仅在模块 () 模式下可写;
TX消息邮箱(MB)状态;
接收到的消息帧的ID过滤器命中提示(IDHIT);
在状态1寄存器中提供SYNCH位,表示模块已经同步到CAN总线;
发送消息的CRC状态;
接收FIFI全局掩码寄存器;
匹配处理时,可以选择消息邮箱优先级和接收先进先出;
提供强大的接收FIFI ID过滤器,可设置128个扩展帧、256个标准帧或512个部分(8位)ID,以及32个独立ID的屏蔽能力;
100%向前兼容旧模块;
3.3 模块通讯波特率配置
本开发配置的外部40MHz晶振作为时钟源,通过配置模块的控制寄存器1()得到的通信速率为:
CAN_0.CTRL1.R = ;
模块波特率计算公式如下:
3.4 模块RX ID过滤器设置、中断设置及驱动API介绍
通过调用API函数:
(MB6、、、0x64、0xFFF);
/* CAN帧ID仅ID 0x64*/
配置接收独立掩码寄存器()和接收消息邮箱(MB)。设置消息邮箱MB6只接收ID=0x64的标准数据帧,即本设计中上位机软件下载的数据的CAN消息帧ID;
配置中断屏蔽寄存器1()以启用MB6的接收中断:
CAN_0..R = ;/*首先清理标志*/
CAN_0..R = ;
提示:模块各MB的发送完成和接收数据准备中断由/2中相应位控制。因此,为了避免查询模式下用于发送数据的MB在发送完成后也产生中断,需要将对应的MB中断使能位清零;
并配置中断优先级寄存器PSR[523],设置中断优先级为3:
.PSR[523].R = ;/* BUF47 为 3*/
在MB4~7的中断ISR中调用API(共享相同的中断向量和ISR):
=(MB6);/*将CAN数据复制到RAM中*/
接收MB6收到的CAN报文消息。
调用API:(MB0,);
使用查询方式用MB0发送CAN报文信息来响应上位机软件。
Tips:设置接收ID过滤器,只接收PC主机软件下载数据所使用的ID,这样可以避免CPU被其他ID不相关的CAN报文中断,从而提高效率。
4、上位机软件及CAN总线通讯协议介绍
PC上运行的上位机软件主要功能是读取目标MCU的应用S19文件,并调用USB转CAN总线适配器()逐行下载到目标MCU。其软件设计软件设计流程图如下:
本设计中采用C++调用WFC和武汉极光电气的USB转CAN适配器驱动程序编写上位机接口软件。
PC上位机下载的S19文件的CAN报文是ID为0x64的标准数据帧,上位机响应上位机的CAN报文帧是ID为0xC8的标准数据帧,通信速率设置为/s。因此,在S12G初始化时,将MSCAN模块的接收ID过滤器设置为仅接收ID为0x64的标准帧,以避免正常网络上其他ECU的干扰。具体在车辆上实现时,通信速率由当前ECU所在的CAN网络决定,其通信的消息ID由车辆制造商定义。具体CAN报文命令定义如下:
5、程序流程介绍(解析S19文件、调用Flash SSD编程应用程序及跳转方法)
每次MCU复位后(包括上电复位、看门狗复位、外部输入复位、低电压检测复位、时钟检测复位和非法地址),进行系统初始化、配置系统时钟、打开定时器、配置和使用状态指示的LED控制GPIO,打开CPU全局中断,然后等待上位机启动命令,检查是否超时:
如果在规定的500ms内收到上位机请求进入引导的命令,则接收并解析数据,得到行地址和字对齐(1word=2Byte)数据,然后将S19行地址空间决定。
如果是Flash地址,且是第一次接收Flash数据,则片上除程序外的所有Flash都会被擦除,为编程应用做准备;对于Flash地址处的数据,在烧写到Flash之前必须进行上述分析。得到的地址和数据是4字(8字节)对齐的,以满足系列MCU C55 Flash的ECC要求;
如果是RAM地址,则不需要擦除,引入的数据直接写入指定的RAM地址;
然后与上位机建立通信,逐行接收,解析结果烧录到片内Flash//RAM对应地址处,直到整个应用S19文件结束,最后复位外设(关闭MSCAN)并清除所有系统RAM空间,关闭CPU全局中断,禁用所有外设中断,结束跳转到应用复位函数并开始执行应用程序;
如果在指定的500ms内没有收到上位机通过CAN发送的启动命令,CPU全局中断将直接关闭,所有外部中断将被禁用,应用程序将结束并跳转到应用程序复位函数开始执行应用程序。
整个项目的软件流程图如下:
从前面1.3 CAN总线和应用程序内存地址分配的介绍来看,根据Power e200内核的启动流程,该地址处存放的是应用程序工程的启动函数地址,所以只需要把它取出来转换一下即可转换成函数指针来运行并跳转到应用程序。
提示:在跳转到应用程序之前,请尝试将应用程序中使用的外设恢复到其初始化状态/配置,并清除所有RAM,以确保跳转到应用程序时,其运行环境与单独下载并运行的环境相同应用。程序应尽可能一致。以避免造成的影响。
新创建的S32DS for Power v1.2应用程序项目在编译和链接后不会生成S19文件。您需要配置项目属性以启用 Flash 图像:
选择S-:
配置完成后,重新编译应用工程,会在工程目录的FLASH子目录下生成一个与工程同名的S19文件。其后缀默认为.srec,需要手动更改为.s19:
在S32DS for Power v1.2自动生成的S19文件中,存在非8字节地址对齐:
所以下载前需要使用其他软件(例如)将其对齐8字节:
例如,本应用工程编译的S19文件中,Block 1的长度为0x1FE=510字节,而Block 2的长度为0xF4=244字节,两者不是8字节对齐的:
打开后,菜单Edit-->Data打开对齐配置窗口
在对齐设置窗口中,设置为8,填充0xFF,并启用对齐:
只需将其保存为另一个名称即可:
对齐后的结果如下。可以看到Block 1和Block 2是按照8字节对齐的。
6.使用本文介绍的方法
6.1-基础测试硬件连接
本示例基于和记太阳能的USB-CAN开发和测试。相应的硬件连接如下图所示:
6.2 测试此示例 -
如上图连接好电脑和硬件后,
首先,下载本文末尾提供的百度云盘共享,并将-7.11.09.zip中包含的测试应用项目导入到S32DS for Power V1.2中(通过菜单File-->..-- >--> inti ),
并通过板载调试器下载der项目到-;
然后,打开基于极光太阳能USB-CAN开发的上位机软件下载测试应用项目S19文件:
Step1:下拉选择通讯波特率——;
Step2:点击“打开”,打开USB-CAN;
Step3:点击“发送文件...”,选择8字节对齐的测试应用工程的S19文件--.s19,开始发送/下载;
最后,复位(按外部复位按钮SW3或上电POR复位)——测试应用程序将开始更新:
更新完成后,MCU会自动跳转到测试应用程序。此时可以看到板载RGB LED灯被PIT中断,红蓝LED交替闪烁。
提示:下载过程中,一开始会出现如下暂停界面。原因是片上Flash正在擦除,所以需要很长时间。在此期间,主机暂停下载数据并等待其擦除完成。
总结
本文系统介绍了CAN总线的开发,并详细讲解了Flash驱动、配置和内存地址空间划分、跳转到应用程序等开发难点。还提供了车载测试和验证的方法和方法。步。
虽然是某系列MCU的开发实例,但对于其他系列MCU的开发也具有参考意义。
我已将本文介绍的工程及测试APP应用工程及配套上位机软件分享至以下百度云盘。您可以下载以供参考和学习。希望对大家有所帮助。
关联: ;
密码:xbtf