1. 程式人生 > >CCP學習二——通訊流程

CCP學習二——通訊流程

1 概述

  CCP通訊按資訊傳輸方式分為:POLLING(問答)和DAQ方式   按功能模式分為三種:SESSION(會話)、CAL(標定)、DAQ(查詢)   工作流程一般為,程式初始化完成後,通過SET_S_STATE設定節點當前工作狀態(Session/CAL/DAQ),若觸發CAL和DAQ,需要在初始化時對該功能進行初始化。   正常情況下設定為會話模式(SESSION),需要CAL和DAQ時在進行初始化。         在CCP通訊流程 可以看出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.附錄: 錯誤碼矩陣 在這裡插入圖片描述