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