XCP总结
轉(zhuǎn)載:https://blog.csdn.net/AgingMoon/article/details/78207245
本篇文章主要從以下幾個(gè)方面進(jìn)行對(duì)XCP模塊的講解
1.XCP用來做什么;
2.XCP的工具簡(jiǎn)介;
3.XCP的工作流程;
4.XCP地址映射分析(軟件與硬件方式);
5.XCP的命令簡(jiǎn)介;
6.XCP中的A2L文件簡(jiǎn)介;
1.XCP用來做什么?
在汽車電子軟件開發(fā)中,經(jīng)常會(huì)遇到需要在整車調(diào)試或者臺(tái)架調(diào)試時(shí)才能確定的一些變量,這個(gè)時(shí)候就會(huì)用到XCP,例如電機(jī)控制器的PID參數(shù),可能根據(jù)汽車的負(fù)載不一樣需要調(diào)整,這個(gè)時(shí)候就可通過XCP來標(biāo)定。
那么XCP主要的用處以下總結(jié)為四點(diǎn):
a.標(biāo)定
b.測(cè)量(反饋一些變量的值供上位機(jī)或測(cè)試系統(tǒng)查看,如轉(zhuǎn)速等)
c.編程和刷新(例如更新一部分地址的數(shù)據(jù)值,甚至重編程等,這部分用的較少一般用UDS)
d.對(duì)ECU功能進(jìn)行旁路,簡(jiǎn)單來說就是模擬ECU的數(shù)據(jù)
其中主要用a,b兩點(diǎn),其他兩點(diǎn)用的比較少。
2.XCP的工具簡(jiǎn)介
目前XCP主要使用的工具有Vector公司的CANape ?ITAS的INCA,Value CAN等工具。
?
3.XCP的一般工作流程
首先XCP是主從的工作結(jié)構(gòu),主節(jié)點(diǎn)(Master)即一個(gè)上位機(jī),我們定義它為測(cè)試系統(tǒng),當(dāng)然你也可以理解為我們使用的XCP工具,一個(gè)主節(jié)點(diǎn)可以連接多個(gè)從節(jié)點(diǎn)(Slave),以XCPOnCAN為例,可以通過CAN ID的方式來識(shí)別不同的從節(jié)點(diǎn),一般從節(jié)點(diǎn)需要兩個(gè)CANID,一個(gè)源地址,一個(gè)目標(biāo)地址。那么硬件連接如下所示:
Master(帶上位機(jī)的筆記本)<-->CAN工具<-->Slave(ECU 可多個(gè))
a.第一步我們要將Master和Slave連接起來,當(dāng)然是通過發(fā)命令的方式建立連接,具體命令后面進(jìn)行講解。
b.第二步可以通過上位機(jī)工具監(jiān)控之前定義好的一些變量,例如速度,轉(zhuǎn)矩,電壓等參數(shù);
c.第三步可以進(jìn)行一些在線標(biāo)定功能,比如在臺(tái)架上標(biāo)定PID的一些參數(shù),標(biāo)定過程一般是先在一個(gè)存儲(chǔ)區(qū)(RAM)定義的變量找出一個(gè)比較好的參數(shù),然后將這個(gè)比較好的參數(shù)固化下來,擦除原來的數(shù)據(jù)寫入到另外一個(gè)映射好的存儲(chǔ)區(qū)(flash),這個(gè)是標(biāo)定的一般過程;
d.當(dāng)然也可以通過重新擦寫一個(gè)數(shù)據(jù)區(qū)域,使用其編程的功能。
我認(rèn)為映射關(guān)系可能是XCP中較核心的一個(gè)部分,下面我們講一講c步驟中的地址映射。
4.XCP地址映射
首先我們講一講 參考頁(yè) 工作頁(yè) 激活頁(yè) ?邏輯地址 物理地址的一些概念
?
邏輯地址:為了XCP的邏輯應(yīng)用定義的一塊地址,就像我們給一個(gè)變量定義了一個(gè)名字一樣;
物理地址:它是直接對(duì)應(yīng)存儲(chǔ)器上的一塊地址比如RAM上的0x0000~0x0200一塊地址;Flash 0x1000~0x1200;一塊地址;
參考頁(yè): 你可以理解為定義的邏輯地址對(duì)應(yīng)Flash上的一塊地址,比如邏輯地址0x0000~0x0200對(duì)應(yīng)Flash上一塊0x1000~0x1200這個(gè)地址;那么參考頁(yè)的屬性在標(biāo)定過程是可讀不可寫;
工作頁(yè):你可以理解為定義的邏輯地址對(duì)應(yīng)RAM上的一塊地址,比如邏輯地址0x0000~0x0200對(duì)應(yīng)RAM上一塊0x0000~0x0200這個(gè)地址;注意工作頁(yè)的屬性是可讀可寫(方便標(biāo)定修改嘛)
大家可以把上面的對(duì)應(yīng)關(guān)系 畫一畫,會(huì)更清楚。
?
激活頁(yè):就是指選擇激活的一個(gè)頁(yè),比如激活工作頁(yè) 或者激活參考頁(yè)等。
?
這里再進(jìn)一步說一下標(biāo)定過程:首先激活參考頁(yè)(僅可讀),讀取當(dāng)前的參數(shù),比如PID中的比例因子 P,然后呢切換激活頁(yè),激活工作頁(yè)(可讀可寫),這個(gè)時(shí)候就可以在線修改參數(shù),來獲得較好的PID曲線,從而確定優(yōu)化后的參數(shù)P,最后,我們還是需要將原來參考頁(yè)上的P參數(shù)參數(shù),寫入優(yōu)化后的P參數(shù),這樣就完成了一個(gè)參數(shù)的標(biāo)定。
下面我們講講兩種地址映射方式:
a.硬件方式
有些芯片是支持硬件地址映射的,比如我們現(xiàn)在使用的英飛凌TC27X系列,它的工作方式比較簡(jiǎn)單,就是在你切換激活的工作頁(yè)時(shí),操作寄存器,硬件完成地址映射。
舉個(gè)例子 假如Reg1 = 0時(shí),激活頁(yè)是參考頁(yè),邏輯地址0x000~0x200 對(duì)應(yīng)的Flash中的0x100~0x300;
切換激活頁(yè)為工作頁(yè)時(shí),Reg1=1,對(duì)應(yīng)邏輯地址0x000~0x200 對(duì)應(yīng)Ram中的0x000~0x200;
是不是超簡(jiǎn)單,但是相應(yīng)芯片價(jià)格會(huì)貴一點(diǎn)。
b.軟件方式
其實(shí)就是加入一個(gè)offset偏移量來實(shí)現(xiàn)。
還是以上面的例子為例:
激活頁(yè)->參考頁(yè) ? 邏輯地址 0x000~0x200 ?-> Offset=0x100 ?Flash地址0x100~0x300 =(邏輯地址+Offset)
激活頁(yè)->工作頁(yè) ? 邏輯地址 0x000~0x200 ?->?Offset=0x000??Flash地址0x000~0x200 =(邏輯地址+Offset)
同樣也不不復(fù)雜,但是會(huì)部分增加軟件的維護(hù)工作。
激活頁(yè)->參考頁(yè) ? 邏輯地址 0x000~0x200 ?->?Offset=0x100 ?Flash地址0x100~0x300 =(邏輯地址+Offset)
5.XCP的命令簡(jiǎn)介
我個(gè)人覺得簡(jiǎn)單分類,可能更便于大家快速掌握了解,下面我將進(jìn)行一定的分類方法來進(jìn)行介紹;
Master->Slave (上位機(jī)到下位機(jī))總共0xFF條
? ? ?名稱 ? ? ? ? ? ? ? ? ? ?PID范圍
? ? ?CMD ? ? ? ? ? ? ? ? ?0xC0~0xFF
? ? ?STIM ? ? ? ? ? ? ? ? ?0x00~0xBF
Slave?->Master(下位機(jī)到上位機(jī))總共0xFF條
? ? ?名稱 ? ? ? ? ? ? ? ? ? ?PID范圍
? ? ?Response ? ? ? ? ? ? 0xFF
? ? ?Error ? ? ? ? ? ? ? ? ? ? 0xFE
?
? ? ?Event ? ? ? ? ? ? ? ? ? ?0xFD
? ? ?Service ? ? ? ? ? ? ? ? 0xFC
? ? ?DAQ ? ? ? ? ? ? ? ? ? 0x00~0xFB ?//ODT的序號(hào)
下面大致解釋一下上面名稱(命令是不要記得,用的時(shí)候去查吧):
CMD:指的是上位機(jī)下發(fā)給下位機(jī)的一些命令,比如連接命令FF,解鎖,獲取狀態(tài)等一些和下位機(jī)交互的命令;
STIM:你可以理解為一種上位機(jī)下下位機(jī)大量發(fā)數(shù)據(jù)的一種方式,相當(dāng)于反向的DAQ;
Response:肯定應(yīng)答,指的下位機(jī)答復(fù)上位機(jī)的命令;
Error:否定應(yīng)答上位機(jī)的命令;
Event:事件,指下位機(jī)發(fā)生某事件時(shí)通知上位機(jī);
Service:指下位機(jī)在某些情況下,需要上位機(jī)執(zhí)行一些動(dòng)作,你可以理解為請(qǐng)求上位機(jī)服務(wù)。
DAQ:很顯然,就是下位機(jī)上傳數(shù)據(jù)給上位機(jī)。
具體的一些命令大家可以去參考協(xié)議進(jìn)行進(jìn)一步的了解。
6.XCP的A2L文件
為什么將這部分呢,因?yàn)閭€(gè)人覺得,這部分才是應(yīng)用使用的核心。
A2L文件是啥呢?它其實(shí)就是一種方便XCP進(jìn)行工作的描述性一個(gè)文件,你可以理解為一個(gè)通訊矩陣,包含了項(xiàng)目信息、ECU信息、標(biāo)定變量信息、測(cè)量變量信息等等如下所示。
?
[html]?view plain?copy
總結(jié)
- 上一篇: DHT11温湿度传感器初识
- 下一篇: 什么叫c语言函数递归,什么是递归-C语言