APP下载

基于Overlay动态分配的ECU在线标定实现

2021-05-14刘龙龙

计算机应用与软件 2021年5期
关键词:寄存器标定定量

王 民 刘龙龙

(上海汽车集团股份有限公司技术中心 上海 201804)

0 引 言

在整车V模型的开发流程中,软件测试和标定是非常重要的一环,软件的功能是否满足需求需要测试和标定进行验证。当前,软件标定功能是基于XCP协议,利用不同的标定测量工具(如INCA、CANape等)开展的,通过将不同的参数进行标定验证,得出软件最优化的功能,最终将标定好的参数固化到FLASH中,完成整个标定的过程。传统的标定方式是这样实现的:在软件初始化过程中,定义在FLASH中的参数(标定量)会被全部拷贝到RAM中进行重映射,在请求更改标定量时,通过更改RAM中的数据更改FLASH中的数据,进而影响参数的变化。此过程中,要将FLASH中的所有标定量拷贝到RAM中,需要有足够大的RAM空间,工程上通常这需要定制有超大RAM的开发芯片。当RAM空间小于所要映射的FLASH空间时,由于部分标定量不能被拷贝到RAM中实现映射,进而导致此部分标定量不能被标定[1]。

由于有超大RAM的芯片只在开发阶段使用,其使用量不多,价格通常是量产芯片的一百倍左右。同时能做在线标定的这种ECU控制器也非常昂贵,是常规量产控制器的几十倍,所以如果在量产小RAM芯片上实现通常的标定功能就能显而易见地节省一大笔开销。因此,针对RAM空间小于标定FLASH空间的情况下,如何利用有限的RAM资源实现在线标定功能成为本文的研究目的。

1 在线标定实现原理

1.1 Overlay机制功能描述

本文基于英飞凌AURIX芯片的Overlay模块实现ECU在线标定功能开发[2],其他芯片也具有类似的模块来实现此功能[3-4]。英飞凌AURIX芯片提供了Data Overlay功能以实现FLASH和RAM之间的映射,其目的是实现更改RAM中的内容达到最终更改FLASH中的内容。在程序设计的时候,所有的标定量都会被定义在FLASH中,实现标定FLASH和RAM之间的映射,使得更改RAM中的数据也能更改映射之后的FLASH中的数据,以达到在线标定的目的,Data Overlay功能示意如图1所示。

图1 Data Overlay功能示意

针对Data Overlay功能的实现,AURIX芯片定义了32个Overlay块,每个Overlay块可通过如下三个参数实现目标地址(FLASH)和映射地址(RAM)之间的映射。

Overlay块目标地址:被映射的FLASH起始地址。

Overlay块大小:被映射的FLASH的大小,大小范围是32~128 KB。

Overlay块映射地址:映射到的RAM起始地址。

每个Overlay块有3个寄存器来实现上述三个参数的配置:Overlay块目标地址通过寄存器OTAR配置。Overlay块大小通过寄存器OMASK配置。Overlay块映射地址通过寄存器RABR来配置,其中:RABR.OMEM用于选择重映射的RAM类型,共有LMU、DSPR、EMEM和EBU四种RAM可用;RABR.OBASE用于选择映射的RAM起始地址;RABR.OVEN用于使能或不使能目标地址和映射地址之间的映射。Data Overlay的实现原理如图2所示。

图2 Data Overlay实现原理

1.2 ECU在线标定过程

由于XCP标准中已经详细地描述了在线标定的流程[5],在此只简单陈述标定的流程。当工程师利用标定工具(Master端,如INCA)与ECU连接的时候,主要包含了如表1所示的指令[6-8]。

表1 连接ECU时的XCP指令集

当Master端RAM空间的checksum数值与ECU端FLASH和RAM空间的checksum数值不一致时,Master会提示是否将Master端的数据下载到ECU RAM端,如果选择下载,则会执行如表2所示的指令。

表2 ECU Download数据时的XCP指令集

