【转载】XCP

转载:https://blog.csdn.net/AgingMoon/article/details/78207245 作者:蔚蓝忍者

本篇文章主要从以下几个方面进行对XCP模块的讲解

1.XCP用来做什么;

2.XCP的工具简介;

3.XCP的工作流程;

4.XCP地址映射分析(软件与硬件方式);

5.XCP的命令简介;

6.XCP中的A2L文件简介;

1.XCP用来做什么?

在汽车电子软件开发中,经常会遇到需要在整车调试或者台架调试时才能确定的一些变量,这个时候就会用到XCP,例如电机控制器的PID参数,可能根据汽车的负载不一样需要调整,这个时候就可通过XCP来标定。

那么XCP主要的用处以下总结为四点:

a.标定

b.测量(反馈一些变量的值供上位机或测试系统查看,如转速等)

c.编程和刷新(例如更新一部分地址的数据值,甚至重编程等,这部分用的较少一般用UDS)

d.对ECU功能进行旁路,简单来说就是模拟ECU的数据

其中主要用a,b两点,其他两点用的比较少。

2.XCP的工具简介

目前XCP主要使用的工具有Vector公司的CANape  ITAS的INCA,Value CAN等工具。


3.XCP的一般工作流程

首先XCP是主从的工作结构,主节点(Master)即一个上位机,我们定义它为测试系统,当然你也可以理解为我们使用的XCP工具,一个主节点可以连接多个从节点(Slave),以XCPOnCAN为例,可以通过CAN ID的方式来识别不同的从节点,一般从节点需要两个CANID,一个源地址,一个目标地址。那么硬件连接如下所示:

Master(带上位机的笔记本)<-->CAN工具<-->Slave(ECU 可多个)

a.第一步我们要将Master和Slave连接起来,当然是通过发命令的方式建立连接,具体命令后面进行讲解。

b.第二步可以通过上位机工具监控之前定义好的一些变量,例如速度,转矩,电压等参数;

c.第三步可以进行一些在线标定功能,比如在台架上标定PID的一些参数,标定过程一般是先在一个存储区(RAM)定义的变量找出一个比较好的参数,然后将这个比较好的参数固化下来,擦除原来的数据写入到另外一个映射好的存储区(flash),这个是标定的一般过程;

d.当然也可以通过重新擦写一个数据区域,使用其编程的功能。

我认为映射关系可能是XCP中较核心的一个部分,下面我们讲一讲c步骤中的地址映射。

4.XCP地址映射

首先我们讲一讲 参考页 工作页 激活页  逻辑地址 物理地址的一些概念


逻辑地址:为了XCP的逻辑应用定义的一块地址,就像我们给一个变量定义了一个名字一样;

物理地址:它是直接对应存储器上的一块地址比如RAM上的0x0000~0x0200一块地址;Flash 0x1000~0x1200;一块地址;

参考页: 你可以理解为定义的逻辑地址对应Flash上的一块地址,比如逻辑地址0x0000~0x0200对应Flash上一块0x1000~0x1200这个地址;那么参考页的属性在标定过程是可读不可写;

工作页:你可以理解为定义的逻辑地址对应RAM上的一块地址,比如逻辑地址0x0000~0x0200对应RAM上一块0x0000~0x0200这个地址;注意工作页的属性是可读可写(方便标定修改嘛)

大家可以把上面的对应关系 画一画,会更清楚。


激活页:就是指选择激活的一个页,比如激活工作页 或者激活参考页等。


这里再进一步说一下标定过程:首先激活参考页(仅可读),读取当前的参数,比如PID中的比例因子 P,然后呢切换激活页,激活工作页(可读可写),这个时候就可以在线修改参数,来获得较好的PID曲线,从而确定优化后的参数P,最后,我们还是需要将原来参考页上的P参数参数,写入优化后的P参数,这样就完成了一个参数的标定。

下面我们讲讲两种地址映射方式:

a.硬件方式

有些芯片是支持硬件地址映射的,比如我们现在使用的英飞凌TC27X系列,它的工作方式比较简单,就是在你切换激活的工作页时,操作寄存器,硬件完成地址映射。

举个例子 假如Reg1 = 0时,激活页是参考页,逻辑地址0x000~0x200 对应的Flash中的0x100~0x300;

