基于XCP协议分析和理解
本篇文章主要從以下幾個方面進行對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=0x000 ?Flash地址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信息、標定變量信息、測量變量信息等等如下所示。
?
[html] view plain copy print?
總結
以上是生活随笔為你收集整理的基于XCP协议分析和理解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android智能家居ppt,智能家居介
- 下一篇: 60.IP地址分配(静态分配+动态分配+