在下载完数据之后,ECU就被切换到RAM PAGE区域,此时定义在FLASH中的标定量就可以被修改。当用户通过SET_CAL_PAGE ECU to FLASH的时候,ECU就被切换到FLASH PAGE区域,此时定义在FLASH区的标定量就不可以被修改,软件以定义在FLASH中的标定量原始数值运行。在整个标定过程中,最重要的就是DOWNLOAD和SET_CAL_PAGE指令,本文主要进行的工作就是在ECU接收到Master请求的DOWNLOAD命令时,利用Overlay机制如何动态分配FLASH空间与RAM空间的映射,并将所请求更改的数据拷贝到已实现映射的RAM中去。

2 软件设计

2.1 内存划分

由于AURIX芯片支持通过RABR寄存器的OVEN位控制每个Overlay块单独的使能和非使能,这就为动态分配Overlay块以实现FLASH和RAM之间的映射提供了可能。与传统的标定方式不同的是,基于AURIX的Overlay机制的标定方式不需要FLASH全部与RAM之间进行映射,而只需要对于被标定的变量所在的FLASH进行映射即可,这就需要对FLASH和RAM进行空间上的划分。由于AURIX芯片只提供了32个Overlay块可供映射,且可用标定RAM资源只有32 KB,为了最大化地利用RAM资源,在划分的时候以1 KB为基本单位。例如,标定FLASH空间大小为512 KB,用于标定的RAM资源为32 KB,则需要将FLASH空间划分为512块,每块大小为1 KB,编号为0~511,即FLS0-FLS511,每块FLASH的起始地址也固定;RAM空间也划分为32块,每块大小也是1 KB,编号为0~31,即RAM0-RAM31,每块RAM的起始地址也因此固定。这样就能够建立起FLASH块和RAM块之间的映射网,即FLS0-FLS511可与RAM0-RAM31实现映射,FLS0可以映射到RAM0,FLSn(n不等于0,且小于512)也可以映射到RAM0,但同一时刻,FLS0和FLSn不能同时映射到同一个RAM块。由于受制于RAM空间大小,最大只能映射32 KB的RAM空间,即FLASH和RAM之间的映射比例为16∶1。FLASH块和RAM块之间的映射关系如图3所示。

图3 Overlay机制中FLASH和RAM之间的映射关系

2.2 Overlay动态映射实现

Master发送DOWNLOAD指令到ECU,该指令包含了被标定量的地址、被标定量长度、被标定量的新数值信息。ECU解析到该指令时,实现流程如下:

1) 根据被标定量的地址信息,判断被标定量所在的FLASH块是否已经与某一RAM块建立映射关系。若已经实现映射,则执行2);若没有实现映射,则执行3)。

2) 该FLASH块已经实现映射,只需要将被标定量的新数据拷贝到映射的RAM空间中即可,此时会出现两种情况:若被标定量的新数据和FLASH中的数据一致,执行(1);若被标定量的新数据和FLASH中的数据不一致,执行(2)。

(1) 当被标定量的新数据和FLASH中的数据一致时,即软件在运行时利用FLASH中的数据和RAM中的数据效果是一致的,为提高RAM的利用率,此RAM块可以解除与FLASH的映射。在此过程中需要将寄存器OTAR设置为0,RABR寄存器的OBASE位设置为0,RABR寄存器的OVEN位设置为0,这样此RAM块就解除与FLASH的映射关系,可以为其他FLASH块的映射提供资源。

(2) 当被标定量的新数据和FLASH中的数据不一致时,则原先的映射关系维持不变,只要将新的标定数据下载到对应的RAM空间中去即可。

3) 被标定量所在的FLASH块没有实现与RAM映射,则首先判断RAM空间是否充足,判断RAM空间是否充足的方法是扫描32个Overlay块RABR寄存器的OVEN位是否为1,若所有的RAM块都已实现映射关系,则表示空间不足,否则表示空间足够。若空间足够,则执行(1),若空间不足,则执行(2)。

(1) 当RAM空间充足时,则该FLASH在与RAM映射的时候,按照RAM编号从小到大的顺序执行,搜寻到编号为n(n小于32)的RAM未被映射,则需将寄存器OTAR设置为该FLASH块的起始地址,OMASK设置为代表1 KB大小的0xFE0,RABR寄存器的OBASE位设置为编号为RAMn的起始地址,RABR寄存器的OVEN位设置为1,表示映射已经使能。以上寄存器设置完毕之后,将该FLASH块中的数据拷贝到映射之后的RAMn空间中,并将新标定数据下载到RAMn空间中的所对应的偏移地址中,这样软件在运行的时候利用的是RAMn中的新数据。

