日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

基于XCP协议分析和理解

發布時間:2024/3/26 编程问答 87 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于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?

  • <code?class="language-html">/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</code>??
  • 總結

    以上是生活随笔為你收集整理的基于XCP协议分析和理解的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。