轉(zhuǎn)載:https://blog.csdn.net/AgingMoon/article/details/78207245 作者:蔚藍忍者
本篇文章主要從以下幾個方面進行對XCP模塊的講解
1.XCP用來做什么漏麦;
2.XCP的工具簡介拴竹;
3.XCP的工作流程俩功;
4.XCP地址映射分析(軟件與硬件方式)枝缔;
5.XCP的命令簡介;
6.XCP中的A2L文件簡介溉苛;
1.XCP用來做什么拍皮?
在汽車電子軟件開發(fā)中奠宜,經(jīng)常會遇到需要在整車調(diào)試或者臺架調(diào)試時才能確定的一些變量,這個時候就會用到XCP嚷那,例如電機控制器的PID參數(shù)胞枕,可能根據(jù)汽車的負載不一樣需要調(diào)整,這個時候就可通過XCP來標定魏宽。
那么XCP主要的用處以下總結(jié)為四點:
a.標定
b.測量(反饋一些變量的值供上位機或測試系統(tǒng)查看腐泻,如轉(zhuǎn)速等)
c.編程和刷新(例如更新一部分地址的數(shù)據(jù)值,甚至重編程等队询,這部分用的較少一般用UDS)
d.對ECU功能進行旁路派桩,簡單來說就是模擬ECU的數(shù)據(jù)
其中主要用a,b兩點,其他兩點用的比較少蚌斩。
2.XCP的工具簡介
目前XCP主要使用的工具有Vector公司的CANape ?ITAS的INCA铆惑,Value CAN等工具。
3.XCP的一般工作流程
首先XCP是主從的工作結(jié)構(gòu),主節(jié)點(Master)即一個上位機员魏,我們定義它為測試系統(tǒng)丑蛤,當然你也可以理解為我們使用的XCP工具,一個主節(jié)點可以連接多個從節(jié)點(Slave)撕阎,以XCPOnCAN為例受裹,可以通過CAN ID的方式來識別不同的從節(jié)點,一般從節(jié)點需要兩個CANID虏束,一個源地址棉饶,一個目標地址。那么硬件連接如下所示:
Master(帶上位機的筆記本)<-->CAN工具<-->Slave(ECU 可多個)
a.第一步我們要將Master和Slave連接起來魄眉,當然是通過發(fā)命令的方式建立連接砰盐,具體命令后面進行講解。
b.第二步可以通過上位機工具監(jiān)控之前定義好的一些變量坑律,例如速度岩梳,轉(zhuǎn)矩,電壓等參數(shù)晃择;
c.第三步可以進行一些在線標定功能冀值,比如在臺架上標定PID的一些參數(shù),標定過程一般是先在一個存儲區(qū)(RAM)定義的變量找出一個比較好的參數(shù)宫屠,然后將這個比較好的參數(shù)固化下來列疗,擦除原來的數(shù)據(jù)寫入到另外一個映射好的存儲區(qū)(flash),這個是標定的一般過程浪蹂;
d.當然也可以通過重新擦寫一個數(shù)據(jù)區(qū)域抵栈,使用其編程的功能。
我認為映射關系可能是XCP中較核心的一個部分坤次,下面我們講一講c步驟中的地址映射古劲。
4.XCP地址映射
首先我們講一講 參考頁 工作頁 激活頁 ?邏輯地址 物理地址的一些概念
邏輯地址:為了XCP的邏輯應用定義的一塊地址,就像我們給一個變量定義了一個名字一樣缰猴;
物理地址:它是直接對應存儲器上的一塊地址比如RAM上的0x0000~0x0200一塊地址产艾;Flash 0x1000~0x1200;一塊地址;
參考頁: 你可以理解為定義的邏輯地址對應Flash上的一塊地址滑绒,比如邏輯地址0x0000~0x0200對應Flash上一塊0x1000~0x1200這個地址闷堡;那么參考頁的屬性在標定過程是可讀不可寫;
工作頁:你可以理解為定義的邏輯地址對應RAM上的一塊地址疑故,比如邏輯地址0x0000~0x0200對應RAM上一塊0x0000~0x0200這個地址杠览;注意工作頁的屬性是可讀可寫(方便標定修改嘛)
大家可以把上面的對應關系 畫一畫,會更清楚纵势。
激活頁:就是指選擇激活的一個頁倦零,比如激活工作頁 或者激活參考頁等误续。
這里再進一步說一下標定過程:首先激活參考頁(僅可讀),讀取當前的參數(shù)扫茅,比如PID中的比例因子 P蹋嵌,然后呢切換激活頁,激活工作頁(可讀可寫)葫隙,這個時候就可以在線修改參數(shù)栽烂,來獲得較好的PID曲線,從而確定優(yōu)化后的參數(shù)P恋脚,最后腺办,我們還是需要將原來參考頁上的P參數(shù)參數(shù),寫入優(yōu)化后的P參數(shù)糟描,這樣就完成了一個參數(shù)的標定怀喉。
下面我們講講兩種地址映射方式:
a.硬件方式
有些芯片是支持硬件地址映射的,比如我們現(xiàn)在使用的英飛凌TC27X系列船响,它的工作方式比較簡單躬拢,就是在你切換激活的工作頁時,操作寄存器见间,硬件完成地址映射聊闯。
舉個例子 假如Reg1 = 0時,激活頁是參考頁米诉,邏輯地址0x000~0x200 對應的Flash中的0x100~0x300;
切換激活頁為工作頁時菱蔬,Reg1=1,對應邏輯地址0x000~0x200 對應Ram中的0x000~0x200;
是不是超簡單史侣,但是相應芯片價格會貴一點拴泌。
b.軟件方式
其實就是加入一個offset偏移量來實現(xiàn)。
還是以上面的例子為例:
激活頁->參考頁 ? 邏輯地址 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:指的是上位機下發(fā)給下位機的一些命令掉房,比如連接命令FF,解鎖慰丛,獲取狀態(tài)等一些和下位機交互的命令卓囚;
STIM:你可以理解為一種上位機下下位機大量發(fā)數(shù)據(jù)的一種方式,相當于反向的DAQ诅病;
Response:肯定應答哪亿,指的下位機答復上位機的命令粥烁;
Error:否定應答上位機的命令;
Event:事件蝇棉,指下位機發(fā)生某事件時通知上位機讨阻;
Service:指下位機在某些情況下,需要上位機執(zhí)行一些動作篡殷,你可以理解為請求上位機服務钝吮。
DAQ:很顯然,就是下位機上傳數(shù)據(jù)給上位機板辽。
具體的一些命令大家可以去參考協(xié)議進行進一步的了解奇瘦。
6.XCP的A2L文件
為什么將這部分呢,因為個人覺得劲弦,這部分才是應用使用的核心耳标。
A2L文件是啥呢?它其實就是一種方便XCP進行工作的描述性一個文件邑跪,你可以理解為一個通訊矩陣,包含了項目信息呀袱、ECU信息贸毕、標定變量信息、測量變量信息等等如下所示夜赵。
/begin?PROJECT?/*表示一整個項目明棍,一個文件一個項目*/??
????/begin?HEADER?/*描述項目信息,包括項目編號寇僧,項目版本等信息*/???
????/end?HEADER??
????/begin?MODULE?Device/*描述ECU需要的所有信息摊腋,一個ECU對應一個MODULE塊*/??
?????????/begin?MOD_PAR?/*管理ECU的數(shù)據(jù),CPU?客戶?編號等等嘁傀,最重要的是內(nèi)存的分段分頁管理兴蒸,類似DSP中的CMD文件*/??
?????????/end???MOD_PAR???
?????????/begin?MOD_COMMON/*一般性描述信息,比如大小端细办,數(shù)據(jù)的對齊方式*/??
?????????/end???MOD_COMMON??
?????????/begin?CHARACTERISTIC/*定義標定變量橙凳,包含被標定的變量的名字,地址笑撞,長度岛啸,計算公式,精度茴肥,最大最小值等信息*/??
?????????/end???CHARACTERISTIC?/*可定義多個*/??
?????????/begin?AXIS_PTS??
?????????/end?AXIS_PTS??
?????????/begin?MEASUREMENT/*定義測量變量坚踩,包含了被測量的變量的名字,地址瓤狐,長度瞬铸,計算公式批幌,精度,最大最小值等信息*/??
?????????/end?MEASUREMENT/*可定義多個*/??
?????????/begin?COMPU_METHOD/*定義計算公式嗓节,及原始值和物理值之前的轉(zhuǎn)換關系?如phy?=?ax+b*/??
?????????/end?COMPU_METHOD??
?????????/begin?COMPU_TAB?/*定義原始值和物理值的映射關系?一般是枚舉變量*/??
?????????/end?COMPU_TAB??
?????????/begin?FUNCTION??
?????????/end?FUNCTION??
?????????/begin?GROUP??
?????????/end?GROUP??
?????????/begin?RECORD_LAYOUT/*定義標定變量的物理存儲結(jié)構(gòu)(一維荧缘,二維表,三維表等)*/??
?????????/end?RECORD_LAYOUT??
????/end??MODULE?Device??
/end?PROJECT??