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