INCA ProF文件解析

在这里插入图片描述
图片来源:"菜鸟工程师"的博客 ,在此感谢原作者!



1. 概述


ProF是用于嵌入式控制单元的Flash编程工具。用于配置不同ECU项目的刷新例程的描述性的一组文件。这是本人的理解。
它包括:
在这里插入图片描述 图片来源:"菜鸟工程师"的博客 ,在此感谢原作者!

一般的发动机控制器,使用的标定软件都是ETAS的INCA,硬件一般是582,控制软件也都是博世或者德尔福这样的老牌大厂设计的,释放或交付软件时,通常包括应用程序、A2L和ProF这三样,在需要升级程序时,打开INCA,加载ProF文件和要烧录的应用程序或标定数据,抓取刷写数据流分析发现,一般都是标准的基于CAN的UDS协议。

那如果,想要通过T-BOX升级ECU呢?如何获知刷写流程呢?关键的参数如:擦写地址、校验信息等,如何获取呢?

宏观一点,如果把T-BOX当做是INCA呢,照旧加载ProF文件和烧录文件即可,如此也不会给客户带来任何的陌生感,平滑过渡。说了这么多,终于要扣题了,那就是需要解析ProF文件,获取刷写关键信息,才满足成客户需求。


2. 文件解析


2.1 需要解析哪些信息


需要先梳理一下刷写流程,会涉及哪些服务。

关于博世的BootLoader设计可以参考之前写过的博客:博世(BOSCH) ECU BootLoader设计思路

通过分析一份实际项目的ProF文件,来看看:


.cnf文件中的MCU Flash块划分
在这里插入图片描述
可以看到,基本分为boot区、程序区和数据区。boot存放的是BootLoader,程序区存放的是应用程序,数据区存放的是标定数据。


.cnf文件中的CAN通讯的ID定义
在这里插入图片描述
标准协议中定义是这两个ID,当然根据项目的需要也可以改成其他ID。


.cnf文件中的安全秘钥类型和RID参数
在这里插入图片描述
安全等级,严格一点要做成几个等级,不同的等级,SECURITY_ACCESS_MODE对应的index和data就不同,按需设置;$31服务的子服务用来执行Flash擦除和写入Flash的数据校验“动作”,是必要参数。但是,在我们分析的这个实例项目中,校验并未使用RID,而是自定义的方式,后面会分析。注意,实际做项目,不必拘泥于规则。


.prm文件中的被划分好的.bin文件的路径参数
在这里插入图片描述
在烧录过程中,每个block的.bin文件,就会按照这个划分去读取。


2.2 刷写流程


我们以刷写程序流程为例,进行分析:

当初始化完成后,先切换会话模式,由默认模式切换至编程模式,切换完成后,调用seed分支“函数”,执行安全认证过程。
在这里插入图片描述


跳转到seed中:
细节我们先不去纠结,先看个大概的流程,假设安全校验通过,则返回TRUE
在这里插入图片描述


当获取VAR_ACTION的值为1时,调用code子函数,关于VAR_ACTION的值,在使用INCA时,是通过下拉菜单选定的,实际在解析时,可以定义一个常量,在解析之前进行赋值,以确定升级的是程序还是数据。
在这里插入图片描述


开始编程前,先写入“指纹信息”,指纹信息包括:刷写时间和刷写设备的信息。
在这里插入图片描述


写完指纹信息后,擦除CB段:
在这里插入图片描述


擦除成功后,刷写CB段:
在这里插入图片描述


刷写完成后,校验CB段:
在这里插入图片描述


CB段擦除、刷写、校验完成后,依次操作ASW段(包括ASW0 ~ ASW5)和DS段(包括DS0 ~ DS3),然后Reset就结束了刷写流程。
在这里插入图片描述


总结一个流程图:

Created with Raphaël 2.2.0 开始刷写 切换至编程模式 安全认证 写入指纹信息 擦除 编程 校验 复位 结束刷写

分析到这里,大概的轮廓已经清晰了,下一步,可以尝试进行转译了,把ProF文件的关键信息提取出来,以生成T-BOX可以读取的配置文件。



参考资料
【1】ProF Documentation(Robert Lefor 2013-11-12).pdf
【2】CSDN一位博主的文章:INCA_ProF脚本教程

猜你喜欢

转载自blog.csdn.net/Allen_Spring/article/details/107283479