目录:
引言
1. MPC5744P 的 bootloader 和应用程序存储器地址分配
1.1 MPC574xP 系列 MCU 的 SRAM 资源
1.2 MPC574xP 系列 MCU 的 Flash 资源
1.3 MPC5744P CAN 总线 bootloader 和应用程序存储器地址分配
2. Flash 驱动开发(下载安装和使用 C55 Flash SSD)
3. FlexCAN 驱动开发
3. 1 DEVKIT-MPC5744P CAN 总线硬件设计
3.2 Qorivva MPC57xx 系列 MCU FlexCAN 模块功能简介
Qorivva MPC57xx 系列 MCU 使用 FlexCAN 模块进行 CAN 总线通信,其具有如下特性:
3.3 FlexCAN 模块通信波特率配置
3.4 FlexCAN 模块 RX ID 滤波器设置,中断设置以及驱动程序 API 介绍
4. 上位机软件及 CAN 总线通信协议介绍
5. bootloader 程序流程介绍(解析 S19 文件、调用 Flash SSD 编程应用程序以及跳转方法)
6. 使用本文介绍的 bootloader
6.1 基于 DEVKIT-MPC5744P 的测试硬件连接
6.2 在 DEVKIT-MPC5744P 上测试本例 bootloader
总结
引言
Qorivva MPC57xx 系列汽车级 MCU 至 21015 年底开始产量到现在,被广泛使用于各种汽车电
子 ECU 产品中,而汽车电子 ECU 中,越来越多的要求开发基于 CAN 总线通信的 bootloader
功能,以实现在线升级应用程序的功能,或者对接未来基于车联网的 FOTA--Firmware
Over-The-Air 功能。
而 Qorivva MPC57xx 系列汽车级 MCU 相对来说,其外设功能模块更加复杂,片上集成的存储
器--SRAM 和 Flas 模块较之前的 S12(X)系列 MCU 尺寸更大而且更加复杂,另外,其软件开发
环境--S32DS for Power V1.0/1/2 也是一个推出不到两年的新环境,用户相对不是和熟悉,
这些因素都导致 Qorivva MPC57xx 系列汽车级 MCU 的 bootloader 具有一定的挑战。
基于以上考虑,作者基于 Qorivva MPC57xx 系列的 C55 Flash SSD 和 S32DS for Power V1.2
开发完成了 MPC5744P 的 CAN 总线 bootloader,并在 DEVKIT-MPC5744P 上测试 OK。
本文旨在以 MPC574xP 为例介绍 MPC57xx 系列 MCU 的 bootloader 开发流程和注意事项,希望
对大家有所帮助。
Tips:关于汽车电子 ECU bootloader 开发的一般原理和注意事项,请参考本公众号之前的
文章《汽车电子 ECU bootloader 开发要点详解》(直接点击跳转阅读);
1. MPC5744P 的 bootloader 和应用程序存储器地址分配
1.1 MPC574xP 系列 MCU 的 SRAM 资源
MPC574xP 系列 MCU 的 SRAM 包含系统 RAM(Syetem RAM)和内核局部存储器(Local memory)两
种,在 CPU 内核寻址地址空间中的地址映射分配如下:
Syetem RAM: 地址 0x4000_0000 ~ 0x4005_FFFF,最多 384KB 不同的 part number 大小不
同;
Local momory:地址 0x5080_0000 ~ 0x5080_FFFF, 全部 part number 均为 64KB;
Tips:
A. 同一个系列的 MCU,不同的 part number 其 System RAM 的大小有所不同,MPC574xP 系列
MCU 的具体 SRAM 地址映射如下:
B.
CPU 内核访问局部存储器(Local memory)比系统 RAM 更加高效,而且在多核 MCU 中,每
个内核的局部存储器(Local memory)只有其自身可以访问,所以一般将运行在该内核上的应
用工程的堆栈分配到其局部存储器(Local memory)上,这样不仅提高了内核的运行效率,以
避免了多核最存储器资源的访问冲突,当然,其也可以分配给应用工程的其他数据段使用,
比如.data 段或者.bss 段等;
以下为多核 MCU--MPC574xR 系列的 SRAM 地址映射,其中多核 CPU 的 Local Memory 地址是分
开独立的:
1.2 MPC574xP 系列 MCU 的 Flash 资源
MPC57xP 系列 MCU 的片上 Flash 包括 16KB UTest Flash、96KB 的 Data Flash 和多达 2464KB
的 Code Flash 以及相应的 Mirror Flash:
UTest Flash:地址 0x0040_0000 ~ 0x0040_3FFF,总共 16KB,系统保留区,用户存放 Flash
和芯片配置信息等,比如 UDF 记录、ADC trim 参数以及 IRC trim 值等;
Data Flash:地址 0x0080_0000 ~ 0x0081_7FFF,总共 96KB, 4 个 Block,占 3 个 RWW 分区,
一般用作模拟 EEPROM,当然不做模拟 EEPROM 使用时,也可以用于存放用户应用程序代码和
数据;
Code Flash:包括 416KB 的 Small and medium Flash 块,地址 0x00A0_0000 ~ 0x00A5_FFFF
和最多 2MB 的 Large Flash 块,地址 0x0100_0000 ~ 0x011F_FFFF,其默认用于存储用户应
用程序代码和数据,如果需要,也可以将其用于模拟 EEPROM。
Mirror Flash:该区域由地址 0x08A0_0000 ~ 0x08A5_FFFF 的 384KB Small and medium code
Flash 的镜像 Flash 和地址 0x9100_0000 ~ 0x911F_FFFF,最多 2MB 的 Large Flash 的镜像
Flash 块组成。其为系统保留区,用户不可编程;
MPC5744P 总共有 2.5MB 片上 Flash 存储器,包括 4 个 16KB 的 Low Flash Block(4*16KB
=
(6*64KB =
384KB)以及 8 个 256KB 的 256KB Flash Block(8*256KB =
2MB):
64KB)、2 个 32KB 的 Mid Flash Block(2*32KB =
64KB)和 6 个 64KB 的 High Flash Block
64KB
64KB
384KB
2MB =
2.5MB
MPC5744P 具体映射地址和 Flash Block 分配以及 RWW 分区和 Block 大小如下表:
属于不同 RWW 分区的 Flash Block 间支持 Read-While-Read 操作,即允许在 A Flash Block
的 Flash 驱动可以操作 B Flash Block;地址 0x80000~0x817FFF 的 96KB Flash 空间包含
LowFlash Block0~1 和 Mid Flash Block0~1 总共 4 个 Flash Block 被分配作为模拟 EEPROM
使用,在整个 2.5MB 的 Flash 地址空间中,只有 Low Flash Block2~3, High Flash Block0~1
和和 256KB Flash Block0~3 四个 Flash Block 可以作为启动位置(boot location0~7)。
所谓 boot location 就是每次 MCU 复位后运行 BAM 时寻找合法启动半字和复位向量的区域。
复位后 CPU 将从 boot location0~7 依次查找由正取 boot_ID--0x5A 组成的合法复位配置半
字(RCHW)(高 16-bit 为 RCHW,低 16-bit 保留,位于所在 Flash block 的起始地址)和应
用程序开始地址(32-bit 复位向量,位于所在 Flash block 的起始地址偏移 0x4 的地址):