XCP
測量/校準協議XCP入門
第二章、XCP協議的通信的構造和功能
接下來,將會說明“通用校準協議(XCP:Universal Calibration Protocol)”協議具體是如何通信的,以及XCP的功能和協議內容。
主從方式
在XCP中,測量/校準的工具側是“XCP主結點”,被測量的ECU側是“XCP從結點”,采用所謂的“主從通信方式”。這種通信方式中,必定是從主結點發送命令來開始,從結點在接收到后,再向主結點發送應答,以這樣的順序進行通信。如圖7所示,1個網絡上主結點必定只有一個,而從結點可以有多個。
圖7:使用XCP的網絡示例
?
在這個情況下,主結點向每個從結點發送命令,并接收從結點返回的應答(圖8)。
圖8:一主多從的通信示例
?
?
通過這種通訊方式,車載網絡上連接一個測量/校準工具(= XCP主結點)后,可以通過XCP協議訪問作為測量對象的各個ECU(= XCP從結點)。
?
?
網絡和傳輸方式
在網絡上,只要能區分“從主結點發送到從結點”和“從從結點發送到主結點”,這兩種類型的通信,就能夠使用XCP。在“XCP on CAN”的情況下,是通過用兩個CAN ID,“從主結點發送到從結點的ID”和“從結點發送到主結點的ID”進行區分。在網絡上使用區分的通信并傳輸一些內容時,XCP使用了三種傳輸模式(圖9)。
圖9:XCP的傳輸模式
對于傳輸模式而言,可以在主結點側和從結點側,分別決定使用哪種模式。例如,主結點為“塊傳輸模式”,從結點為“標準模式”,這樣的使用方式也是可行的。因此,盡管主結點的工具側的性能強大,但是當從結點的ECU只能使用有限的資源時,也可以實現簡化的傳輸模式。
CTO/DTO
在XCP中,除了主結點和從結點之間的傳輸方向的差異之外,要傳輸的內容還被分為“與XCP本身的控制相關的通信”和“與數據相關的通信”兩種類型,以及定義在每個網絡上傳輸的報文的格式。作為對比,前者被稱為“命令傳送對象(CTO:Command Transfer Object)”,后者被稱為“數據傳送對象(DTO:Data Transfer Object)”。
CTO:Command Transfer Object的縮寫
CTO是與XCP自身的控制命令和應答等相關的對象。控制命令從主結點發送,對命令的應答是從從結點發送。
?
DTO:Data Transfer Object的縮寫
DTO是與同步從結點(ECU)獲取數據測量結果以及進行數據變更相關聯的對象。同步數據變更被稱為“激勵(Stimulation)”,但由于是測量/校準以外的功能,因此省略詳細說明(詳情請參照XCP標準文件)。
?
圖10展示,從XCP標準文件的“Part2 1.1.1 The XCP Packet Types”章節中,抽取的XCP主結點與從結點之間的CTO和DTO的關系。
圖10:XCP主結點/從結點間的對象
報文格式和PID
如上所述,CTO和DTO是不同報文格式(圖11),可以分別設置主從設備的最大報文長度。
MAX_CTO:CTO的最大報文長度(字節)
MAX_DTO:DTO的最大報文長度(字節)
?
圖11:CTO和DTO的報文結構
?
所有的XCP報文都在這個最大報文長度內,命令和響應等內容都在一個報文中完成的。而且在報文格式中,每個字段按兩種類型分配給CTO和DTO報文。此外,報文的第一個字節是被稱為“PID”的標識符,是被用來區分是怎樣的報文。
?
主結點對從結點進行XCP控制時使用“命令(CMD)”,此時的PID在“0xC0”到“0xFF”的范圍內。從結點對這個命令返回肯定應答的情況下,使用“應答(RES)”,此時PID變為“0xFF”(圖12)。
圖12:報文的標識符(PID)
除了測量/校準的同步數據交換之外,所有其它的都是通過主結點發送命令,從結點將返回肯定應答來完成的。在此,以XCP on CAN為例來說明,其中主結點發送到從結點的CAN ID是“1”,從結點發送到主結點的CAN ID是“2”。在這種情況下,XCP通信按以下順序執行。
?
?
圖13顯示了實際通信的跟蹤結果。第1行的“0xFF”是命令“CONNECT”,從而在主結點和從結點之間建立邏輯連接,并接收后續命令。
圖13:CONNECT命令和應答
訪問測量/校準對象
XCP的測量/校準,是通過對ECU內部的軟件的訪問來實現的。具體而言,針對要測量/校準的對象的內存區間,通過指定對應的“XCP地址”的方式進行訪問。
XCP地址與普通的微控制器中的地址幾乎相同,但XCP使用了32位的XCP地址和8位的擴展地址。也就是說,主結點對從結點的訪問,可以有32 + 8 = 40位的地址空間。這個地址與XCP的實際ECU內存不需要完全匹配,其字節序(Endian)也可以針對每個從結點來選擇。因此,在車載網絡上可以連接到多個ECU,即使存在不同的地址空間(16位,32位),或者不同的地址字節序,主結點都可以經過適當處理,使得所有的都可以測量/校準。
?
異步測量
XCP除了同步測量,還可以做異步測量。異步測量是使用主結點發送的命令,通過指定的XCP地址來提取從結點的ECU內部的數據,并通過從結點的應答將該數據傳送給主結點,如此循環往復來實現的。為了取出數據,使用PID為“0xF4”的命令“SHORT_UPLOAD”。這個命令和應答的格式如下所述。
SHORT_UPLOAD命令:
CTO 0字節位置,指定為PID“0xF4”
CTO 1字節位置,指定為取出字節數。最大為MAX_CTO – 1字節
CTO 2字節位置,保留字段
CTO 3字節位置,指定為要讀出的8位擴展地址
CTO 4~7字節位置,指定為要讀出的32位地址
SHORT_UPLOAD應答:
CTO 0字節位置,指定為PID“0xFF”
CTO 1~MAX_CTO字節位置,指定為取出的數據
圖14是主結點使用“SHORT_UPLOAD”,在XCP擴展地址為“0”、XCP地址為“0x00124A5C”的位置,每100ms取出4字節的過程的跟蹤結果。
圖14:通過SHORT_UPLOAD命令的測量
同步測量
在上述異步測量的情況下,主結點決定了測量時間。為了使測量與ECU的控制相匹配,有必要由ECU確定測量時機,并在數據取出來后由從結點發送到主結點。這種數據通信是通過DTO來完成的。
主結點在進行同步測量之前,通過命令指定要取出的數據的XCP地址,從結點在等到同步測量開始命令后,使用DTO發送到主結點。因此,在同步測量的情況下,不是通過命令和應答的組合,而是通過測量周期或事件,由從結點發送DTO報文到主結點。
圖15展示了,由“START_STOP_SYNCH”命令開始的測量同步,從結點持續地將測量數據通過DTO報文發出,直到收到“START_STOP_SYNCH”命令才停止的實際的跟蹤結果。
圖15:同步測量的開始和停止
以下是對同期測量中,對ECU的控制應用程序的測量時機,主結點和從結點的任務分割的說明。
ECU的控制應用程序:
當到達測量的控制周期,或者事件發生時,進行處理并通知到XCP從結點。
主結點:
確定要同步測量的內存及其測量周期,指定同步測量的XCP地址,并使用命令啟動和停止同步測量。
從結點:
它管理從主結點指定的同步測量的XCP地址。然后,從檢測的開始同步測量后,直到停止之前,會根據上述ECU的控制應用程序傳達的被管理的XCP地址,從取出內存值并發送DTO報文。
XCP與同步測量相關的術語和概念
關于同步測量,在XCP標準文檔中使用了各種術語。這里我們解釋一下主要的術語和概念。
元素(Element):
通過XCP地址來指定的一個測量對象的內存。
對象描述表(ODT:Object Description Table):?
歸并元素的測量內存,在一個DTO報文中聚集最多的可發送的內存的表。
ODT條目(Entry):
為創建ODT的元素的測量對象的XCP地址。
DAQ列表(List):
這是一個ODT的集合。這決定了在一個同步測量的周期或者事件觸發時要測量的內存數量。ODT與一個DTO報文相關聯,由MAX_DTO - PID決定了最大的大小,但由于實際測量的內存可能會大于此值,因此分為了ODT和DAQ列表。
事件通道(Event Channel):
在同步測量的控制周期和事件觸發的通道,也即是“種類”的意思。同步測量的時序都是基于這個事件通道的。
?
同步測量的處理
下面將說明,在同步測量中,ECU的控制應用程序向從結點發送測量的時機,將執行怎樣的處理。
(1)控制應用程序要通知從結點測量時機。這個通知通常是將事件通道作為參數,來調用從結點的驅動過程來實現的。
(2)針對主結點以ODT條目來指定的測量對象的內存地址,從結點使用緩沖區來管理,在每次被控制應用程序調用時,都會根據該緩沖區來讀取指定地址的內存。
(3)讀取的內存以ODT為單位合并,并以DAQ列表來生成DTO報文。
?
圖16展示了,元素和ODT條目、DAQ列表和ECU控制應用程序之間的關系。當ECU的控制應用程序集成了Vector的從結點驅動程序后,調用C語言函數“XcpEvent(事件通道)”,就會根據ODT條目的緩沖區,從ECU內存中讀出元素的值來創建出DTO報文。
?
?
圖16:XCP和控制應用程序的關系
?
測量對象和DTO報文
圖17展示了,作為測量對象的元素從在ECU內存,到在網絡上傳輸的DTO報文之間的關系。
?
圖17:元素和DTO報文的關系
在圖17中,是根據ODT條目測量的七個元素的結果,取出的“0x19”“0x6C”“0xF0”“0xBF”“0xC0”“0xA9”“0x02”,作為一個ODT的DTO報文就創建好了。在這個DTO報文中,PID包含在第一個字節,測量時元素的內容被包括從第二個開始的字節中。像這樣的,PID的值是從“0”到“0xFB”的DTO報文被稱為“DAQ”。
就像這樣,從作為測量對象的ECU內存、管理測量對象的ODT的DAQ列表、決定測量時機的控制應用應用程序和用于區分測量時機的事件通道開始,到最后使用DTO報文將測量數據發送到主結點,就實現了同步測量。
同步測量的選項
除了上面描述的那些之外,根據測量的規模和用途,還有XCP同步測量的各種使用形式。下面將介紹這些使用形式中比較典型的例子。
動態DAQ:
通過增加管理測量目標的DAQ列表中的ODT及其條目的數量,可以增加測量的測量點的數量。而且通過維持與要測量的事件通道數量一樣多的DAQ列表,可以對ECU的所有測量時機進行測量。但是這些數量的增加會增大ECU中的管理緩沖區,因此會消耗ECU的內存。
?
而且如果ECU具有10ms和25ms的控制周期,有的10ms的控制周期中測量的測量點的數量很大,別的25ms的控制周期中測量的測量點的數量也很大,根據測量的場景不同,測量點的數量會有不同。對于這樣的應用程序,有一種稱為“動態DAQ”的功能,可以允許從結點動態更改每次測量的DAQ列表、ODT和ODT條目的數量。相反的,如果在集成XCP驅動程序時,這些數量是預先確定的,則稱為“靜態DAQ”。一個從結點將具有靜態或動態DAQ功能。
帶時間戳的DAQ:
在主從結點間的通信中,如果因為加入網關而造成時間差,又或者因為使用無線通信,使得通信時間出現波動的情況下,同步測量中的測量時間對于主結點來說是“不確定”的。為了防止這種情況,要使用“帶時間戳的DAQ”。在從結點側,包含測量時間的時間戳的DAQ,通過DTO報文傳送給主結點。而收到這個報文的主結點,可以讀出所添加的時間戳來知道正確的測量時間。
校準
校準是為了重寫ECU內部軟件中的參數,而從主結點發送指定XCP地址的命令和重寫數據的命令,從結點會對應的導出適當的參數地址、執行重寫,并返回一個應答。圖18顯示了,根據XCP主結點發送的XCP擴張地址“0”、XCP地址“0x0041D5C8”,將該地址開始的2字節的參數,重寫為“0x0064”的示例的跟蹤結果。
圖18:通過DOWNLOAD命令的校準
其它的XCP功能
XCP僅在測量/校準方面就還有很多的功能。除了這次我們介紹的之外,還包括諸如對ECU中的閃存之類的非易失性存儲器的訪問功能、對ECU的訪問保護的功能等許多功能。
到這里,已經詳細解釋了XCP協議通信的機制和功能。接下來將介紹“XCP趨勢和應用實例”。
總結
- 上一篇: 标定协议之XCP标定协议介绍
- 下一篇: 初始c语言函数递归