切换激活页为工作页时,Reg1=1,对应逻辑地址0x000~0x200 对应Ram中的0x000~0x200;

是不是超简单,但是相应芯片价格会贵一点。

b.软件方式

其实就是加入一个offset偏移量来实现。

还是以上面的例子为例:

激活页->参考页   逻辑地址 0x000~0x200  -> Offset=0x100  Flash地址0x100~0x300 =(逻辑地址+Offset)

激活页->工作页   逻辑地址 0x000~0x200  -> Offset=0x000Flash地址0x000~0x200 =(逻辑地址+Offset)

同样也不不复杂,但是会部分增加软件的维护工作。

激活页->参考页   逻辑地址 0x000~0x200  -> Offset=0x100  Flash地址0x100~0x300 =(逻辑地址+Offset)

5.XCP的命令简介

我个人觉得简单分类,可能更便于大家快速掌握了解,下面我将进行一定的分类方法来进行介绍;

Master->Slave (上位机到下位机)总共0xFF条

     名称                    PID范围

     CMD                  0xC0~0xFF

     STIM                  0x00~0xBF

Slave ->Master(下位机到上位机)总共0xFF条

     名称                    PID范围

     Response             0xFF

     Error                     0xFE



     Event                    0xFD

     Service                 0xFC

     DAQ                   0x00~0xFB  //ODT的序号

下面大致解释一下上面名称(命令是不要记得,用的时候去查吧):

CMD:指的是上位机下发给下位机的一些命令,比如连接命令FF,解锁,获取状态等一些和下位机交互的命令;

STIM:你可以理解为一种上位机下下位机大量发数据的一种方式,相当于反向的DAQ;

Response:肯定应答,指的下位机答复上位机的命令;

Error:否定应答上位机的命令;

Event:事件,指下位机发生某事件时通知上位机;

Service:指下位机在某些情况下,需要上位机执行一些动作,你可以理解为请求上位机服务。

DAQ:很显然,就是下位机上传数据给上位机。

具体的一些命令大家可以去参考协议进行进一步的了解。

6.XCP的A2L文件

为什么将这部分呢,因为个人觉得,这部分才是应用使用的核心。

A2L文件是啥呢?它其实就是一种方便XCP进行工作的描述性一个文件,你可以理解为一个通讯矩阵,包含了项目信息、ECU信息、标定变量信息、测量变量信息等等如下所示。

/begin PROJECT /*表示一整个项目,一个文件一个项目*/  


    /begin HEADER /*描述项目信息,包括项目编号,项目版本等信息*/   

    /end HEADER  


    /begin MODULE Device/*描述ECU需要的所有信息,一个ECU对应一个MODULE块*/  


         /begin MOD_PAR /*管理ECU的数据,CPU 客户 编号等等,最重要的是内存的分段分页管理,类似DSP中的CMD文件*/  

         /end   MOD_PAR   


         /begin MOD_COMMON/*一般性描述信息,比如大小端,数据的对齐方式*/  

         /end   MOD_COMMON  


         /begin CHARACTERISTIC/*定义标定变量,包含被标定的变量的名字,地址,长度,计算公式,精度,最大最小值等信息*/  

         /end   CHARACTERISTIC /*可定义多个*/  


         /begin AXIS_PTS  

         /end AXIS_PTS  


         /begin MEASUREMENT/*定义测量变量,包含了被测量的变量的名字,地址,长度,计算公式,精度,最大最小值等信息*/  

         /end MEASUREMENT/*可定义多个*/  


         /begin COMPU_METHOD/*定义计算公式,及原始值和物理值之前的转换关系 如phy = ax+b*/  

         /end COMPU_METHOD  


         /begin COMPU_TAB /*定义原始值和物理值的映射关系 一般是枚举变量*/  

         /end COMPU_TAB  


         /begin FUNCTION  

         /end FUNCTION  


         /begin GROUP  

         /end GROUP  


         /begin RECORD_LAYOUT/*定义标定变量的物理存储结构(一维,二维表,三维表等)*/  

         /end RECORD_LAYOUT  


    /end  MODULE Device  

/end PROJECT  

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,084评论 6 503
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,623评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,450评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,322评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,370评论 6 390
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,274评论 1 300
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,126评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,980评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,414评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,599评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,773评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,470评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,080评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,713评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,852评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,865评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,689评论 2 354

推荐阅读更多精彩内容