XCP协议
這兩周在驗(yàn)證移植到ECU的XCP模塊是否正常運(yùn)轉(zhuǎn),所以干脆開(kāi)個(gè)專(zhuān)題,說(shuō)說(shuō)這個(gè)汽車(chē)業(yè)內(nèi)常用的標(biāo)定協(xié)議。
?
背景概述
眾所周知,一輛汽車(chē)內(nèi)部會(huì)有許許多多的ECU(Electronic Control Unit),通過(guò)CAN, LIN, Gateway 等互相連接通訊,分別或者一起協(xié)作控制不同的部件。因而標(biāo)定工程師需要對(duì)不同ECU的參數(shù)進(jìn)行測(cè)量獲取和標(biāo)定。尤其是在當(dāng)下,汽車(chē)功能日益復(fù)雜,已經(jīng)很少OEM選擇完全獨(dú)立完成車(chē)內(nèi)的所有ECU軟件設(shè)計(jì)開(kāi)發(fā),而是選擇與多個(gè)Tier1進(jìn)行協(xié)同開(kāi)發(fā)。所以統(tǒng)一的量測(cè)和標(biāo)定協(xié)議顯得尤為重要。
上世紀(jì)九十年代,由Audi、BMW、Mercedes-Benz、Volkswagen等歐洲汽車(chē)企業(yè)成立了一個(gè)協(xié)會(huì)-ASAM(Association for Standardisation of Automation and Measuring Systems, 自動(dòng)化及測(cè)量系統(tǒng)標(biāo)準(zhǔn)協(xié)會(huì)), 它是汽車(chē)工業(yè)中的標(biāo)準(zhǔn)協(xié)會(huì),致力于數(shù)據(jù)模型,接口及語(yǔ)言規(guī)范等領(lǐng)域。最初,該協(xié)會(huì)發(fā)布的是CCP(CAN Calibration Protocol)協(xié)議,它是一種基于CAN總線的ECU標(biāo)定協(xié)議,采用CCP協(xié)議可以快速而有效地實(shí)現(xiàn)對(duì)汽車(chē)電控單元的標(biāo)定。即便是現(xiàn)在也仍然有許多歐美汽車(chē)廠商還在使用。
?
XCP協(xié)議
CCP協(xié)議限定了它的使用范圍為CAN總線,然而汽車(chē)內(nèi)部除了CAN通訊以外,還有LIN,USB,FlexRay等,所以后來(lái)ASAM組織又發(fā)布了XCP(Universal Measurement and Calibration Protocol)協(xié)議,用X打頭表示該協(xié)議可以應(yīng)用于不同的輸出層:
需要注意的是,XCP雖然名為CCP協(xié)議的升級(jí)版本,然而XCP協(xié)議并不向下兼容CCP協(xié)議,有興趣的可以詳細(xì)去看看它們的命令碼,用的區(qū)域已經(jīng)完全不相干。
相比CCP, XCP還有以下幾個(gè)不同之處:
?
原理解析
無(wú)論是CCP還是XCP,它們的量測(cè),標(biāo)定的原理都是類(lèi)似的。
1. 采用一主多從的模式,單個(gè)主機(jī)可以同時(shí)與多個(gè)從機(jī)通訊;
2. 主機(jī)通過(guò)下發(fā)命令與從機(jī)建立連接,解鎖,讀取數(shù)據(jù),修改參數(shù)等操作。
那么主機(jī)是怎么讀取或者修改從機(jī)的數(shù)據(jù)的?我們知道,ECU程序使用的參數(shù)或者數(shù)據(jù),要么在RAM中,要么在Flash中,要么在EEPROM中會(huì)有特定的地址,那我們可以通過(guò)一個(gè)文件(A2L格式文件),描述出某個(gè)參數(shù)的屬性:包括參數(shù)顯示名,長(zhǎng)度,物理單位,轉(zhuǎn)換關(guān)系以及映射到ECU的地址。那么主機(jī)通過(guò)該文件,就可以獲取所有上述信息。以讀取為例,例如想要讀取起始地址A,長(zhǎng)度為2byte的數(shù)據(jù),那么主機(jī)通過(guò)設(shè)定MTA(Memory Transfer Address)為A,并指定長(zhǎng)度為2,然后將命令下發(fā)給從機(jī),從機(jī)收到命令后,從指定的MTA中讀取2byte數(shù)據(jù),然后回傳給主機(jī)。同樣的,主機(jī)改數(shù)據(jù)也是類(lèi)似的。
以上的交互方式是CCP/XCP最基本的通訊方式,采用的是一問(wèn)一答。為了提高通訊的效率和數(shù)據(jù)吞吐量,CCP/XCP還支持DAQ(Data AcQuisition)模式。基本原理為:主機(jī)一次性配置好所有要讀取的變量,并關(guān)聯(lián)ECU端的不同事件channel,一旦ECU對(duì)應(yīng)的事件發(fā)生(例如每隔100ms),主動(dòng)上傳數(shù)據(jù)給主機(jī)。
?
如何快速將CCP/XCP協(xié)議移植到自己的ECU
CCP/XCP協(xié)議原理總體來(lái)說(shuō)簡(jiǎn)單易懂,但是真正按照協(xié)議開(kāi)發(fā)軟件模組是相當(dāng)龐大的工作。我采用的方法是直接前往Vector官網(wǎng)下載Vector提供的XCP Basic軟件包,免費(fèi)開(kāi)源的。相比完整的協(xié)議,Vector提供的basic包在功能上有所閹割,不過(guò)即便對(duì)于主機(jī)廠也夠用了。如果想要實(shí)現(xiàn)全部功能,可以購(gòu)買(mǎi)Vector的professional包(我是不是該向Vector收廣告費(fèi)吶),或者基于basice包二次開(kāi)發(fā)。
下載后解壓的文件目錄是這樣的。里面有原版的CCP/XCP協(xié)議pdf,basic包源碼和使用手冊(cè),應(yīng)用實(shí)例。你要做的就是結(jié)合使用手冊(cè)和實(shí)例,對(duì)照著移植到你的ECU。PS:移植過(guò)程需要格外注意DAQ模式相關(guān)的配置部分代碼和發(fā)送Callback 函數(shù),小編被其中的兩個(gè)坑耗費(fèi)了不少debug精力。有實(shí)際移植該軟件包的童鞋,如果遇到問(wèn)題可以留言交流。
另外建議購(gòu)買(mǎi)Vector或者Vehicle SPY的相關(guān)軟件和設(shè)備,進(jìn)行A2L文件的編輯生成和實(shí)際測(cè)試使用。
轉(zhuǎn)載是一種動(dòng)力 分享是一種美德,歡迎關(guān)注本公眾號(hào),可以掃碼或者微信搜索公眾號(hào):芯連心嵌入式設(shè)計(jì)交流 。
?
總結(jié)
- 上一篇: 联想G50-70恢复出厂设置
- 下一篇: 哇哇哇哇哇