1914_XCP的几种标定实现概念整理

概述

这份笔记主要内容来自于XCP_Book_V1.5_EN.pdf主要内容也是一个翻译为主状态实际工作中,方法1我见过但是客户控制器见过方法2偷师学艺学会第一种方法也是工作中实现第一种方法方法3Vector开源XCP Basic参考这个是我工作中实现第二种方法方法4在我做过XCP工作时候听说过一种方法这个在我自己理解基础上自己做了实现方法5方法6一定能相似性上面书中其实是合在了一起自己通过自己思考实现方法6那时候对此标定概念尚不理解完全自己考虑实现那段时间算是我工作状态低潮期借着合格工作的由头混了一个多星期时间实际工作晚上睡觉床上大概想清楚方法实现时候做了一个自动化处理工具可以原来代码转换到支持这种标定形式整个开发过程大概花了4小时测试时候版本测试还是一把测试通过觉得这个并不是很难设计但是还是受到了一些同事赞许因此也算是自己得意之作

本次整理的文件中的标定指的是修改ECU中的控制参数。标定的方法不是唯一的,而是有很多种。实际的软件设计中选择的方案,通常取决于所使用的微控制器本身的功能以及拥有的资源。正常情况下,参数存储在ECU单片机的闪存中。相关程序变量在软件设计的时候被定义为软件中的常量,const修饰的。为了在ECU的开发过程中使参数在运行时可变,需要额外的RAM内存。

XCP标定实现方案

方法1:标定参数存储在flash中

这种方式,需要进行标定的参数存储在Flash中,以全局量的形式呈现,不进行额外的RAM分配。这种标定方式一般称之为“离线标定”,不需要连接控制器直接在电脑上导入A2L和HEX之后进行修改。之后,生成HEX文件进行烧写以让标定生效。

这种实现方式,一般涉及到的技术点在于如何使用编译器进行合理的分区以及数据的分段,与MCU本身的功能关系不大。

该方法有变型的实施方式,直接将对应的参数固化在ECU中。这种方式通常是通过把标定的参数存储在外置的EEPROM或者内置的FEE之中。缺点是标定执行实时性会差一些,同时,EEPROM增加控制器设计的成本且通常存储空间不大。

方法2:标定参数存储在RAM中

这是一种较为常用的设计方法,可以实现在线标定。

软件设计的时候,把相应的参数存储在RAM中,其初始值存储在FLASH中。在控制器启动阶段,软件会从FLASH中加载初始值。这种操作没有额外的软件设计,编译器会把这部分处理完。

由于参数存储在RAM中,因此可以通过XCP直接进行在线的标定修改。

使用工作流:如果进行了在线标定,虽然ECU中在标定的过程中记录了标定的参数,但是当ECU断电之后数据就消失了。然而,标定的工具可以记录保存之前标定的数据。如果进行长时间的标定,ECU有停机重启的过程,可以通过标定工具把diff数据下载到ECU中然后继续上一次的标定。同时,标定软件可以导出这部分数据支持控制器的批量数据更新。在批量数据更新的时候,可以通过工具进行标定数据的地址偏移,将地址偏移到FLASH区间或者通过刷写的上位机进行地址的偏移转换。

使用常见问题:虽然这种设计在使用上是合理的,但是在软件设计的过程中,部分没有使能的逻辑可能会被编译器或者代码分析工具认定为死代码。尤其是编译器,可能直接把部分不执行的软件分支逻辑优化掉。需要在设计的时候,通过合理的方式避免过度优化。

方法3:通过overlay或者MMU进行FLASH到RAM的映射

这种标定方式需要MCU具有MMU或者overlay等存储映射的硬件模块,实现虚拟地址到物理地址的映射转换。

根据标定空间的大小,分配对等大小的RAM作为标定RAM。当使能标定的时候,软件会判断标定参数所在的FLASH分区,然后将这一段分区映射到RAM区以支持相应数据的修改。这种设计,只需要做简单的标定行为的判断进行相应存储页面切换的使能或者关闭。整个用户软件可以安全把标定数据当做FLASH的数据来处理,A2L文件中的地址映射也可以完全按照编译出来的结果进行处理。工作过程不仅简单,而且由于硬件支持页面映射,整个切换速度非常快。

设计需要考虑点:

● 1. MCU需要支持overlay或者MMU,能够支持存储映射;

● 2. 有足够的RAM用作标定RAM。

方法4:动态overlay(推荐方案)

这种标定方式是方法3的改进,可以节省标定的RAM。

再加上MCU支持分页的映射,因此整个标定数据可以拆分成若干标定的子页面,根据标定的需求使能FLASH到RAM的映射,能够在很多使用场景下降低标定RAM的使用。

设计上的需要考虑的点:

● 1. MCU需要有overlay或者MMU,支持存储映射;

● 2. 映射的页面大小以及RAM存储页划分需要结合实际的应用合理安排以提高RAM的利用率;

● 3. 如果一次性标定的数据在整个存储空间上呈现很大的离散性,可能会出现标定RAM不够而失败的情况。

方法5:AUTOSAR定义的指针标定实现方法之Single pointer标定

指针表在RAM中。当控制器启动初始化时,所有指针都指向闪存中的参数值。校准RAM的位置和大小是已知的,但在启动后没有参数值。此时,应用程序最初完全通过flash工作。

如果用户在引导后第一次从A2L文件中选择一个参数,并希望对其进行写访问,这首先会触发控制器内的复制操作。XCP从机确定要访问的地址位于闪存区,并将参数的值复制到标定RAM。为了确保应用程序不再继续从闪存区获取参数值,而是从RAM区获取参数值,在指针表中进行了相应的有效数据引用的修改。

应用程序仍然通过指针表获取参数的值。但是,由于指针现在指向RAM地址,因此从那里获取值。因此,用户可以通过XCP改变参数的值,并通过测量观察改变的效果。这个过程的缺点是指针表中的一个条目必须对每个参数可用,而这反过来又与指针表的相当大的额外RAM内存需求相关联。

问题点:

● 1. 增加了软件设计的难度;

● 2. RAM占用量大,而且指针表的增加额外增加了RAM的消耗;

● 3. 软件设计的时候可以考虑根据数据使用的关联性,对标定参数进行分组,这样可以减少指针表的RAM消耗。

● 4. 由于标定时候管理的对象是数据而不是数据页面,因此在标定页和参考页之间切换的时候,处理繁琐且低效。

方法6:AUTOSAR定义的指针标定实现方法之Double pointer标定

概念与方法5类似,不同点在于方法5的指针表在RAM中,指向的是FLASH或者RAM的数据。而方法6的第一级指针表存纯在RAM中,指向的时第二级的FLASH指针表或者第二级的RAM指针表。其中,FLASH的指针表可以固定在FLASH中,RAM的指针表可以用于标定的切换或者依然索引FLASH原始数据。如果进行标定页或者参考页的切换,只需要在第一级指针表指针表中选择不同的二极指针表即可。页面切换的效率大大提升。

方法7:AUTOSAR定义的指针标定方法实现之基于FLASH指针表(不推荐)

采埃孚的专利,后来撤销了专利。不同于5和6,指针表存在FLASH中因此可以大大节省RAM(不需要RAM)。如果进行标定就得进行FLASH编程,总体来说可用性较差。

不推荐!

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值