(2) 当RAM空间不足时,则不能使能新的映射关系,此时应该返回拒绝命令给Master,以此通知标定人员该标定请求被拒绝。在出现标定拒绝时,有两种方案可以进行:第一种是将原先不需要的标定量更改回默认数值,根据1)中的(1)可知,此时可以腾出RAM空间为下一次新的标定请求做准备;第二种方案是将所有已经映射的标定量固化到FLASH中,这样所有的RAM空间都会腾出,为下一次新的标定请求做准备。

上述整个软件实现的流程如图4所示。

图4 基于Overlay动态分配的在线标定流程

3 测试验证

为了验证该软件是否能够在RAM空间小于FLASK空间的情况下实现在线标定功能,测试代码中增加66个标定变量CAL_0-CAL_65和66个观测变量MEA_0-MEA_65,MEA_0-MEA_65分别被相应的标定变量赋值,66个标定量在编译时被分配到33个不同的FLASH块中,其中CAL_0和CAL_1被分配到FLASH0,CAL_2和CAL_3被分配到FLASH1,以此类推。通过在线标定CAL_0-CAL_65为不同的数值,观测变量MEA_0-MEA_65是否为相应的数值。测试结果如下:

1) 更改标定变量CAL_0为1,观测变量MEA_0也为1,并且此时只有一个Overlay块实现FLASH0映射到RAM0,其他Overlay块不会被设置,如图5所示。

图5 只有一个Overlay块使能

2) 更改标定变量CAL_1为2,观测变量MEA_1也为2,由于CAL_1和CAL_0被分配在同一个FLASH空间中,因此此时还是只有一个Overlay块使能,其他Overlay块不会被设置。

3) 更改标定量CAL_2-CAL_63的数值,观测变量MEA_2-MEA_63也会随之更改,此时所有的Overlay块实现了RAM和FLASH的映射。

4) 更改标定量CAL_64的数值,由于无RAM资源可用,此时会拒绝标定人员的请求。

5) 更改标定变量CAL_0和CAL_1为默认数值,观测变量MEA_0和MEA_1也回到默认数值,此时FLASH0所映射的RAM0资源已经释放。再次请求更改标定量CAL_64的数值为65,则观测变量MEA_64也变为65,标定请求实现,如图6所示。

图6 Overlay块释放并被重新使能

综上测试结果,满足设计要求,即在FLASH空间大于RAM空间的情况下,能够实现标定量的标定请求,而在标定RAM空间不足的情况下,可提示标定人员释放不需要的标定RAM空间以为后续标定请求做准备。

4 结 语

针对传统的标定实现方式,本文分析了其利弊,提出了基于Overlay动态分配管理的在线标定解决方案,其在标定FLASH需求大于RAM空间的情况下,仍能实现所请求的标定变量的标定功能,而不需要与FLASH空间等大的RAM资源,这在开发阶段对于节省控制器的成本是非常有利的。

同时,在FLASH和RAM空间比例较大的时候,极端情况下如果标定人员的标定请求非常大,可能会频繁出现标定量不可被标定的情况。针对这种情况,可有两种方案解决:一种方案是将使用频率高的标定量集中定义在相同的几个FLASH空间中,这样在映射的时候,就不会占用新的RAM空间,保证每一个映射的RAM区域利用率非常高;另一种方案是增加其他可用的RAM映射区域,如每个核的DSPPR存储区域,在软件集成完毕之后,整个软件运行的RAM使用情况已经明确,可以将暂未利用的RAM区域用来做映射,这也是后期研究的目标。

猜你喜欢

寄存器标定定量
有机物官能团的定量关系在解题中的应用
轻卡前视摄像头的售后标定
一种轻卡前视单目摄像头下线标定方法
使用朗仁H6 Pro标定北汽绅宝转向角传感器
CT系统参数标定及成像—2
CT系统参数标定及成像—2
飞思卡尔单片机脉宽调制模块用法研究
移位寄存器及算术运算应用
数字电路环境下汽车控制电路信号设计
形成初步定量思维。做好初高中化学衔接学习