汽车标定技术(八)--MPC57xx是如何支持标定的页切换

目录

1.页切换的概念

[1.1 标定常量的理解](#1.1 标定常量的理解)

[1.2 页切换](#1.2 页切换)

2.MPC57xx的Overlay模块

3.小结


1.页切换的概念

在汽车标定测量中,有一个概念我想很多人都听过,但是实际上在项目里没有用到过,那就是今天要讲的页切换概念。在讲页切换的时候,我们先来理解Flash和RAM中的标定参数。

1.1 标定常量的理解

在写代码时, 通常我们对常量数据都会增加const类型,如下

cpp 复制代码
const uint8 calibration_1 = 10;

编译后,calibration_1会存放在Flash的某个区域,我们可以通过hex和map去地址找到。

但实际上,标定参数对于ECU本身来说应该是常数,但是对于标定人员来说,它是可变的。如果标定人员直接通过map地址去修改值,那就会直接跑飞;如果通过擦除flash、写flash的方式进行标定,一是速度很慢,二是Flash不能按byte擦除。所以这就出现了在线标定的矛盾,既要快,还要方便。

有朋友可能会说,那我用EEPROM或者EEPROM emulation来做呀,也没问题,成本上去了,手撸Fee,慢慢调bug也是可以的。

为此,我们为了方便快速修改标定量,如果能把标定量存放到Flash,但加载到RAM运行,意味着CPU每次都到RAM中去取标定量的值,这个问题不久解决了吗?

cpp 复制代码
#pragma section "cal_Ram"
const volatile uint8 calibraion_1 = 10;

链接文件修改为:

cpp 复制代码
.cal_ram:
{
    ...
} > WP_CAL AT > RP_CAL

意味着存放在RP_CAL这个Section里,实际运行在RAM,因此编译出来的地址为RAM地址。

上电启动时,把RP_CAL这里面的数据copy至WP_CAL即可。(后面单独出一篇说一下不同链接文件、标识符对于标定量地址的影响)

1.2 页切换

有了上述概念,我们在标定测量系统中经常看到的WP/RP,即Working Page和Reference Page,在ECU对应的外设分别是RAM和Flash,如下:

通常ECU是去FLASH获取常数的数据。但对于应用程序,将数据复制到RAM中,以便工具对其进行标定。ECU可以在RAM和FLASH之间随时切换,从而可以通过切换到安全的FLASH数据以随时纠正由于标定疏忽而可能出现的临界状态。

注意理解上面这句话,这表示ECU或者说是CPU对于某一个标定参数的访问地址可以随时通过页切换的指令来进行切换。这就有点神奇了,按理说一个常量经过链接文件编译出来出后的地址是固定的,CPU也只会根据这个地址去获取数据,那么这个页切换到底是如何做到的呢?

我们换个思路,既然CPU只会根据map文件定义的地址去获取标定数值,页切换的时候就是保证Flash值和RAM值的来回切换,这还不简单么,实现a(RAM)\b(Flash)互换,那就是 t = a,a = b,t一直保存,用于从RP切换到WP。

但这问题就来了,一旦WP很大,例如32K,copy的过程会比较耗费资源,且速度很慢,所以有些供应商页切换基本就没有做,毕竟上位机切到RP的时候自动变灰嘛,标不了,哈哈哈,但没法实现快速切到Flash参数。

所以我们就要来看看从芯片硬件层面有没有什么机制来快速实现切换呢?答案是有的,参考汽车标定技术(七)--英飞凌TC3xx_Overlay实现页切换-CSDN博客

2.MPC57xx的Overlay模块

除了英飞凌,NXP的MPC57系列同样也实现了overlay,但与英飞凌不一样的是,NXP的overlay实现在Flash/SRAM controller这一层,英飞凌在CPU这一层。我们具体来看。

首先是overlay系统框图:

CPU 发出的读访问通过AXBS传入到SRAM或者Flash controller;在标定期间,可以通过修改controller的overlay寄存器来改变路径。

以CPU访问Flash某个常量为例,路径为:CPU -> AXBS -> FMC -> Flash;如果此时overlay功能打开,那么路径就变为了 CPU->AXBS-> FMC->SRC->SRAM。可以看到,CPU的地址总线和数据总线路径仍然是朝Flash去的,但在FMC这里被转到了SRAM。

那么通过这个机制,就可以实现快速页切换;在WP时,打开overlay功能,这是访问的是RAM,可以随便进行修改,切换到RP时,关闭overlay功能,这时候就访问Flash了,同时upload到上位机,显示的也是Flash里的值,完美。伪代码如下:

cpp 复制代码
if (WP == switchTarget)
{
    /* Enable Overlay */
}
else
{
    /* Disable Overlay */
}

3.小结

从上文,我们了解到页切换的本质,以及为什么要使用一个Flash和RAM对应的标定区域,分析了MPC57xx是如何实现overlay机制的基本原理。

相关推荐
水质在线监测仪厂家_慕迪科技14 小时前
讲述如何正确地处理汽车涂装废水!
其他·汽车
AgentMaster15 小时前
车型平台数据口径不一、供应链追溯断链?4 款数据治理系统选型对比与汽车行业落地记录
大数据·人工智能·汽车·交通物流
Luminbox紫创测控16 小时前
车载AR-HUD阳光倒灌与热效应:太阳光模拟器如何复现太阳辐射?
测试工具·汽车·ar·安全性测试·测试标准
YOLO数据集集合1 天前
标准汽车行驶工况数据集(21种典型工况)| 汽车工况 行驶循环 油耗测试 排放认证 车辆仿真 交通能耗 标准数据集8018期
人工智能·目标检测·汽车·标准汽车行驶工况·汽车工况数据集·21
TMT星球2 天前
地平线征程智驾芯片量产突破1500万!
汽车
小码哥0682 天前
新能源汽车充电桩管理系统:功能、技术与源码采购避坑指南摘要
汽车·互联互通·充电桩源码·充电桩系统·充电桩·新能源汽车
虹科Pico汽车示波器2 天前
汽车免拆诊断案例 | 2014 款宝马 X4 车发动机偶尔无法起动
汽车·汽车示波器·曲轴位置传感器·宝马x4·发动机无法起动·控制单元dme·发动机正时波形
格拉思总部2 天前
一只轮毂背后的完整工序:格拉思构建全流程设备矩阵
汽车·创业创新
Godspeed Zhao2 天前
现代智能汽车系统——智驾传感器时钟同步
汽车
慧都小项2 天前
汽车工具链重复测试太耗人?用 TestComplete 自动跑
功能测试·回归·汽车·嵌入式·软件工程·测试覆盖率