CCP學習二——通訊流程
1 概述
CCP通訊按資訊傳輸方式分為:POLLING(問答)和DAQ方式 按功能模式分為三種:SESSION(會話)、CAL(標定)、DAQ(查詢) 工作流程一般為,程式初始化完成後,通過SET_S_STATE設定節點當前工作狀態(Session/CAL/DAQ),若觸發CAL和DAQ,需要在初始化時對該功能進行初始化。 正常情況下設定為會話模式(SESSION),需要CAL和DAQ時在進行初始化。 可以看出CCP通訊協議的分為這四大模組,初始化、會話、標定、DAQ資料傳輸。
PS:“冷啟動”包含: ① 連線:建立主從裝置之間的邏輯連線, ② seed&key 登入程式, ③ 自動會話配置(EXCHANGE ID),除非被覆蓋, ④ 自動程式碼更新,如果主裝置支援。
1.1.初始化
應用程式完成CAN Driver初始化後,呼叫CCP功能前需要對其進行初始化,按順序如下:
命令 | 描述 | 備註 |
---|---|---|
TEST | 物理連線 | 測試是否物理連線建立起來,返回ECU的station address,該命令在可選命令中 |
CONNECT | 通訊連線 | 建立點對點(master-slave)的物理連結,宣告接下來的命令都是針對當前從節點發送的,直到另一從節點被選中,此時當前的節點處於暫時斷開狀態。從裝置不響應任何指令,除非先用帶正確station address資訊的CONNECT命令連結。 |
GET_CCP_VERSION | 獲取CCP版本 | 協議三原則:大版本號一定要相同;小版本號主節點大於等於從節點主節點支援有Non-Optional命令(初始化) |
EXCHANGE_ID | 交換ID | CCP主站和從站交換id以實現自動會話配置。根據從伺服器返回的ID,可能包含自動分配資料採集設定檔案(Plug’n’Play)。 |
GET_SEED | 獲取SEED | EXCHANGE_ID 執行完後,自動將MTA0設定到相關位置,接到該命令後返回SEED,用來加密互動。 |
UNLOCK | 傳送KEY解鎖 | 與SEED和加密style配合,計算出Key,返回功能許可權資訊,三種許可權CAL、DAQ及PGM需要三次破解。 |
SET_S_STATUS | 設定狀態位 | 設定ECU內CCP通訊狀態,一般進入等待狀態。bit 0 CAL初始化完成; bit 1 DAQ初始化完成 ;bit 2 儲存DAQlist設定,上電開始傳輸;bit 6 CAL引數掉電不丟失 ;bit 7 Session in progress |
解鎖完成後,依據任務的分配,系統工作狀態可以設定為以下三種狀態:
- ① 等待會話狀態,接收命令,觸發命令操作
- ② 繼續初始化CAL和DAQ,例如:設定DAQ掉電不丟失,上電自動傳輸,此時需要設定為DAQ初始化完成狀態
- ③ DISCONNECT,休眠當前節點。多ECU並行工作時,初始化時把所有節點都初始化,斷開連線把每個ECU設定為休眠狀態,通過CONNECT再喚醒具體ECU,切換工作。單節點工作時不需要此命令,直接進入某種工作狀態。
1.2.會話狀態
會話狀態主要定義具體應用協議,接受具體程式碼,執行相關命令,返回結果資料。典型函式兩條:
- ACTION SERVICE:行動響應(Action Service)
- DIAG SERVICE:診斷服務(Diagnostic Service)
都是先發送協議命令,從節點接收到命令資訊後按照執行具體行動,並自動設定MTA0到要返回的資料儲存首地址,通過DTO帶回要返回資訊長度。資訊量大時呼叫UPLOAD讀取,資訊量小於3bytes,直接附在DTO未定義位返回,例如執行結果,增加執行效率。 UPLOAD、DNLOAD兩個函式也可以實現會話服務,但傳遞資料需要先呼叫SETMTA指定具體儲存地址,容易造成記憶體區儲存混亂,且傳輸效率低,主要應用於批量資料傳輸。而 ACTION SERVICE和DIAG SERVICE傳遞的是握手資訊,不需要明確傳遞引數的具體儲存地址。DNLOAD 6相同。 SHORT UP與UPLOAD命令區別在於和MTA0無關, CRO自帶儲存區首地址,且執行完後MTA0不自增,適用於小量單次資料上傳。
2.CCP具體功能的實現例子
2.1.Session log-in
CONNECT (邏輯連線)
CRO | 0x01 | 0x45 | 0x00 | 0x02 |
---|---|---|---|---|
DTO | 0xFF | 0x00 | 0x45 |
GET_CCP_VERSION (版本一致)
CRO | 0x1B | 0x27 | 0x02 | 0x01 | |
---|---|---|---|---|---|
DTO | 0xFF | 0x00 | 0x27 | 0x02 | 0x01 |
EXCHANGE_ID (交換身份標識)
CRO | 0x17 | 0x23 | |||||
---|---|---|---|---|---|---|---|
DTO | 0xFF | 0x00 | 0x23 | 0x04 | 0x02 | 0x03 | 0x03 |
GET_SEED (得到祕鑰種子,返回祕鑰)
CRO | 0x12 | 0x23 | 0x02 | |||||
---|---|---|---|---|---|---|---|---|
DTO | 0xFF | 0x00 | 0x23 | 0x01 | 0x14 | 0x15 | 0x16 | 0x17 |
UNLOCK (通過接收到的祕鑰,解除保護)
CRO | 0x13 | 0x23 | 0x14 | 0x15 | 0x16 | 0x17 |
---|---|---|---|---|---|---|
DTO | 0xFF | 0x00 | 0x23 | 0x02 |
SET_S_STATUS (設定會話狀態,設定一個或多個狀態位)
CRO | 0x0C | 0x23 | 0x81 |
---|---|---|---|
DTO | 0xFF | 0x00 | 0x23 |
2.2.Calibration Data Initialization CONNECT (連線,如果已經連線,跳過)
CRO | 0x01 | 0x45 | 0x00 | 0x02 |
---|---|---|---|---|
DTO | 0xFF | 0x00 | 0x45 |
SET_S_STATUS (設定會話狀態(xxxx xxx0)CAL=off)
CRO | 0x0C | 0x23 | 0x81 |
---|---|---|---|
DTO | 0xFF | 0x00 | 0x23 |
Loop SET_MTA (設定記憶體傳輸地址到目的塊)
CRO | 0x02 | 0x23 | 0x00 | 0x02 | 0x34 | 0x00 | 0x20 | 0x00 |
---|---|---|---|---|---|---|---|---|
DTO | 0xFF | 0x00 | 0x23 |
BUILD_CHKSUM (構建記憶體塊的校驗和)
CRO | 0x0E | 0x23 | 0x00 | 0x00 | 0x80 | 0x00 |
---|---|---|---|---|---|---|
DTO | 0xFF | 0x00 | 0x23 | 0x02 | 0x12 | 0x34 |
DOWNLOAD (下載,如果校驗和不匹配)
CRO | 0x03 | 0x23 | 0x05 | 0x10 | 0x11 | 0x12 | 0x13 | 0x14 |
---|---|---|---|---|---|---|---|---|
DTO | 0xFF | 0x00 | 0x23 | 0x02 | 0x34 | 0x00 | 0x20 | 0x05 |
SELECT_CAL_PAGE (選擇標定資料頁)
CRO | 0x11 | 0x23 | |
---|---|---|---|
DTO | 0xFF | 0x00 | 0x23 |
SET_S_STATUS (設定會話狀態 bit CAL=1(xxxx xxx1))
CRO | 0x0C | 0x23 | 0x81 |
---|---|---|---|
DTO | 0xFF | 0x00 | 0x23 |
2.3.DAQ list Initialization CONNECT (連線,如果已經連線,跳過)
CRO | 0x01 | 0x45 | 0x00 | 0x02 |
---|---|---|---|---|
DTO | 0xFF | 0x00 | 0x45 |
SET_S_STATUS (設定會話狀態 DAQ=0(xxxx xx|0x))
CRO | 0x0C | 0x23 | 0x81 |
---|---|---|---|
DTO | 0xFF | 0x00 | 0x23 |
GET_DAQ_SIZE (分配DAQ列表,參考Organization of DAQ)
CRO | 0x14 | 0x23 | 0x03 | ------ | 0x01 | 0x02 | 0x03 | 0x04 |
---|---|---|---|---|---|---|---|---|
DTO | 0xFF | 0x00 | 0x23 | 0x10 | 0x08 |
Loop SET_DAQ_PTR (設定目標指標)
CRO | 0x15 | 0x23 | 0x03 | 0x05 | 0x02 |
---|---|---|---|---|---|
DTO | 0xFF | 0x00 | 0x23 |
WRITE_DAQ (寫列表資料)
CRO | 0x15 | 0x23 | 0x02 | 0x01 | 0x02 | 0x00 | 0x42 | 0x00 |
---|---|---|---|---|---|---|---|---|
DTO | 0xFF | 0x00 | 0x23 |
SET_S_STATUS (設定會話狀態 DAQ=1(xxxx xx1x))
CRO | 0x0C | 0x23 | 0x81 |
---|---|---|---|
DTO | 0xFF | 0x00 | 0x23 |
STATRT_STOP (開始DAQ --|–|--|–|--|–|--|–| DTOs的資料傳輸,設定引數)
CRO | 0x06 | 0x23 | 0x01 | 0x03 | 0x07 | 0x02 | 0x00 | 0x01 |
---|---|---|---|---|---|---|---|---|
DTO | 0xFF | 0x00 | 0x23 |
2.4.Code Update CONNECT (連線,如果已經連線,跳過)
CRO | 0x01 | 0x45 | 0x00 | 0x02 |
---|---|---|---|---|
DTO | 0xFF | 0x00 | 0x45 |
SET_MTA (設定記憶體傳輸地址到開始地址)
CRO | 0x02 | 0x23 | 0x00 | 0x02 | 0x34 | 0x00 | 0x20 | 0x00 |
---|---|---|---|---|---|---|---|---|
DTO | 0xFF | 0x00 | 0x23 |
CLEAR_MEMORY (清除從裝置的記憶體)
CRO | 0x10 | 0x23 | 0x00 | 0x00 | 0x80 | 0x20 |
---|---|---|---|---|---|---|
DTO | 0xFF | 0x00 | 0x23 |
Loop PROGRAM (程式 取決於扇區或裝置的大小)
CRO | 0x18 | 0x23 | 0x03 | 0x10 | 0x11 | 0x12 | ||
---|---|---|---|---|---|---|---|---|
DTO | 0xFF | 0x00 | 0x23 | 0x02 | 0x34 | 0x00 | 0x20 | 0x03 |
PROGRAM (SIZE=0,程式結束)
CRO | 0x18 | 0x23 | 0x03 | 0x10 | 0x11 | 0x12 | ||
---|---|---|---|---|---|---|---|---|
DTO | 0xFF | 0x00 | 0x23 | 0x02 | 0x34 | 0x00 | 0x20 | 0x03 |
2.5.Block DownLoad CONNECT (連線,如果已經連線,跳過)
CRO | 0x01 | 0x45 | 0x00 | 0x02 |
---|---|---|---|---|
DTO | 0xFF | 0x00 | 0x45 |
SET_MTA (設定記憶體傳輸地址到目的塊)
CRO | 0x02 | 0x23 | 0x00 | 0x02 | 0x34 | 0x00 | 0x20 | 0x00 |
---|---|---|---|---|---|---|---|---|
DTO | 0xFF | 0x00 | 0x23 |
DOWNLOAD (下載,相應的資料塊大小被下載)
CRO | 0x03 | 0x23 | 0x05 | 0x10 | 0x11 | 0x12 | 0x13 | 0x14 |
---|---|---|---|---|---|---|---|---|
DTO | 0xFF | 0x00 | 0x23 | 0x02 | 0x34 | 0x00 | 0x20 | 0x05 |
2.6.Block UpLoad CONNECT (連線,如果已經連線,跳過)
CRO | 0x01 | 0x45 | 0x00 | 0x02 |
---|---|---|---|---|
DTO | 0xFF | 0x00 | 0x45 |
SET_MTA (設定記憶體傳輸地址到源資料塊)
CRO | 0x02 | 0x23 | 0x00 | 0x02 | 0x34 | 0x00 | 0x20 | 0x00 |
---|---|---|---|---|---|---|---|---|
DTO | 0xFF | 0x00 | 0x23 |
UPLOAD (上傳)
CRO | 0x04 | 0x23 | 0x04 | ||||
---|---|---|---|---|---|---|---|
DTO | 0xFF | 0x00 | 0x23 | 0x10 | 0x11 | 0x12 | 0x13 |
3.附錄: 錯誤碼矩陣