美國英特佩斯控制系統(tǒng)有限公司()
CAN CALIBRATION PROTOCOL(簡稱CCP)是一種基于CAN總線的匹配標(biāo)定協(xié)議;是ASAM-MCD標(biāo)準(zhǔn)化協(xié)議的一部分。它主要用于對ECU的變量標(biāo)定和程序刷新。
CCP是基于CAN的應(yīng)用層協(xié)議。總體來說,CCP的協(xié)議比較簡單。采用主從方式,MCD工具作為MASTER,發(fā)送命令報文(CRO),ECU作為SLAVE應(yīng)答(DTO)。DTO出了應(yīng)答命令外,還包括從數(shù)據(jù)主動上傳的DAQ數(shù)據(jù)包。
1: 通用報文格式:
CRO
1:CMD |
2:CTR |
3-8:Date and Parameter |
CMD:命令代碼。如連接命令0x01,
CTR: 命令計數(shù)器。保證命令和應(yīng)答的一致性。
DTO
1:PID |
2:ERR |
3:CTR |
4-8: Data and Parameter |
PID:包標(biāo)識 [0XFE-0xFF],0XFF表示命令應(yīng)答,0XFE表示錯誤報文
ERR:應(yīng)答碼
CTR: 命令計數(shù)器,與命令中的計數(shù)器對應(yīng)。
1:PID |
2-8:DAQ VALUE |
PID:包標(biāo)識 [0X00-0xFD],在DAQ模式下,此標(biāo)識對應(yīng)于相應(yīng)的ODT標(biāo)識(一次設(shè)置最多254個ODT)。表示后面的上傳數(shù)據(jù)是此ODT中元素索引表中對應(yīng)的變量值。
DAQ VALUE:ODT中元素索引表中對應(yīng)的變量值,最大7個字節(jié)。
2: CCP標(biāo)定過程
對于初接觸CCP的工作人員,對于CCP的理解難度主要在DAQ模式上。下面用一個形象的比方來解釋CCP標(biāo)定過程。
CCP標(biāo)定過程比喻表
項(xiàng)目 |
CCP標(biāo)定 |
現(xiàn)實(shí)比方 |
備注 |
1 |
標(biāo)定工具 |
省領(lǐng)導(dǎo) |
如Vehicle spy,INCA等 |
2 |
A2L文件 |
參考資料 |
|
3 |
DAQ LIST |
縣(虛) |
|
4 |
|
鄉(xiāng)(虛) |
PID 分配單位 |
5 |
DAQ Element reference |
村索引(虛) |
|
6 |
DAQ Organization |
郵政編碼冊 |
與現(xiàn)實(shí)生活稍有區(qū)別,同樣的PID號可以動態(tài)的分配給不同鄉(xiāng)鎮(zhèn)。 |
6 |
PID |
郵政編碼 |
0-253,相比變量地址,只占用1個字節(jié),節(jié)省網(wǎng)絡(luò)資源.分配給各個鄉(xiāng)鎮(zhèn)(ODT) |
7 |
ECU字節(jié) |
村小組(實(shí)) |
未標(biāo)識在圖示中 |
8 |
ECU變量 |
行政村(實(shí)) |
變量有1-4字節(jié)長度,相對應(yīng)各個行政村包括1-4個小組。DQA的上傳報文7個字節(jié)對應(yīng) 7個小組。 |
9 |
標(biāo)定過程 |
制定糧食生產(chǎn)計劃 |
包括上級硬性分配計劃(downlod)、上級要求上報計劃(upload),和下級主動申報(DAQ) |
10 |
CAN消息 |
郵件 |
|
A2L 文件:A2L 文件是標(biāo)定數(shù)據(jù)庫文件。它包括標(biāo)定變量的類型、地址、物理轉(zhuǎn)化方式以及單位等等。
以下是A2L文件中的一個標(biāo)定變量
/begin CHARACTERISTIC ofm_rear_wipe_lospd_fault_state_value/*變量名*/ ""
VALUE 0xF1814/*ECU地址*/ __UWORD_S/*類型*/ 0 SION/*轉(zhuǎn)化方法*/ 0 65535
EXTENDED_LIMITS 0 65535
BIT_MASK 0xFFFF
FORMAT "%.15"
/begin IF_DATA CANAPE_EXT
100
DISPLAY 0 0 65535
/end IF_DATA
/end CHARACTERISTIC
每次生成ECU的執(zhí)行文件時,需要更新相應(yīng)的A2L文件中變量的地址和類型,這樣保證A2L表中的變量地址與類型與ECU中的完全一致。
ECU物理結(jié)構(gòu)與DAQ定義:
上圖中最右面黃色部分表示ECU內(nèi)部的實(shí)際存儲結(jié)構(gòu)。由各個實(shí)際村莊(變量)實(shí)際構(gòu)成;左面部分是一個DAQ的索引表(類似現(xiàn)實(shí)中的郵政編碼薄);只有在DAQ模式下才會利用到這個索引表。
DAQ的索引表由三層結(jié)構(gòu)組成,縣市(List)、鄉(xiāng)鎮(zhèn)(ODT)、村索引(Element reference)。每個村索引最終與實(shí)際的村莊建立聯(lián)系。
標(biāo)定過程:
A: 領(lǐng)導(dǎo)制定生產(chǎn)計劃:(download)
領(lǐng)導(dǎo)要求張莊生產(chǎn)糧食10萬噸,通過查閱參考資料(A2L)找到張莊的信息(地址,村莊大小),然后將查詢命令通過快件讓郵遞員(CAN)送達(dá)。
CCP命令:
Set MTA Command (告訴ECU需要設(shè)定的當(dāng)前地址為張莊地址)
Download Command (告訴ECU需要設(shè)定要調(diào)整的產(chǎn)量為10萬噸)
B: 領(lǐng)導(dǎo)需要了解生產(chǎn):(upload)
領(lǐng)導(dǎo)要求匯報張莊生產(chǎn)糧食產(chǎn)量,通過查閱參考資料(A2L)找到張莊的信息(地址,村莊大小),然后將查詢命令通過快件讓郵遞員(CAN)送達(dá)張莊;張莊將各個小組的當(dāng)前產(chǎn)量交郵遞員送回。
CCP命令:
short upload(告訴ECU需要匯報張莊的產(chǎn)量)
C: 村莊主動上傳生產(chǎn):(DAQ)
領(lǐng)導(dǎo)貪圖安逸,不想挨個詢問村莊的信息。希望需要了解的村莊能夠主動上報產(chǎn)量(DAQ)。
比較可行的辦法是各個村莊把地址信息和產(chǎn)量信息都上傳上來,領(lǐng)導(dǎo)通過查詢參考資料(A2L文件)能得出各個村莊的產(chǎn)量。但是這種方式有兩個問題:
C1: 地址信息需要4個字節(jié)。將大量的占用有限資源,并使郵遞員(CAN)疲于奔命。如果張莊需要上傳信息,地址將占4個字節(jié),有限信息只能利用剩余的CAN數(shù)據(jù)資源。
C2: 無組織性。領(lǐng)導(dǎo)并不需要所有的村莊匯報信息,他只需要一部分村莊的信息;或者這次他不希望某村匯報,而下次希望他匯報。沒有一定的規(guī)劃,無法實(shí)現(xiàn)領(lǐng)導(dǎo)的意圖。
為了解決上述問題,CCP采用了下面的措施。
C1:用一個字節(jié)的郵政編碼PID號代替地址(4個字節(jié))。
C2:建立動態(tài)的郵政編碼(DAQ元素索引表),將需要標(biāo)定的村莊(變量)關(guān)聯(lián)到DAQ元素索引表中。
DAQ索引表:
這是一個類似現(xiàn)實(shí)生活中郵政編碼的表結(jié)構(gòu),由3個層次組成。List(縣市)、ODT(鄉(xiāng)鎮(zhèn))、Element reference(村莊)。
其中ECU中CCP驅(qū)動包括多少List,每個List包括多少個ODT; 由ECU程序員根據(jù)資源情況進(jìn)行分配。同時ECU程序員還指定了每個List中ODT起始PID的數(shù)值。
如:某個ECU程序中CCP驅(qū)動設(shè)定了2個List;list1包含6個ODT;List2包含8個ODT; List1中第一個ODT的PID是0(PID 0-5在List1中);List2第一個ODT的PID是10(PID 10-17在List1中);
在QAD上傳的數(shù)據(jù)格式中,一次最多只能上傳7個字節(jié),所以每個ODT的element reference不會超過7個。
DAQ初始化:
由于采用了新的標(biāo)識碼PID來標(biāo)識數(shù)據(jù),領(lǐng)導(dǎo)首先需要知道ODT表中的PID分布,以便將所有需要了解的村莊進(jìn)行PID標(biāo)識。其初始化過程如下:
1#領(lǐng)導(dǎo)詢問第一個縣由多少鄉(xiāng)鎮(zhèn)組成,ECU匯報這個縣有多少個鄉(xiāng)鎮(zhèn)。這個縣第一個鄉(xiāng)鎮(zhèn)的郵編是多少(PID).(CCP命令:GetDAQSize)
2 #領(lǐng)導(dǎo)重復(fù)詢問第二個縣由多少鄉(xiāng)鎮(zhèn)組成,ECU匯報這個縣有多少個鄉(xiāng)鎮(zhèn)。這個縣第一個鄉(xiāng)鎮(zhèn)的郵編是多少(PID).重復(fù)這樣的過程,直到當(dāng)領(lǐng)導(dǎo)詢問到某個縣時,ECU匯報沒有鄉(xiāng)鎮(zhèn)。完成對整個郵編的詢問。然后領(lǐng)導(dǎo)記錄下目前所有可用的郵編。(CCP命令:GetDAQSize)
3#領(lǐng)導(dǎo)將各個需要匯報的村莊關(guān)聯(lián)到Element reference(屬于ODT,有特定的郵編PID)中。所有村莊設(shè)置完成,然后啟動DAQ,由村莊主動匯報。
(CCP命令:SetDAQPtr,WriteDAQ)
4# 領(lǐng)導(dǎo)得到DAQ數(shù)據(jù)后,結(jié)合先前的DAQ初始化,便可以得到各個村莊的當(dāng)前產(chǎn)量。
完成村莊的郵政編碼后,領(lǐng)導(dǎo)命令被標(biāo)識的村莊可以開始進(jìn)行DAQ數(shù)據(jù)上傳了。
(轉(zhuǎn)載)